話題のAmazon CorrettoのDockerfileに手を入れてDockerイメージのダイエットしてみる

こんにちは。齋藤です。

鉄は熱いうちに打て、ってことで 今日は今激アツのAmazon Correttoの話題をお届けします。 Amazon Correttoの概要についてはこちらの速報記事を御覧ください。 僕はそんなことより、James Goslingがツイッターにいたことに驚きました。

この記事では Amazon CorrettoのDockerイメージをビルドしていきます。 使うDockerfileはこれをベースにします。 また、元のDockerfileに入れてイメージサイズの削減もしてみます。

まず普通にビルドしてみる

$ git clone git@github.com:corretto/corretto-8-docker.git
$ cd corretto-8-docker
$ docker image build .

イメージサイズは674MBになりました。

$ docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
<none>                         <none>              887fbbc93585        16 minutes ago       674MB

yumのキャッシュを削除する

yumのキャッシュなどを削除してイメージサイズの削減をしましょう。

2行追加しました。

FROM amazonlinux:2
RUN yes | yum update \
 && yes | yum install wget \
 && wget https://d3pxv6yz143wms.cloudfront.net/java-1.8.0-amazon-corretto-1.8.0_192.b12-1.amzn2.x86_64.rpm \
 && wget https://d3pxv6yz143wms.cloudfront.net/java-1.8.0-amazon-corretto-devel-1.8.0_192.b12-1.amzn2.x86_64.rpm \
 && yes | yum remove wget \
 && rpm -K java-1.8.0-amazon-corretto-1.8.0_192.b12-1.amzn2.x86_64.rpm \
 && rpm -K java-1.8.0-amazon-corretto-devel-1.8.0_192.b12-1.amzn2.x86_64.rpm \
 && yes | yum localinstall *.rpm \
+ && rm -rf /var/cache/yum/* \
+ && yum clean all
CMD ["/bin/bash"]
$ docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
<none>                         <none>              0d1688c15281        8 minutes ago        573MB

100MBぐらい減りましたかね。

もっと減らそうイメージサイズ

もっと減らすために、wgetで取ってきたrpmファイルを削除します。

1行追加しました。

FROM amazonlinux:2
RUN yes | yum update \
 && yes | yum install wget \
 && wget https://d3pxv6yz143wms.cloudfront.net/java-1.8.0-amazon-corretto-1.8.0_192.b12-1.amzn2.x86_64.rpm \
 && wget https://d3pxv6yz143wms.cloudfront.net/java-1.8.0-amazon-corretto-devel-1.8.0_192.b12-1.amzn2.x86_64.rpm \
 && yes | yum remove wget \
 && rpm -K java-1.8.0-amazon-corretto-1.8.0_192.b12-1.amzn2.x86_64.rpm \
 && rpm -K java-1.8.0-amazon-corretto-devel-1.8.0_192.b12-1.amzn2.x86_64.rpm \
 && yes | yum localinstall *.rpm \
+ && rm *.rpm \
 && rm -rf /var/cache/yum/* \
 && yum clean all
CMD ["/bin/bash"]
$ docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
<none>                         <none>              108e34740f86        About a minute ago   496MB

更に77MBぐらい減りました。

まとめて見てみます。

$ docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
<none>                         <none>              108e34740f86        About a minute ago   496MB
<none>                         <none>              0d1688c15281        8 minutes ago        573MB
<none>                         <none>              887fbbc93585        16 minutes ago       674MB

元のリポジトリにあったDockerfileから合計で178MB減ったようです。

まとめ

Amazon CorrettoのDockerファイルが公開されているリポジトリの物から Dockerイメージのサイズの削減をしてみました。

yumのキャッシュでこんなに変わるものなんですね。 実際に見たのは初めてで、びっくりしました。

自分達のDockerfileを見直して Dockerイメージのサイズを減らしていきたいですね。

以上です。

おまけ。

最終的なイメージのhistoryはこんな感じ。

$ docker history 108e34740f86
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
108e34740f86        36 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
9aedecabff3e        36 minutes ago      /bin/sh -c yes | yum update  && yes | yum in…   334MB
d656eea421ba        3 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           3 weeks ago         /bin/sh -c #(nop) ADD file:3b2c4ec84fed31ca9…   162MB

Amazon Correttoの追加によって、334MB増えています。