Open7

Dockerfileごとに.dockerignoreを設定する

ここに書いている内容によると、docker build時には、<指定したDockerfile名>.dockerignore.dockerignoreの順に参照しているとのこと。(ただしDOCKER_BUILDKIT=1にしている場合のみ)

これまでは、本番用のイメージビルドで使うDockerfileや開発用のイメージビルドで使うDockerfileDevに対して、1つの.dockerignoreを設定していましたが、この仕様を考慮することで、各Dockerfileごとに.dockerignoreを設定できそうなので試してみる。

今回は、myapp.Dockerfilemyapp.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が転送対象なっているので正しい挙動っぽい。

ログインするとコメントできます