SlimとDistrolessベースによるイメージサイズの最小化
最小限のベースイメージを選び、ビルドツールを削除し、distrolessまたはscratchベースを使って最終イメージを縮小します。プルを高速化し、攻撃対象領域も小さくできます。
「SlimとDistrolessベースによるイメージサイズの最小化」はCoddyKit上の無料Docker & DevOps Fundamentalsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDocker & DevOps Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
イメージサイズが重要な理由
小さいイメージは高速に pullでき、起動も速く、保存コストも低く、攻撃者にさらすパッケージも少なくなります。サイズの最適化は、パフォーマンスとセキュリティの両方に効果があります。
軽量なベースを選ぶ
デフォルトイメージは便利ですが、サイズが大きくなりがちです。node:20(約 1GB)を node:20-slim または node:20-alpine に変更するだけで、数百 MB をすぐに削減できます。
FROM node:20-slimAlpine のトレードオフ
Alpine は非常に小さい一方で、glibc ではなく musl libc を使用するため、ネイティブバイナリがまれに動作しなくなります。十分にテストしてください。場合によっては、-slim のほうが安全な軽量版です。
FROM python:3.12-alpineRUN レイヤーをまとめる
各 RUN はレイヤーを追加します。関連するコマンドを連結し、同じレイヤーで削除まで行ってください。そうしないと、削除したファイルが以前のレイヤーを肥大化させたままになります。
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*.dockerignore を使用する
.dockerignore ファイルを使うと、node_modules、.git、ログなどの不要なファイルをビルドコンテキストから除外できます。コンテキストが小さくなれば、ビルドが速くなり、レイヤーも小さくなります。
# .dockerignore
.git
node_modules
*.logマルチステージのまとめ
すべてのコンパイラを含むステージでビルドし、成果物だけを COPY --from でクリーンな最終ステージにコピーします。ツールチェーンが最終イメージに含まれることはありません。
FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app
FROM alpine:3.20
COPY --from=build /src/app /appDistroless の紹介
Distroless イメージには、アプリケーションとそのランタイムだけが含まれます。シェル、パッケージマネージャー、余分なバイナリはありません。非常に小さく、悪用も困難です。
FROM gcr.io/distroless/static-debian12
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]シェルがなくても問題ありません
Distroless にはシェルがないため、RUN コマンドや docker exec sh は動作しません。セットアップは前のステージですべて済ませてください。内部を確認する必要がある場合は :debug タグを使用します。
scratch ベース
完全な静的バイナリ(Go、Rust)には、FROM scratch を使うと実行ファイル以外は何も含まれません。合計で数 MB になることもあります。
FROM scratch
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]効果を測定する
docker images でサイズを比較し、docker history で最も大きいレイヤーを確認します。まずサイズの大きいレイヤーから最適化してください。
docker history myapp:latestlatest ではなくバージョンを固定する
特定のタグまたはダイジェストを固定すると、ビルドの再現性が高まり、上流の latest が変更されたときにサイズが予想外に増えることを防げます。
FROM node:20.11.1-slim簡単な確認
distroless イメージの特徴は何ですか?
まとめ
これで、イメージを大幅に小さくできるようになりました。
-slim、-alpine、distroless、またはscratchのベースを選びますRUNレイヤーを連結して整理し、.dockerignoreを使用します- マルチステージビルドでツールチェーンを除外します
docker historyで測定し、バージョンを固定します
イメージが小さくなると、より高速で安全にデプロイできます。
よくある質問
「SlimとDistrolessベースによるイメージサイズの最小化」レッスンは無料ですか?
はい。「SlimとDistrolessベースによるイメージサイズの最小化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Docker & DevOps Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
「SlimとDistrolessベースによるイメージサイズの最小化」で何を学びますか?
最小限のベースイメージを選び、ビルドツールを削除し、distrolessまたはscratchベースを使って最終イメージを縮小します。プルを高速化し、攻撃対象領域も小さくできます。 ブラウザで直接実行するハンズオンコードでDocker & DevOps Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Docker & DevOps Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDocker & DevOps Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「SlimとDistrolessベースによるイメージサイズの最小化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDocker & DevOps Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのDocker & DevOps Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 効率化のためのマルチステージビルド
- ビルドキャッシュの活用
- Dockerfileのセキュリティベストプラクティス
- SlimとDistrolessベースによるイメージサイズの最小化