flox containerize
command
Warning: This command is experimental and its behaviour is subject to change
NAME
flox-containerize - export an environment as a container image
SYNOPSIS
flox [<general-options>] containerize
[-d=<path> | -r=<owner/name>]
[-f=<file> | --runtime=<runtime>]
[--tag=<tag>]
DESCRIPTION
Export a Flox environment as a container image. The image is written to
the specified output target. With --file|-f <file>
a tarball is
writtent to the specified file. When -
is passed as <file>
the image
is instead written to stdout. The --runtime|-r <runtime>
flag supports
docker
and podman
, and expects the selected runtime to be found in
PATH.
When neither option is provided, the container is written to
./<env name>-container.tar
.
Running the container will behave like running flox activate
. Running
the container interactively with docker run -it <container id>
, will
launch a bash subshell in the container with all your packages and
variables set after running the activation hook. This is akin to
flox activate
.
Running the container non-interactively with docker run <container id>
allows you to run a command within the container without launching a
subshell, similar to flox activate --
.
Note: The containerize
command is currently only available on
Linux. The produced container however can also run on macOS.
OPTIONS
-f
, --file
Write the container image to <file>
. If <output target>
is -
,
writes to stdout
.
-r
, --runtime
Load the image into the specified <runtime>
. <runtime>
may bei
either docker
or podman
. The specified binary must be found in
PATH
.
Environment Options
If no environment is specified for an environment command, the environment in the current directory or the active environment that was last activated is used.
-d
, --dir
Path containing a .flox/ directory.
-r
, --remote
A remote environment on FloxHub, specified in the form <owner>/<name>
.
General Options
-h
, --help
Prints help information.
The following options can be passed when running any flox
subcommand
but must be specified before the subcommand.
-v
, --verbose
Increase logging verbosity. Invoke multiple times for increasing detail.
-q
, --quiet
Silence logs except for errors.
EXAMPLES
Create a container image file and load it into Docker:
$ flox containerize -f ./mycontainer.tar
$ docker load -i ./mycontainer.tar
Load the image into Docker:
$ flox containerize -r docker
# or through stdout e.g. if `docker` is not in `PATH`:
$ flox containerize -f - | /path/to/docker
Run the container interactively:
$ flox init
$ flox install hello
$ flox containerize -f - | docker load
$ docker run --rm -it <container id>
[floxenv] $ hello
Hello, world!
Run a specific command from within the container, but do not launch a subshell.
$ flox init
$ flox install hello
$ flox containerize -f - | docker load
$ docker run <container id> hello
Hello, world
Create a container with a specific tag:
$ flox init
$ flox install hello
$ flox containerize --tag 'v1' -f - | docker load
$ docker run --rm -it <container name>:v1
[floxenv] $ hello
Hello, world!
SEE ALSO
flox-activate(1)
[docker-load(1)
]