Docker イメージの最適化

Docker 中級

Mike Metzger

Data Engineering Consultant

Docker イメージの説明

  • Docker イメージはコンテナのベース
  • コンテナ起動時に利用可能な内容を保持
Docker 中級

Docker イメージの課題

  • 必要そうなコンポーネントをすべて入れたくなる
  • サイズが肥大化し扱いにくい
  • 依存関係でセキュリティ対応や更新が難化
  • 無駄な容量/帯域を使わずにコンテナを組み合わせにくい
Docker 中級

Docker イメージの推奨事項

  • コンテナは必要最小限に分割
  • 大きな単一イメージより後で組み合わせる方が容易
  • たとえば
    • 再利用可能な部品で組み立てる
    • 毎回ゼロから作らない
  • 特定ソフトの更新は、そのイメージを使うコンテナのみに影響
  • サイズ最適化で利用と配布が容易に
Docker 中級

Docker イメージ分解の例

  • 次のソフトを使うデータエンジニアリングを想定:

    • PostgreSQL データベース
    • Python ETL
    • Web サーバ
  • 単一イメージも可能だが、ETL や Web サーバの更新ごとに再ビルドが必要

  • Web サーバを追加する必要があればどうなるか?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
Docker 中級

最小構成コンテナの例

  • Docker でより良い選択肢
  • それぞれを専用コンテナに分割
    • PostgreSQL データベース
    • Python ETL コンポーネント
    • Web サーバ
  • 用途に合わせて最適化し、必要に応じて構成要素を追加/削除可能
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
Docker 中級

イメージサイズの確認

  • docker images を使用
  • 各イメージの詳細とサイズを表示
  • さらに詳しいオプションは後ほど解説

bash> docker images

REPOSITORY      TAG              SIZE
postgres        latest           448MB
postgres        15               442MB
apache/airflow  2.7.1-python3.9  1.4GB
alpine          latest           7.73MB
Docker 中級

演習に進みましょう!

Docker 中級

Preparing Video For Download...