✍️
マルチステージビルドを試す
マルチステージビルド
何のためのものなのか含めて、調べたのでメモ
multi-stage builds
- Docker 17.05以降から使える機能
- 不要な生成物を無視してイメージサイズを抑えることができる。
メリット
- イメージのサイズを小さく抑えることができる。
- また、それを簡潔にDockerfileに書くことができる。
以前であれば、
アプリケーション構築に必要な全てのレイヤー
と
本番環境向け(スリム化した)レイヤー
を用意する必要があった。
試してみる
以下のコードで試しています。
通常のビルド
$ cd build
$ tree
.
├── Dockerfile
├── go.mod
├── go.sum
└── main.go
ビルド
$ docker build . -t single-build
サイズ確認
$ docker image inspect single-build
略
},
"Architecture": "arm64",
"Variant": "v8",
"Os": "linux",
"Size": 510023441,
"VirtualSize": 510023441,
"GraphDriver": {
略
約510MB
マルチステージビルド
$ cd ../multi-build
$ tree
.
├── Dockerfile
├── go.mod
├── go.sum
└── main.go
ビルド
$ docker build . -t multi-build
サイズ確認
$ docker image inspect multi-build
略
},
"Architecture": "arm64",
"Variant": "v8",
"Os": "linux",
"Size": 15052191,
"VirtualSize": 15052191,
"GraphDriver": {
略
約15MB
明らかにサイズの違いがわかりました。
ベストプラクティスにも載っているので、積極的に検討すべきですね。
Discussion