DockerfileではRUNをまとめることでイメージサイズ削減ができるとよく耳にします。
実際に試したことがなかったので試してみました。
2つのDockerfileから作成したイメージのサイズを比較してみました。
各Dockerfileの違いは以下です。
・dockerfile01:RUNを複数使用している
・dockerfile02:&&でコマンドを繋げてRUNをまとめている
dockerfile01(RUNを複数使用している場合)
FROM centos:7
# php, apacheインストール
RUN yum install -y "https://repo.ius.io/ius-release-el7.rpm"
RUN yum update -y
RUN yum install -y mod_php74 php74-cli httpd24u
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
dockerfile02(&&でコマンドを繋げてRUNをまとめている場合)
FROM centos:7
# php, apacheインストール
RUN yum install -y "https://repo.ius.io/ius-release-el7.rpm" \
&& yum update -y \
&& yum install -y mod_php74 php74-cli httpd24u
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
以下のコマンドを実行してイメージを作成します。
イメージ作成(ビルド)
$ docker image build --no-cache -f ./Dockerfile01 -t centos7:test01 .
$ docker image build --no-cache -f ./Dockerfile02 -t centos7:test02 .
サイズ確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 test02 81a7d6c540ff About a minute ago 509MB
centos7 test01 7fdd86edf40d 4 minutes ago 761MB
761MBから509MBになっています。
RUNをまとめるだけで、イメージサイズが減ることが確認できました。
ただし、どんな場面でもRUNをまとめれば良いとは限らないという話もあるため、
その時々で判断する必要はありそうです。
今回は以上です。
補足:
確認用のDockerfileには含めませんでしたが、
以下のようにyum clean all
をするとさらにイメージサイズを減らせます。
dockerfile03
FROM centos:7
# php, apacheインストール
RUN yum install -y "https://repo.ius.io/ius-release-el7.rpm" \
&& yum update -y \
&& yum install -y mod_php74 php74-cli httpd24u \
&& yum clean all
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
$ docker image build --no-cache -f ./Dockerfile03 -t centos7:test03 .
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 test03 aa24f2e8f667 27 seconds ago 385MB
centos7 test02 81a7d6c540ff 6 minutes ago 509MB
centos7 test01 7fdd86edf40d 8 minutes ago 761MB