Minimahack

ミニマル・シンプル・ナチュラルに個人と社会の課題解決に貢献

Docker関係の知識をアップデート

個人勉強のログです.

実行環境

# 端末
ProductName:    Mac OS X
ProductVersion: 10.15.6
BuildVersion:   19G2021

# docker
Docker version 19.03.12, build 48a66213fe
docker-compose version 1.26.2, build eefe0d31

Docker Buildkit

設定

$ emacs ~/.zshrc

export DOCKER_BUILDKIT=1  # docker build
export COMPOSE_DOCKER_CLI_BUILD=1 # docker-compose build

ビルド時間の比較

  • --parallel: 最大5つのコンテナを並列ビルド
  • buildkit: multi stage build で並列実行可能.今回の環境では multi stage build の利用はなし.

時間測定にはtimeコマンドを利用.

# デフォルト
docker-compose -f docker-compose.yml build  0.34s user 0.06s system 6% cpu 5.882 total
# --parallel
docker-compose -f docker-compose.yml build --parallel  0.36s user 0.06s system 7% cpu 5.428 total
# --parallel + buildkit
docker-compose -f docker-compose.yml build --parallel  0.35s user 0.09s system 88% cpu 0.501 total

Docker image のサイズを小さくする Dockerfile

変更前

FROM python:3.8

RUN apt-get update \
 && apt-get install -y \
    tcpdump iputils-ping net-tools git \
    python3-pip \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/

RUN pip3 install grpcio-tools

WORKDIR /root/script
COPY script/ .

ENTRYPOINT ["/bin/bash", "-c", "python3.8 script.py"]

変更後

FROM python:3.8-slim-buster

RUN apt-get update && apt-get install -y --no-install-recommends python3-pip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/ \ 
    && pip3 install --no-cache-dir grpcio-tools

WORKDIR /root/script
COPY script/ .

ENTRYPOINT ["/bin/bash", "-c", "python3.8 script.py"]

サイズを小さくするために取り組んだこと

  • 軽量なイメージ
  • apt-get --no-install-recommendsの利用
  • pip3 --no-cache-dirの利用
  • 不要パッケージの未インストール
取り組み サイズ
デフォルト 1.03GB
軽量なイメージ 587MB
apt-get --no-install-recommends 261MB
不要パッケージ未インストール 181MB
pip3 --no-cache-dir 173MB

今後の課題

  • Multi stage build
  • Buildkit の理解を深める(キャッシュの効率的な利用など)