0Pricing
DevOps Bootcamp · レッスン

イメージレイヤーと最適化

Dockerイメージがレイヤー構造になっている仕組みを学び、イメージサイズとビルド時間を最適化します。

「イメージレイヤーと最適化」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

イメージレイヤー:構成要素

Dockerイメージは、巨大な1つのファイルではありません。代わりに、複数の読み取り専用レイヤーから構成されています。これらのレイヤーは、透明シートを重ねたものに似ています。

各レイヤーはイメージへの変更を表しており、イメージを効率的かつ柔軟にします。このレイヤー構造は、Dockerの仕組みの基盤です。

イメージレイヤーと最適化 — イラスト1

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チューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「イメージレイヤーと最適化」で何を学びますか?

Dockerイメージがレイヤー構造になっている仕組みを学び、イメージサイズとビルド時間を最適化します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「イメージレイヤーと最適化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Dockerfileの理解
  2. カスタムDockerイメージの作成
  3. イメージレイヤーと最適化
  4. マルチステージビルドとイメージの縮小
← DevOps Bootcampに戻る