The ability to easily run containerized applications using rkt is quite intoxicating, and quickly leads on to an exploration of what applications are readily available. Docker Hub and Quay are worth exploring. Among those applications on Docker Hub are Julia and Ruby.
[options.common] image = [ "--seccomp", "mode=retain,@docker/default-whitelist,mbind", ] [alias.julia_] image = "docker://julia" exec = ["/usr/local/julia/bin/julia"]
Note that this snippet makes use of a rktrunner alias, so that we can invoke containerized Julia very easily.
$ rkt-run -i julia _ _ _ _(_)_ | A fresh approach to technical computing (_) | (_) (_) | Documentation: http://docs.julialang.org _ _ _| |_ __ _ | Type "?help" for help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 0.5.1 (2017-03-05 13:25 UTC) _/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release |__/ | x86_64-pc-linux-gnu julia>
The julia alias is defined to rktrunner by virtue of being the basename of the path
/usr/local/julia/bin/julia given in the config file. As usual, if you want to see what rktrunner is actually passing through to the
rkt run command, use
So far so good, but how to use this as a script interpreter?
Ideally, we would like to be able to simply run a Julia script simply by invoking it from the command line. Suppose the following file is called
hello-world.jl, is executable, and is on the path:
#!/usr/bin/env julia println("Hello Julia world!")
What do we need in place to be able to invoke it as
hello-world.jl? We simply need an executable called julia installed somewhere on the path, which will be invoked with the name of the script file as an argument, and will in turn invoke
rkt-run julia <scriptfile>.
In fact, rktrunner comes with just such an executable, called rkt-run-helper, which looks at its own name to determine which alias to use. So it is sufficient to setup a symlink called julia somewhere on the path, like this (exact details depending on where rkt-run-helper has been installed):
$ ls -l julia lrwxrwxrwx 1 root root 37 Apr 20 12:08 julia -> /usr/libexec/rktrunner/rkt-run-helper
And once this is in place, we have just what we wanted, and can run Julia scripts using the containerized Julia interpreter.
$ ./hello-world.jl Hello Julia world!