【问题标题】:How to build a docker container with nix?如何用 nix 构建一个 docker 容器?
【发布时间】:2017-04-12 17:21:01
【问题描述】:

我有一个 Nix 包我想捆绑到一个 docker 容器中。

具体来说,我想使用 Nix 作为 Dockerfile 的更具表现力的替代品,以更快(非线性)构建图像。

我在 dockerTools.buildImage 上找到了文档,但我想要一个最小的工作示例,并且我还想知道 docker 容器中的内容。

【问题讨论】:

    标签: docker nix


    【解决方案1】:

    以下示例将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。

    【讨论】:

    • 在 macOS 上,这会构建一个 docker 镜像容器 macOS 软件,即它不能作为 docker 容器运行。
    • @jmg:我只在 Linux 上尝试过,我并不感到惊讶它在 OSX 上不起作用,但我不确定“这构建了一个 docker 镜像容器 macOs 软件”的确切含义。
    • 我的意思是,它包含为 macOS 而不是为 linux 构建的软件。
    • @jmg Here's 关于如何在 macOS 上执行此操作的答案。要点是你给 nixpkgs 一个system 参数:import &lt;nixpkgs&gt; { system = "x86_64-linux"; }。您还需要一个运行 linux 的远程构建器,例如 linuxkit-nix
    • docker run -it nix-htop 不起作用(可能是因为它没有标记为“最新”),但 docker run -it nix-htop:HASH 起作用。
    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2022-10-16
    • 2021-10-01
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多