This gist creates such a minimal (yet opinionated) Nix image for Docker that the image will mostly the files included in the Nix installer and a copy of the latest Nixpkgs.
Build a Docker image named nix using the provided Docker based build chain:
$ git clone https://gist.github.com/datakurre/a5d95794ce73c28f6d2f
$ cd a5d95794ce73c28f6d2f
$ IMAGE_NAME=nix IMAGE_TAG=latest makeCreate a Docker data container named nix to use shared persistent /nix
for all run containers.
$ docker create --name nix -v /nix nix sh
To know more about where the nix data gets stored with this setup, please, read Docker documentation about managing data in containers.
Running a Python interpreter with some packages:
$ docker run --rm --volumes-from=nix -ti nix \
nix-shell -p pythonPackages.pillow --run pythonRunning a Haskell Jupyter notebook with mounted context:
$ mkdir .jupyter
$ echo "c.NotebookApp.ip = '*'" > .jupyter/jupyter_notebook_config.py
$ docker run --rm --volumes-from=nix -ti \
-v $PWD:/mnt -w /mnt -e HOME=/mnt -p 8888 nix \
nix-shell -p ihaskell --run "ihaskell-notebook"Building a docker image by using Nix docker tools based expression:
$ docker run --rm --volumes-from=nix -v $PWD:/build:ro -w /build nix \
bash -c "cat \`nix-build release.nix -A image --no-out-link \`" \
| docker loadAdding --help for nix-commands:
$ docker run --rm --volumes-from=nix nix nix-env -i man
$ docker run --rm --volumes-from=nix nix nix-env --helpPurging nix-store cache:
$ docker run --rm --volumes-from=nix nix nix-collect-garbage -dNixpkgs is stored at
/var/nixpkgsso you can override it with your own local version with-v /local/path/to/my/nixpkgs:/var/nixpkgs.By default
nix-envoperates on the default profile at/nix/var/nix/profiles/default, which is conveniently symlinked into/usr/local.For convenience, the image also contains:
- Bash build at
/nix/var/nix/profiles/bashsymlinked into/bin. - All the other binaries from Nix-installer are symlinked into
/usr/bin. - CACerts build at
/nix/var/nix/profiles/cacert.
All the above are simple symlinks to the packages at Nix store provided by the Nix installer. They are included in the default PATH, but only after the default profile.
- Bash build at
Of course, all the above could be customized simply by forking this recipe.