0Pricing
DevOps Bootcamp · レッスン

SlimとDistrolessベースによるイメージサイズの最小化

最小限のベースイメージを選び、ビルドツールを削除し、distrolessまたはscratchベースを使って最終イメージを縮小します。プルを高速化し、攻撃対象領域も小さくできます。

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

イメージサイズが重要な理由

小さいイメージは高速に pullでき、起動も速く、保存コストも低く、攻撃者にさらすパッケージも少なくなります。サイズの最適化は、パフォーマンスとセキュリティの両方に効果があります。

軽量なベースを選ぶ

デフォルトイメージは便利ですが、サイズが大きくなりがちです。node:20(約 1GB)を node:20-slim または node:20-alpine に変更するだけで、数百 MB をすぐに削減できます。

FROM node:20-slim

Alpine のトレードオフ

Alpine は非常に小さい一方で、glibc ではなく musl libc を使用するため、ネイティブバイナリがまれに動作しなくなります。十分にテストしてください。場合によっては、-slim のほうが安全な軽量版です。

FROM python:3.12-alpine

RUN レイヤーをまとめる

各 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 /app

Distroless の紹介

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:latest

latest ではなくバージョンを固定する

特定のタグまたはダイジェストを固定すると、ビルドの再現性が高まり、上流の latest が変更されたときにサイズが予想外に増えることを防げます。

FROM node:20.11.1-slim

簡単な確認

distroless イメージの特徴は何ですか?

まとめ

これで、イメージを大幅に小さくできるようになりました。

  • -slim、-alpine、distroless、または scratch のベースを選びます
  • RUN レイヤーを連結して整理し、.dockerignore を使用します
  • マルチステージビルドでツールチェーンを除外します
  • docker history で測定し、バージョンを固定します

イメージが小さくなると、より高速で安全にデプロイできます。

よくある質問

「SlimとDistrolessベースによるイメージサイズの最小化」レッスンは無料ですか?

はい。「SlimとDistrolessベースによるイメージサイズの最小化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「SlimとDistrolessベースによるイメージサイズの最小化」で何を学びますか?

最小限のベースイメージを選び、ビルドツールを削除し、distrolessまたはscratchベースを使って最終イメージを縮小します。プルを高速化し、攻撃対象領域も小さくできます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「SlimとDistrolessベースによるイメージサイズの最小化」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 効率化のためのマルチステージビルド
  2. ビルドキャッシュの活用
  3. Dockerfileのセキュリティベストプラクティス
  4. SlimとDistrolessベースによるイメージサイズの最小化
← DevOps Bootcampに戻る