如何使用 nix 构建 docker 容器?
How to build a docker container with nix?
我有一个 Nix 包,我想打包到一个 docker 容器中。
具体来说,我想使用 Nix 作为 Dockerfile
的更具表现力的替代方案,以获得更快的(非线性)图像构建。
我找到了关于 dockerTools.buildImage
的文档,但我想要一个最小的工作示例,而且我还想知道最终在 docker 容器中的内容。
以下示例将 pkgs.nginx
nixpkgs 包(使用 contents =
)打包到 docker 容器中:
docker load --input $(nix-build -E 'with import <nixpkgs> {}; pkgs.dockerTools.buildImage { name = "nix-htop"; contents = pkgs.htop; config = { Cmd = [ "/bin/htop" ]; }; }')
然后您可以 运行 它
docker run -it nix-htop
容器的内容非常少,只有一个 Docker 层:
docker save nix-htop | tar x --to-stdout --wildcards '*/layer.tar' | tar t --exclude="*/*/*/*"
./
./bin/
./bin/htop
./share/
./share/applications/
./share/man/
./share/pixmaps/
nix/
nix/store/
nix/store/gi5vvbjawzw1bakiksazbd50bvfmpmmc-ncurses-6.0/
nix/store/pa5nkrpd5hg5qp1dc4gmbd2vdhn1y3x2-htop-2.0.2/
nix/store/vn6fkjnfps37wa82ri4mwszwvnnan6sk-glibc-2.25/
只有 htop 及其依赖项(glibc、ncurses),我的情况是 26 MB。
我有一个 Nix 包,我想打包到一个 docker 容器中。
具体来说,我想使用 Nix 作为 Dockerfile
的更具表现力的替代方案,以获得更快的(非线性)图像构建。
我找到了关于 dockerTools.buildImage
的文档,但我想要一个最小的工作示例,而且我还想知道最终在 docker 容器中的内容。
以下示例将 pkgs.nginx
nixpkgs 包(使用 contents =
)打包到 docker 容器中:
docker load --input $(nix-build -E 'with import <nixpkgs> {}; pkgs.dockerTools.buildImage { name = "nix-htop"; contents = pkgs.htop; config = { Cmd = [ "/bin/htop" ]; }; }')
然后您可以 运行 它
docker run -it nix-htop
容器的内容非常少,只有一个 Docker 层:
docker save nix-htop | tar x --to-stdout --wildcards '*/layer.tar' | tar t --exclude="*/*/*/*"
./
./bin/
./bin/htop
./share/
./share/applications/
./share/man/
./share/pixmaps/
nix/
nix/store/
nix/store/gi5vvbjawzw1bakiksazbd50bvfmpmmc-ncurses-6.0/
nix/store/pa5nkrpd5hg5qp1dc4gmbd2vdhn1y3x2-htop-2.0.2/
nix/store/vn6fkjnfps37wa82ri4mwszwvnnan6sk-glibc-2.25/
只有 htop 及其依赖项(glibc、ncurses),我的情况是 26 MB。