Dockerfileと完成したイメージレイヤーを図解する
Dockerfile
FROM ubuntu:20.04
RUN apt update
RUN apt install -y curl
COPY . /app
CMD ["ls", "-la"]
-
Dockerイメージ
はイメージレイヤーが重なって出来ている-
イメージレイヤーは
Dockerfile
に書いた一つの命令のこと- イメージレイヤーは読み取り専用
- イメージレイヤーは一つ前のイメージレイヤーとの差分を保持する
-
イメージレイヤーは
イメージレイヤーの数とイメージサイズの関係
-
結論:イメージレイヤーの数が少ないほどイメージサイズも小さい
-
Dockerfile
に書いた命令のオーバーヘッドが無いから
-
①
FROM ubuntu:20.04
RUN apt update
RUN apt install -y curl
RUN apt install -y vim
CMD ["bash"]
- ①はイメージサイズが209MBになる
②
FROM ubuntu:20.04
RUN apt update && apt install -y curl vim
CMD ["bash"]
- ②はイメージサイズが208MBになる
イメージビルド時のキャッシュ戦略について
結論は以下の通り
-
Dockerfile
の内容が変更される可能性が高い開発初期はイメージレイヤーを細かく分ける -
Dockerfile
の内容が固まったらイメージサイズ削減のためにイメージレイヤーの数を減らす
理由は以下の通り
-
docker image build
ではイメージレイヤー単位でビルド時にキャッシュされている - なので、イメージレイヤーを細かく分けた方が再ビルド時にキャッシュが使われやすい
- よって、
Dockerfile
の内容が固まっていない時はイメージレイヤーを細かく分ける - 最終的に、
Dockerfile
の内容が固まったらイメージサイズを削減するためにイメージレイヤーの数を減らす
- よって、