その9:Container Registry に登録するのつづき。
Doker コンテナが、ベースイメージを共有出来るのは、Docker がレイヤ構造になっており、最上のレイヤのみが異なっているためである。
なお、RUN インストラクションでファイルを作成して、次に削除しても、レイヤとして残ってしまうので、コンテナのサイズは同じになっている。
コンテナのファイルサイズを小さくして、パフォーマンスをよくするには、Docerfile において RUN インストラクションを、いくつも書くのではなく、&& でつなげて書くのがよい。
これを確認する。
$ cd demo_layer
$ vim Dokerfile
(以下、ファイルの内容)
FROM ubuntu
RUN dd if=/dev/zero of=/root/file1.txt bs=1M count=100
RUN dd if=/dev/zero of=/root/file2.txt bs=1M count=100
RUN rm -f /root/file1.txt
RUN rm -f /root/file2.txt
では、layerdemo というタグをつけて、Docker イメージをビルドしてみる。
$ docker build -t layerdemo .
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM ubuntu
---> 58db3edaf2be
Step 2/5 : RUN dd if=/dev/zero of=/root/file1.txt bs=1M count=100
---> Running in 88c7259bb82f
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.265441 s, 395 MB/s
Removing intermediate container 88c7259bb82f
---> a98e8ee2bdef
Step 3/5 : RUN dd if=/dev/zero of=/root/file2.txt bs=1M count=100
---> Running in 9621dec7ce4c
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.603125 s, 174 MB/s
Removing intermediate container 9621dec7ce4c
---> 539564a6bf0b
Step 4/5 : RUN rm -f /root/file1.txt
---> Running in a4441f55e453
Removing intermediate container a4441f55e453
---> 8074ba695e4a
Step 5/5 : RUN rm -f /root/file2.txt
---> Running in b3a804ae4940
Removing intermediate container b3a804ae4940
---> 784c3f9f12e6
Successfully built 784c3f9f12e6
Successfully tagged layerdemo:latest
ファイルサイズを確認してみる。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
layerdemo latest 784c3f9f12e6 9 minutes ago 288MB
<none> <none> 5e443cc82858 15 hours ago 175MB
<none> <none> ede4075dc036 16 hours ago 175MB
nginx latest 3f8a00f137a0 9 days ago 142MB
asia.gcr.io/<project-id>/ubuntu-image latest 58db3edaf2be 3 weeks ago 77.8MB
ubuntu latest 58db3edaf2be 3 weeks ago 77.8MB
では、leyerdemo の中を確認してみる。
$ docker history layerdemo
IMAGE CREATED CREATED BY SIZE COMMENT
784c3f9f12e6 11 minutes ago /bin/sh -c rm -f /root/file2.txt 0B
8074ba695e4a 11 minutes ago /bin/sh -c rm -f /root/file1.txt 0B
539564a6bf0b 11 minutes ago /bin/sh -c dd if=/dev/zero of=/root/file2.tx… 105MB
a98e8ee2bdef 11 minutes ago /bin/sh -c dd if=/dev/zero of=/root/file1.tx… 105MB
58db3edaf2be 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:18e71f049606f6339… 77.8MB
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ARG RELEASE 0B
Dockerfile の RUN インストラクションがそのままファイルサイズとなっていて、次の RUN インストラクションで削除しても、全体の大きさは変わらない。
Dockerfile を変更して、ファイルサイズを小さくするには、&& でつなげていけばよい。
FROM ubuntu
RUN dd if=/dev/zero of=/root/file1.txt bs=1M count=100 && rm -f /root/file1.txt
RUN dd if=/dev/zero of=/root/file2.txt bs=1M count=100 && rm -f /root/file2.txt
イメージをビルドしよう。
$ docker build -t layerdemo2 .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM ubuntu
---> 58db3edaf2be
Step 2/3 : RUN dd if=/dev/zero of=/root/file1.txt bs=1M count=100 && rm -f /root/file1.txt
---> Running in 6a17a2bf6af3
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.212157 s, 494 MB/s
Removing intermediate container 6a17a2bf6af3
---> ec0e3e38bebb
Step 3/3 : RUN dd if=/dev/zero of=/root/file2.txt bs=1M count=100 && rm -f /root/file2.txt
---> Running in b2ce82a0e2d3
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.115999 s, 904 MB/s
Removing intermediate container b2ce82a0e2d3
---> 9f16192943d8
Successfully built 9f16192943d8
Successfully tagged layerdemo2:latest
以下のように、サイズが小さく(ベースイメージと同じ)なった。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
layerdemo2 latest 9f16192943d8 32 seconds ago 77.8MB
layerdemo latest 784c3f9f12e6 16 minutes ago 288MB
<none> <none> 5e443cc82858 15 hours ago 175MB
<none> <none> ede4075dc036 16 hours ago 175MB
nginx latest 3f8a00f137a0 9 days ago 142MB
asia.gcr.io/<project-name>/ubuntu-image latest 58db3edaf2be 3 weeks ago 77.8MB
ubuntu latest 58db3edaf2be 3 weeks ago 77.8MB
その11:イメージの調査につづく。