背景
ローカル環境でdocker buildをやると、キャッシュなしでネットワークスピードが遅いでビルド時間が結構かかる
Dockerfileファイルが以下のように
FROM ubuntu:20.04
WORKDIR /workspaces
# ソースコードコピー
COPY ./src /workspace/
# package install
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get install -y --no-install-recommends\
python3.8 \
python3-pip
# pipefile install
RUN pip install pipenv==2022.8.5 && pipenv install --system
# その他のパッケージのインストール
RUN apt-get -y update
RUN apt-get install -y clang
RUN apt-get install -y python3-dev
ビルドコマンド
$ docker build my_project/test
問題の解決
参照
キャッシュを追加
- 環境変数設定
- DOCKER_BUILDKIT=1
- ビルドコマンド
$ docker build my_project/test --build-arg BUILDKIT_INLINE_CACHE=1
* これは1回目ビルドするときに、キャッシュも作成する。
* 2回目ビルドすると、キャッシュを利用できて時間が短縮になる
ソースコードのみ修正してもビルド時間がかかる
- 開発中にパッケージの変更が少なくて、ソースコードの修正が多い
- dockerfileより、キャッシュを利用してビルドするときに、修正部分からキャッシュ利用せずに再ビルドする
- 例えば、ソースコードを更新すると、COPYから再ビルドする
- そういえば、開発のためにソースコードのCOPYとPipefileのインストールが最後にやるべき
まとめ - 高速ビルドするために以下のことをやるべき
BuildKitを有効
- DOCKER_BUILDKIT=1
ビルドコマンド
$ docker build my_project/test --build-arg BUILDKIT_INLINE_CACHE=1
dockerfileの順番
- 先にソースコードと関連しないパッケージのインストール
- 最後にソースコードのCOPY
FROM ubuntu:20.04
WORKDIR /workspaces
# package install
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get install -y --no-install-recommends\
python3.8 \
python3-pip
# その他のパッケージのインストール
RUN apt-get -y update
RUN apt-get install -y clang
RUN apt-get install -y python3-dev
# ソースコードコピー
COPY ./src /workspace/
# pipefile install
RUN pip install pipenv==2022.8.5 && pipenv install --system