Nixで作るdocker image - buildEnvについて

要約 この記事では、Nixでdocker imageを作成する例を通して、NixのbuildEnvとは何か、それを使ってどのようにdocker imageが作成されるのか、について述べる。 要約としては以下の通り。 buidEnvは、directoryであるようなfile system objectを統合した新しいパッケージを作成する binとかlibとかのディレクトリにいろんなパッケージが入ることになる dockerTools.buildImageは、buildEnvでまとめたパッケージをルートディレクトリに配置してdocker imageを作成する Nixを用いたdocker imageの作り方 Nixでは、docker imageをDockerfileではなくNix言語を使って書ける。具体的には、dockerTools.buildImageという関数を用いてパッケージを作成する。Dockerfileを使う場合との違いは、もちろんNix言語で宣言的にパッケージ構成が書ける点と、image内に入れるツールとしてnixpkgsに登録されているものが使える点である。 まずは例として、Pythonが入ったdocker imageを作ってみよう。ただし、Pythonだけでなくbashや、lsコマンドも使えるようにする。 ベースとして flake.nix を次のようにする。今回は docker image を docker-example というパッケージとしてビルドする。実際の定義は docker-example.nix に記載する。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { description = "A very basic flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; }; outputs = { self, nixpkgs }: let pkgs = nixpkgs.legacyPackages.x86_64-linux; in { packages.x86_64-linux.docker-example = import ./docker-example.nix { inherit pkgs; }; }; } そして docker-example.nix では以下のようにする。 ...

2026-04-19 · (updated 2026-04-19) · 7 min · 1395 words