🐥

dockerignoreでビルド時間を短縮しよう

2025/01/25に公開

Daily Blogging35日目

dockerってなんとなく使ってたけど意外に知らないことがある。

ビルド時間長い問題

dockerでイメージをビルドするときに結構時間かかるなぁっていうとき結構ある。
このビルド時間を短縮する方法はいくつかあるが、そのうちの一つが.dockerignoreを使用すること

dockerignoreって何?

.gitignoreみたいなもので、Dockerfile内でCOPYとかADDで指定したディレクトリの中から特定のファイルやディレクトリをコマンドの対象外に指定できる

使い方

たとえばこんなアプリケーションがあったとして

/myapp
  ├── .dockerignore
  ├── Dockerfile
  ├── .git/
  ├── test/
  ├── logs/
  ├── package.json
  └── src/

こういうDockerfileがあるとする。

# ベースとなるイメージを指定
FROM node:16

# 作業ディレクトリを作成
WORKDIR /app

# 必要なファイルをコンテナにコピー
COPY . .

# 依存関係をインストール
RUN npm install

# アプリケーションを起動
CMD ["npm", "start"]

このままdocker buildすると、myapp配下のファイルが全てCOPYされる。
コンテナにlogsや.gitなどのファイルが不要なら無駄にコピーしてきて無駄にイメージレイヤのサイズを増やすことになる。
その結果ビルド時間が増加する。

コンテナにいらないファイルがあるなら.dockerignoreを使用して対象外にしてあげる

# ローカルのログファイルを無視
logs/

# テスト用のデータを無視
test/

# バージョン管理システム関連のファイルを無視
.git
.gitignore

# 環境設定ファイルを無視
.env

これでイメージレイヤのサイズが減る

https://docs.docker.jp/engine/reference/builder.html#dockerignore

Discussion