docker - 如何用 nix 构建一个 docker 容器?

我有一个 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。

https://stackoverflow.com/questions/43375880/

相关文章:

docker - Docker 如何使用端口 2375 和 4243?

java - DockerFile 运行 java 程序

docker - 为什么 Kubernetes 源代码比其他容器编排器大一个数量级?

docker - 如何在 Docker Hub 上查看 Docker 镜像层?

macos - 无法从 docker 容器访问本地网络 IP

docker - 停止和启动容器时出现奇怪的 docker 错误

docker - 在 docker 中生成自签名证书

Docker - 关于使用 Redis、Postgres、ElasticSearch、NGINX、W

docker - 如何在 Docker 中将卷从容器挂载到主机?

mysql - Docker-compose:数据库未初始化