podman イメージを縮小する
イメージはレイヤ構造のため、Dockerfile に記述された RUN
や ADD
、またコンテナ内で変更した後にcommitするとレイヤが新しく生成されます。このため、レイヤのサイズが大きくなってしまいます。
イメージを縮小する方法としてbuild時に–squash、–squash-allを使う方法があります。
たとえば以下のようなDockerfileがあったとします。
FROM registry.centos.org/centos:centos8
RUN dnf -y update && dnf clean all
RUN dnf -y install glibc-locale-source glibc-langpack-en
RUN localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
RUN echo 'LANG="ja_JP.UTF-8"' > /etc/locale.conf
ENV LANG ja_JP.UTF-8
RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN dnf install -y java-11-openjdk-headless.x86_64
RUN dnf clean all
これをそのまま–squash、–squash-allを付けずにbuildすると587MBになります。レイヤは10個あります。
podman build -t centos8_jp_java11:v2 .
# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/centos8_jp_java11 v2 0bd774f2dee3 41 minutes ago 587 MB
registry.centos.org/centos centos8 b000d67685a5 4 months ago 223 MB
# podman inspect localhost/centos8_jp_java11:v2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"Layers": [
"sha256:4d330ab6e8a980ae73947d118271068b3ebc6cdc23571fcecf469243fdbd00e0",
"sha256:45e00047dacc6941f19f63a50b51d927dcbbe1a3542c1b956d27255112ea830a",
"sha256:d424f860bf7e41d8bc15f16deb2a0141cb166dc273ee529c992797ec26dbcca5",
"sha256:ebaf4a698dc4f2c0b67992b701191ed4a7d5f6448c4384d5a4594d5f0028a8c6",
"sha256:920f65df8c6e9db35187cdc72190bfb4ab81e414bfbd54db7aecd6f02da8eb37",
"sha256:68c304d9ce746602f3ad4683ee06802ebdb801b8269fe5f6d1459ddc33e9c598",
"sha256:eeccfad7eaeb58587087fb79fd0886529f80d6afd0a2da51a3ab355f07be58fe",
"sha256:b21871ade9ebb9037f981cc8fc35bb3336859e0408df146681842ac921dc5d62",
"sha256:4b4e57d3ac2054eaccd58fa1e4efcc73236d9e2ec7516d9d8e4becd9184e27a7",
"sha256:e326b833080c23a7b663ec5393273c52a3cc20243de3f564e46a47bc621bf418"
]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
–squashを付けてbuildすると531MBとなりました。レイヤは2個になってます。–squashの場合、Dockerfileの
「FROM registry.centos.org/centos:centos8」部分のレイヤは単一Layerの変換対象にはなっていません。
podman build --squash -t centos8_jp_java11:v1 .
# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/centos8_jp_java11 v2 0bd774f2dee3 41 minutes ago 587 MB
localhost/centos8_jp_java11 v1 f8a3732b31a3 46 minutes ago 531 MB
registry.centos.org/centos centos8 b000d67685a5 4 months ago 223 MB
# podman inspect localhost/centos8_jp_java11:v2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"Layers": [
"sha256:4d330ab6e8a980ae73947d118271068b3ebc6cdc23571fcecf469243fdbd00e0",
"sha256:b831b5cf64682ab15675c1d71b94fdb29b66bc6e1713d386e4672efc7108dd0b"
]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
次に–squash-allを付けてbuildすると487MBとなりました。レイヤは1個になっており、
「FROM registry.centos.org/centos:centos8」部分のレイヤも含め、単一Layerの変換対象にはなってます。
podman build --squash-all -t centos8_jp_java11:v3 .
# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/centos8_jp_java11 v3 2d8df1dc505a 35 minutes ago 487 MB
localhost/centos8_jp_java11 v2 0bd774f2dee3 41 minutes ago 587 MB
localhost/centos8_jp_java11 v1 f8a3732b31a3 46 minutes ago 531 MB
registry.centos.org/centos centos8 b000d67685a5 4 months ago 223 MB
# podman inspect localhost/centos8_jp_java11:v2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"Layers": [
"sha256:e5178cd0a1caca5399132779a678391afc25a5fc469085ed4ef9c2b3475662bc"
]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~