Dockerfileマルチステージングビルドで軽量なイメージを作る

DockerfileマルチステージングビルドTech
この記事は約3分で読めます。

Dockerfileをマルチステージングビルドにするメリット

Go言語の様な、コードをビルドする言語の場合、

Dockerイメージに含める物はビルド済みファイルと

OSイメージのみで動作するので、

言語自体のイメージは本来不要になります。

そういった不要になるイメージを段階ビルドにする事で、

最終的に最小構成でイメージを生成する事ができる仕組みです。

どの程度効果があるのか?

試しに、通常のDockerfileとマルチステージングのDockerfileで

Echoを使用して、Helloworldを表示するだけのmain.go

をビルドする例で比べてみましょう。

マルチステージングじゃないのDockerfile

$ docker build -t echo_example .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
echo_example        latest              2f4adfcadcbe        11 seconds ago      550MB
golang              1.15-alpine3.12     1a87ceb1ace5        2 weeks ago         402MB

マルチステージングなDockerfile

$ docker build -t echo_example .
$ docker images                                              +[master]
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
echo_example        latest              a90c4ff0103c        38 seconds ago      13.3MB
<none>              <none>              59a7fca22298        43 seconds ago      550MB
golang              1.15-alpine3.12     1a87ceb1ace5        2 weeks ago         402MB
alpine              3.12                a24bb4013296        3 months ago        5.57MB

結果

echo_example というタグ名で各々ビルドしてみたところ、

通常:550MB

マルチステージングビルド:13.3MB

となり、かなりサイズ圧縮ができています。

まとめ

言語仕様にもよりますが、ビルドする言語の場合は積極的にマルチステージングビルドは活用して行った方が良さそうです。

閲覧ありがとうございました!

個人アプリをリリースしました。良ければインストールしてみてください🙏

‎Scannable - Simply Recognizer
‎Scannable - Mobile Scanner App. 無料 スキャンアプリ / 書類 スキャン / OCR / 写真 スキャン シンプル操作で画像からテキスト解析! 教科書や手紙、レシートをデジタルデータにして保存できます。 データ化したテキストは編集・共有可能です。 日本語・英語・中国語(簡体字)...

タイトルとURLをコピーしました