.dockerignore
別名: dockerignore / dockerignore ファイル / Dockerfile.dockerignore
docker build でビルドコンテキストから除外するファイルを書く設定ファイル。
コンテキストのルートに置き、1 行 1 パターンで指定する。
除外したファイルは COPY / ADD からも見えなくなる。
公開:
定義
.dockerignore は、docker build がビルドコンテキストを builder へ送る前に、除外するファイルやディレクトリを指定する設定ファイル。
ビルドクライアントはコンテキストのルートにある .dockerignore を探し、マッチしたパスを取り除いてから送信する。
詳細
中身は改行区切りのパターンの並びで、Go の filepath.Match の規則に従い、** は 0 個以上のディレクトリにマッチする。
各行は filepath.Clean で整形されるため先頭と末尾のスラッシュは無視され、/foo/bar と foo/bar/ は同じ意味になる。
1 桁目が # の行はコメント。
先頭に ! を付けると除外の例外になり、最後にマッチした行が結果を決めるので順序が効く。
Dockerfile が複数あるときは、Dockerfile の横に build.Dockerfile.dockerignore のような名前で置くと、ルートの .dockerignore より優先される(公式ドキュメント(新しいタブで開く))。
node_modules
**/*.log
!keep.logよくある誤解
- Dockerfile と同じ階層に置けば効く: 基準は Dockerfile の場所ではなくコンテキストのルート。
docker build -f docker/Dockerfile .なら、Dockerfile 専用のファイルが無い限り./.dockerignoreが読まれる。 - 転送量を減らすだけで結果は変わらない: 除外したファイルは
COPY/ADDの参照元からも消えるため、COPYが失敗する原因にもなる。 - 除外すれば Dockerfile は送られない: Dockerfile と
.dockerignoreはビルドに必要なので、除外指定しても builder には送られる。
変わるのはCOPY/ADDでイメージに入れられなくなる点だけ。
関連
効かないときの切り分けは .dockerignore が効かずファイルを除外できない、除外しすぎて失敗する例は COPY でファイルが見つからない を参照。
パターンの考え方は glob も近い。