Dockerfileごとに.dockerignoreを設定する
ここに書いている内容によると、docker build
時には、<指定したDockerfile名>.dockerignore
→ .dockerignore
の順に参照しているとのこと。(ただしDOCKER_BUILDKIT=1
にしている場合のみ)
これまでは、本番用のイメージビルドで使うDockerfileや開発用のイメージビルドで使うDockerfileDevに対して、1つの.dockerignore
を設定していましたが、この仕様を考慮することで、各Dockerfileごとに.dockerignore
を設定できそうなので試してみる。
今回は、myapp.Dockerfile
とmyapp.DockerfileDev
の2つのDockerファイルを用意して、各Dockerfileを元にビルドする際に、それぞれ<指定したDocerfile名>.dockerignore
が参照されるか確認する。
ビルド時に転送されるcontextのデータ量を計測するため、1GB・100MBのダミーファイルを用意しています。
ディレクトリ構造
.
├── dummy_100M.txt
├── dummy_1G.txt
├── myapp.Dockerfile
├── myapp.Dockerfile.dockerignore
├── myapp.DockerfileDev
└── myapp.DockerfileDev.dockerignore
myapp.Dockerfile / myapp.DockerfileDevの中身は同じでただCOPYするだけ
FROM alpine
COPY . .
myapp.Dockerfile.dockerignore
では、1GBのダミーファイルを指定しています。
dummy_1G.txt
myapp.Dockerfile.dockerignore
では、100MBのダミーファイルを指定しています。
dummy_100M.txt
myapp.Dockerfile
を指定してビルド
$ docker build -f myapp.Dockerfile .
[+] Building 5.2s (7/7) FINISHED
=> [internal] load build definition from myapp.Dockerfile 0.0s
=> => transferring dockerfile: 143B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 2.3s
=> [internal] load build context 2.8s
=> => transferring context: 104.88MB 2.8s
=> [1/2] FROM docker.io/library/alpine@sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f 0.0s
=> CACHED [2/2] COPY . . 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:d79abeb4ec5bac3b3752ab1b900dd23f1fa1ca653a9e338cde3dea2a2e74b66a 0.0s
転送されたデータ量は1.04.88MB
=> => transferring context: 104.88MB
dummy_1G.txt
は転送対象として除外しているので正しい挙動っぽい。
myapp.DockerfileDev
を指定してビルド
docker build -f myapp.DockerfileDev .
[+] Building 96.5s (7/7) FINISHED
=> [internal] load build definition from myapp.DockerfileDev 0.0s
=> => transferring dockerfile: 151B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 1.0s
=> CACHED [1/2] FROM docker.io/library/alpine@sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f 0.0s
=> [internal] load build context 76.5s
=> => transferring context: 1.07GB 76.3s
=> [2/2] COPY . . 12.9s
=> exporting to image 5.8s
=> => exporting layers 5.8s
=> => writing image sha256:b58a71a795ead14a30dd1ca54b0a91799a5ca2b99260314e97c399c435aae587 0.0s
転送されたデータ量は
=> => transferring context: 1.07GB
dummy_1G.txt
が転送対象なっているので正しい挙動っぽい。