1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

開発ために高速でdocker buildをやる

Posted at

背景

ローカル環境で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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?