コンテナイメージを自分で作成(ビルド)するには、Dockerfile(ドッカーファイル) と呼ばれる設定ファイルを使用します。 第3章では、Dockerfileの基本的な書き方から、イメージの容量を劇的に削減するテクニックである「マルチステージビルド」までを図解で分かりやすく学びます。 1. Dockerfileの基本命令 Dockerfileは、コンテナの「設計図」です。テキストファイルに上から順にコマンドを記述していくことで、独自のイメージを自動構築できます。 代表的な命令には以下のようなものがあります。 命令 役割 例 FROM ベースとなるイメージを指定(必須) FROM node:20-alpine WORKDIR コンテナ内の作業ディレクトリを設定 WORKDIR /app COPY ホスト(PC)のファイルをコンテナ内にコピー COPY package.json . RUN イメージ構築時(ビルド時)にコマンドを実行 RUN npm install CMD コンテナ起動時にデフォルトで実行するコマンド CMD ["npm", "start"] EXPOSE コンテナが開放するポート番号(ドキュメント用) EXPOSE 3000 2. イメージレイヤーとビルドキャッシュの仕組み Dockerfileの各命令(特に RUN、COPY、ADD)は、実行されるたびに 「イメージレイヤー」 と呼ばれる読み取り専用の層を作成します。 Dockerはビルドを高速化するため、「変更がないレイヤーは前回のキャッシュを再利用する」 という仕組みを持っています。 キャッシュを活かすDockerfileの書き方 例えば、ソースコードを変更するたびに npm install が走り直すとビルドが遅くなります。そのため、依存関係の定義ファイルだけを先にコピーしてインストールします。 3. マルチステージビルド(Multi-stage Build)とは? アプリケーションをビルドする際、コンパイルや依存ファイルのインストールには多くのツール(コンパイラ、npmパッケージなど)が必要ですが、本番環境で実行する段階では不要なファイル がたくさんあります。 マルチステージビルド は、一つのDockerfile内に複数の FROM を記述し、「ビルド用の一時コンテナ」から「本番用の軽量コンテナ」へ最小限の成果物だけをコピーする 技術です。 これにより、イメージサイズを小さく保ち、セキュリティリスク(余分なライブラリに含まれる脆弱性)を減らすことができます。 マルチステージビルドの仕組み(図解) 具体的なDockerfileの例(Next.jsなどの静的ビルド配信) この方法を使うと、本番イメージには Node.js や node_modules などが含まれず、Nginxと生成された静的ファイル(数MB〜数十MB程度)だけになるため、非常に軽量になります。 まとめ * Dockerfile はコンテナの構築手順を記述した設計図。 * 変更頻度の低い命令(パッケージインストールなど)を上に書くことで、ビルドキャッシュ を効率よく使える。 * マルチステージビルド を使うと、開発ツールを排除した「本番に必要な最小限のファイル」だけでイメージを作れるため、軽量かつ安全になる。 次は、複数のコンテナを組み合わせて動かす「Docker Compose」について学びましょう!