イメージレイヤーと最適化
Dockerイメージがレイヤー構造になっている仕組みを学び、イメージサイズとビルド時間を最適化します。
「イメージレイヤーと最適化」はCoddyKit上の無料Docker & DevOps Fundamentalsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDocker & DevOps Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
イメージレイヤー:構成要素
Dockerイメージは、巨大な1つのファイルではありません。代わりに、複数の読み取り専用レイヤーから構成されています。これらのレイヤーは、透明シートを重ねたものに似ています。
各レイヤーはイメージへの変更を表しており、イメージを効率的かつ柔軟にします。このレイヤー構造は、Dockerの仕組みの基盤です。

Dockerfileの命令とレイヤー
Dockerfileを作成すると、ほぼすべての命令によって、前のレイヤーの上に新しいレイヤーが作成されます。FROM、RUN、COPY、ADDなどの命令は、いずれも新しいレイヤーの作成につながります。
Dockerはこれらの命令を順番に実行し、直前のレイヤーの状態をもとに新しいレイヤーを構築します。
イメージの履歴を確認する
docker historyコマンドを使うと、イメージを構成するレイヤーを確認できます。このコマンドでは、各命令、そのサイズ、作成日時が表示されるため、イメージがどのように大きくなったかを把握できます。
イメージサイズの問題をデバッグするための強力なツールです。
docker history my-image:latestレイヤーキャッシュの威力
Dockerは、効率的なビルドキャッシュを使用します。Dockerfileの命令とそのコンテキスト(コピー対象のファイルなど)が前回のビルドから変更されていなければ、Dockerは既存のレイヤーを再利用します。
この再利用により、変更されていない手順を再実行する必要がなくなるため、以降のビルドが大幅に高速化されます。
最適化1:レイヤーの順序を工夫する
Dockerfile内の命令の順序は、キャッシュを効果的に利用するうえで重要です。システム依存関係のインストールなど、変更頻度の低い命令を先頭に配置してください。
アプリケーションコードのコピーなど、変更頻度の高い命令は後ろに配置します。こうすると、コードだけを変更した場合に、安定している依存関係のキャッシュ済みレイヤーをDockerが再利用できます。
例:レイヤーの順序の最適化
次の2つのDockerfileスニペットを比較してください。適切な順序では、変更されにくい依存関係を先に配置するため、Dockerはそれらをキャッシュでき、変更されたアプリケーションコードのレイヤーだけを再ビルドできます。
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "server.js"]最適化2:RUNコマンドをまとめる
通常、各RUNコマンドによって新しいレイヤーが作成されます。複数のコマンドを1つのRUN命令にまとめることで、レイヤー数を減らし、最終的なイメージサイズを小さくできる場合があります。
&& \演算子を使ってコマンドを連結すると、1つのアトミックなレイヤーの一部として実行できます。
例:RUNコマンドを連結する
複数のRUNコマンドを使う代わりに、&& \で連結します。これにより、すべての操作を1つにまとめた、より効率的なレイヤーが作成されます。
FROM ubuntu:latest
RUN apt-get update && \
apt-get install -y curl && \
rm -rf /var/lib/apt/lists/*
CMD ["bash"]最適化3:ファイルをクリーンアップする
ビルドプロセス中にのみ必要なファイルは、必ず削除してください。たとえば、パッケージマネージャーのキャッシュ(apt-get cleanなど)や一時的なビルド成果物は、イメージのレイヤーサイズを大幅に増加させることがあります。
それらを作成した同じRUNコマンド内で削除すれば、前のレイヤーに残ることを防げます。
確認テスト:イメージの最適化
次のDockerfileの断片について考えてみましょう。
FROM alpine:latest
COPY . /app
RUN apk add --no-cache git
RUN apk add --no-cache make
CMD ["sh"]イメージサイズを小さくし、再ビルドを高速化できる可能性がある変更として、最も適切なものは次のうちどれですか。
まとめ:より軽量で高速なイメージ
Dockerイメージはレイヤーで構築され、多くの場合、各命令によって新しいレイヤーが作成されることを学びました。これを理解することが最適化の鍵です。
- ビルドキャッシュのヒット率を最大化できるよう、命令の順序を慎重に決める。
- 複数の
RUNコマンドを1つにまとめて、レイヤー数を減らす。 - 一時ファイルは、それぞれの
RUNコマンド内で削除し、レイヤーを小さく保つ。
これらのテクニックにより、より小さく、より高速にビルドできるDockerイメージを作成できます。これは効率的なデプロイに不可欠です。
よくある質問
「イメージレイヤーと最適化」レッスンは無料ですか?
はい。「イメージレイヤーと最適化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Docker & DevOps Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
「イメージレイヤーと最適化」で何を学びますか?
Dockerイメージがレイヤー構造になっている仕組みを学び、イメージサイズとビルド時間を最適化します。 ブラウザで直接実行するハンズオンコードでDocker & DevOps Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Docker & DevOps Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDocker & DevOps Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「イメージレイヤーと最適化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDocker & DevOps Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのDocker & DevOps Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Dockerfileの理解
- カスタムDockerイメージの作成
- イメージレイヤーと最適化
- マルチステージビルドとイメージの縮小