先に要点
- .dockerignore は、Docker build に渡したくないファイルを除外するための設定ファイルです。
- 書かないと、
node_modulesや.gitなど不要なファイルまで build context に入り、ビルドが重くなりやすいです。 - 速度だけでなく、秘密情報やローカル専用ファイルをイメージへ混入させる事故も防ぎやすくなります。
.gitignoreと似ていますが別物で、Git で無視するかと Docker build に渡さないかは分けて考える必要があります。
Dockerfile を書き始めたあと、地味だけどかなり大事なのが .dockerignore です。
ここを後回しにすると、ビルドが重い、キャッシュが効きにくい、不要ファイルが混ざる、場合によっては秘密情報まで送ってしまう、という形であとから効いてきます。
この記事では、2026年4月15日時点で Docker Docs の Build context と .dockerignore 関連ドキュメントを確認しながら、.dockerignore とは何か、なぜ必要か、書かないと何が困るのかを初心者向けに整理します。
Dockerfile の基本から先に押さえたいなら、Dockerfileとは?何を書くもの?最初に読むべき命令を初心者向けに整理 もつながりやすいです。
.dockerignoreとは何か
.dockerignore は、Docker build に含めたくないファイルやフォルダを除外するための設定ファイルです。
Docker Docs でも、.dockerignore を使うと build context からファイルを除外できると説明されています。
ここで大事なのは、.dockerignore が Dockerfile の中身を制御するというより、Docker build に何を渡すか を減らす仕組みだという点です。
初心者向けにかなりざっくり言うと、Docker に見せる作業フォルダを軽く・安全にするための除外設定 です。
build context って何なのか
Docker build を実行すると、Docker は指定したディレクトリの中身を build context として扱います。
Docker Docs でも、build context は builder に送られる files and directories と整理されています。
つまり、Dockerfile の COPY . . だけを見ていても不十分で、そもそも builder 側へ何が送られているかが大事です。
.dockerignore は、この 最初に送る対象 を減らすところで効きます。
書かないと何が困るのか
1. ビルドが遅くなりやすい
不要なファイルまで build context に含まれると、そのぶん転送量が増えます。
特に、
node_modules.venvvendordistcoverage
のような大きいフォルダが入ると、かなり重くなりやすいです。
Docker Docs でも、不要ファイルを除外すると context size を小さくできると説明されています。
つまり、.dockerignore は地味ですが、ビルドの体感速度に普通に効きます。
2. キャッシュ効率が悪くなる
build context に余計なファイルが入ると、少しの変更でもキャッシュが崩れやすくなります。
すると、本来は再利用できたビルド工程まで毎回やり直しになりやすいです。
これは Dockerfile 側の COPY 順序とも関係しますが、前提として .dockerignore で不要なものを絞っておいた方が安定しやすいです。
3. 秘密情報やローカル専用ファイルが混ざる
ここはかなり重要です。
たとえば、
.env- 鍵ファイル
- 個人用メモ
- ローカルの設定ファイル
が build context に入っていると、Dockerfile の書き方次第ではイメージへ混ざる危険があります。
COPY していないから大丈夫 と思いやすいですが、そもそも builder へ送らない方が安全です。
4. .git が入って無駄に大きくなる
Git 管理情報が build context に入ると、サイズが増えるだけでなく、履歴変更でキャッシュが崩れる原因にもなりやすいです。
.git はかなり代表的な除外候補です。
.gitignore と何が違うのか
ここは混ざりやすいです。
.gitignore: Git に追跡させたくない.dockerignore: Docker build に渡したくない
似ていますが、役割は別です。
Git 管理したいけれど Docker build には渡したくないものもありますし、その逆もあります。
要するに、.gitignore があるから .dockerignore は不要、とはなりません。
最初に入れやすい例
プロジェクトによって違いますが、最初はこういう内容から入りやすいです。
.git
.env
node_modules
vendor
coverage
dist
.DS_Store
もちろん全部のプロジェクトで同じではありません。
たとえば PHP なら vendor を image build 時にどう扱うか、Node.js なら node_modules をローカル依存として除外するか、方針で変わります。
大事なのは、Docker build に本当に必要なものだけ送る という考え方です。
実務でどう考えるといいか
ローカルだけで使うものをまず疑う
IDE 設定、テスト成果物、キャッシュ、ログ、手元の秘密ファイルは、build context に不要なことが多いです。
大きいフォルダをそのまま入れない
node_modules や .git は典型です。
あとから なんでこんなに build が重いんだろう となる前に、まず除外候補として見た方がよいです。
セキュリティの観点でも見る
.dockerignore は速度最適化だけの話ではありません。
意図しないファイル混入を防ぐ意味でもかなり大事です。
Node.js 案件なら、ローカルの node_modules や .env をそのまま build context に入れないだけでも、ビルド速度と事故リスクの両方をかなり下げやすいです。依存はコンテナ内で入れ直し、秘密情報は build へ渡さない、という整理がかなり基本です。
初心者がハマりやすい点
COPY していないから安全だと思ってしまう
そうとも限りません。
build context に送る時点で減らす意味があるので、.dockerignore は別で持つ方が安全です。
とりあえず .gitignore をコピペして終わる
方向性としては近いですが、完全に同じでよいとは限りません。
Docker build に必要なファイルまで除外しないように注意が必要です。
一度書いたら見直さない
プロジェクトが育つと、増える不要物も変わります。
ビルドが重くなってきたら、.dockerignore を見直すだけで改善することもあります。
まとめ
.dockerignore は、Docker build に渡したくないファイルを除外するための設定ファイルです。
書かないと、ビルドが重くなるだけでなく、キャッシュ効率の悪化や不要ファイル・秘密情報の混入につながることがあります。
最初は、大きいフォルダ ローカル専用ファイル 秘密情報 を build context から外す、という意識だけでもかなり十分です。
続けて読むなら、Dockerfileとは?何を書くもの?最初に読むべき命令を初心者向けに整理 や Docker Hubとは?イメージを pull する仕組みと注意点を解説 もつながりやすいです。
参考リンク
- Docker Docs: Build context
- Docker Docs: Dockerfile reference: .dockerignore file