Dockerは、アプリケーションの実行環境をコンテナとして構築・管理できる便利なツールです。その中でも「docker build」は、Dockerfileをもとにオリジナルのコンテナイメージを作成するための重要なコマンドです。この記事では、Docker初心者の方にもわかりやすく「docker build」の基本的な使い方から、よく使われるオプション、実践的な活用方法までを丁寧に解説します。自分だけのDockerイメージを作れるようになれば、開発・運用の効率は格段にアップしますよ。
docker build コマンドとは?
docker build
は、Dockerfile をもとに新しい Docker イメージを作成するためのコマンドです。Dockerfileには、ベースとなるイメージやソフトウェアのインストール手順、ファイルのコピー、環境変数の設定など、イメージを構築するための命令が記述されています。
たとえば、以下のようなシンプルなDockerfileがあるとします。
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]
このDockerfileを使って docker build
を実行すると、Ubuntuベースにnginxをインストールしたコンテナイメージが作成されます。
基本的な構文と使用例
docker build
の基本構文は以下のとおりです。
docker build [オプション] <ビルドコンテキストのパス>
例1:現在のディレクトリにあるDockerfileを使ってビルドする場合
docker build -t my-nginx-image .
-t
オプションは、イメージに名前(タグ)を付けるために使用します。.
は現在のディレクトリがビルドコンテキスト(Dockerfileと関連ファイルがある場所)であることを示しています。
よく使われるオプション
docker build
では、さまざまなオプションを使うことで柔軟にイメージを構築できます。ここでは代表的なものをいくつか紹介します。
-t / –tag
イメージに名前(タグ)をつけるためのオプションです。
docker build -t myapp:1.0 .
-f / –file
特定のDockerfileを指定してビルドできます。デフォルトは「Dockerfile」ですが、名前を変えている場合はこれを使います。
docker build -f Dockerfile.dev -t dev-image .
–no-cache
キャッシュを使わずに一からビルドする場合に使用します。イメージの更新が確実に反映されます。
docker build --no-cache -t fresh-image .
–build-arg
Dockerfile内で使用するビルド引数を指定できます。たとえば以下のように使います。
Dockerfileの一部:
ARG APP_ENV
ENV APP_ENV=$APP_ENV
ビルド時の指定:
docker build --build-arg APP_ENV=production -t app-env-image .
実際のビルドプロセスの流れ
docker build
を実行すると、以下のような流れで処理が進みます。
- Dockerは、ビルドコンテキストのファイルを読み込みます(
.dockerignore
ファイルで除外設定可能)。 - 指定されたDockerfileを1行ずつ実行して、各ステップのイメージレイヤーを作成します。
- 各ステップはキャッシュされ、次回以降のビルドで再利用されます(キャッシュの有効活用により高速化)。
- 最後に完成したイメージに名前をつけて保存します。
ビルドしたイメージの確認と実行
ビルドしたイメージは以下のコマンドで確認できます。
docker images
表示される内容:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-nginx-image latest 9c0b3bfb4e68 2 minutes ago 133MB
イメージをもとにコンテナを起動するには以下のようにします。
bashコピーする編集するdocker run -d -p 8080:80 my-nginx-image
Dockerfileとビルドのベストプラクティス
docker build
を活用するには、Dockerfileの記述にも気をつけるべき点があります。
- 不要なファイルは
.dockerignore
で除外
ビルドコンテキストを最小化することで、ビルド時間とイメージサイズを減らせます。 - レイヤーを減らす
RUN
命令をまとめて記述し、レイヤー数を抑えることでイメージがコンパクトになります。
RUN apt-get update && \
apt-get install -y curl git && \
rm -rf /var/lib/apt/lists/*
- キャッシュを活かす
頻繁に変わるファイルを後ろのステップに記述することで、前半のキャッシュを有効に保てます。
よくあるエラーと対処法
エラー1:COPY failed: file not found in build context
→ ファイルがビルドコンテキストに含まれていない可能性があります。パスを再確認し、.dockerignore
で除外されていないかチェックしましょう。
エラー2:permission denied
→ COPYしたファイルやシェルスクリプトに実行権限がない可能性があります。RUN chmod +x
を使って実行権限を付与することで解決できます。
マルチステージビルドでイメージを軽量化
マルチステージビルドを活用すると、ビルド用の不要なファイルを含まないスリムなイメージを作成できます。
# ビルドステージ
FROM golang:1.20 as builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# 実行ステージ
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
これにより、最終的なイメージには実行ファイルのみが含まれ、サイズも非常に小さくなります。
まとめ
docker build
コマンドは、Dockerでの開発において欠かせない基本中の基本です。
本記事ではその使い方、よく使うオプション、トラブル対応、マルチステージビルドまでを丁寧に解説しました。
はじめは単純なDockerfileと docker build
の使い方から始め、徐々にオプションや高度なテクニックも取り入れていくと、より効率的な開発・運用が可能になります。
これを機に、自分専用のDockerイメージを自由自在に作れるようになりましょう!