その11:イメージの調査のつづき。
コンテナを作成していくと、特に異なるイメージに関わるものであると、リポジトリからイメージを引っ張ってくることになり、vm インスタンスの容量がどんどん圧迫されてしまう。
使用されていないイメージは適当に削除しておくのがよい。
Dangling Images (タグがなく、コンテナ化もされていない) の削除。
実験を重ねていたら、Dangling images が増えてしまった。これらは vm インスタンスの容量を圧迫しており、よろしくないので、削除したい。
$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
layerdemo2 latest 9f16192943d8 20 hours ago 77.8MB
<none> <none> ec0e3e38bebb 20 hours ago 77.8MB
layerdemo latest 784c3f9f12e6 20 hours ago 288MB
<none> <none> 8074ba695e4a 20 hours ago 288MB
<none> <none> 539564a6bf0b 20 hours ago 288MB
<none> <none> a98e8ee2bdef 20 hours ago 183MB
<none> <none> f2b014774e62 35 hours ago 175MB
<none> <none> 5e443cc82858 35 hours ago 175MB
<none> <none> ede4075dc036 36 hours ago 175MB
<none> <none> 60ea0cbe0bb1 36 hours ago 175MB
<none> <none> 4b3e66e5edd1 36 hours ago 119MB
nginx latest 3f8a00f137a0 10 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
以下のコマンドを実行してみる。
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
回復された容量がゼロ?
Dangling images が削除されたかを確認する。
$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
layerdemo2 latest 9f16192943d8 20 hours ago 77.8MB
<none> <none> ec0e3e38bebb 20 hours ago 77.8MB
layerdemo latest 784c3f9f12e6 21 hours ago 288MB
<none> <none> 8074ba695e4a 21 hours ago 288MB
<none> <none> 539564a6bf0b 21 hours ago 288MB
<none> <none> a98e8ee2bdef 21 hours ago 183MB
<none> <none> f2b014774e62 35 hours ago 175MB
<none> <none> 5e443cc82858 35 hours ago 175MB
<none> <none> 60ea0cbe0bb1 36 hours ago 175MB
<none> <none> ede4075dc036 36 hours ago 175MB
<none> <none> 4b3e66e5edd1 36 hours ago 119MB
nginx latest 3f8a00f137a0 10 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
あれ、削除されなかった。
では、コンテナ化されていないイメージをすべて削除する。
$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: layerdemo2:latest
deleted: sha256:9f16192943d84def9e32a2fb9789022079c25aa7632788d18ca346086e8505ba
deleted: sha256:42caebe64de0229455c3992a1e4c334907f652ee8c39621553e349e3ad95fe66
deleted: sha256:ec0e3e38bebbdfe0cca45a88a74a936034544c8257edfc0a4a83e49fdd53897c
deleted: sha256:545b6ebc31ab3ade2892c27916c1a25ec1f96c20730223f088446732ddab518c
untagged: layerdemo:latest
deleted: sha256:784c3f9f12e6dcc7244e90ecdb5224f91d2970c5d125d751f83b3025391bea9e
deleted: sha256:b781d4178e962b29240b3d8d421c05c522cdf0c67ee0fe11cd7c54fa63bae852
deleted: sha256:8074ba695e4ab226934db3bacafee86d9668356753aa023cdbca5d98701df135
deleted: sha256:216caafc871e6d878d8e45cda843edbe4161ad6d93b7a2f69836e965a09b4901
deleted: sha256:539564a6bf0b4fb5002f50c49edce7faf39e5ff7248aae962d3c8d3c76dcef02
deleted: sha256:2b4729131cd56e82211980771de0617f1919f429beef0b8e77e7c8571638fd4e
deleted: sha256:a98e8ee2bdef5148f572b28dd020cf2c911a05f2c46606cc75705facfedc0224
deleted: sha256:85038f9baf5aa05366d783b73bc052bc0ad808ca54640e000aedc5a6a2cba210
untagged: asia.gcr.io/<project-id>/ubuntu-image:latest
untagged: asia.gcr.io/<project-id>/ubuntu-image@sha256:41c1003bfccce22a81a49062ddb088ea6478eabea1457430e6235828298593e6
Total reclaimed space: 209.7MB
今度は削除されたっぽい。
$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> f2b014774e62 36 hours ago 175MB
<none> <none> 5e443cc82858 36 hours ago 175MB
<none> <none> 60ea0cbe0bb1 36 hours ago 175MB
<none> <none> ede4075dc036 36 hours ago 175MB
<none> <none> 4b3e66e5edd1 36 hours ago 119MB
nginx latest 3f8a00f137a0 10 days ago 142MB
ubuntu latest 58db3edaf2be 3 weeks ago 77.8MB
しかし、タグがないイメージは、いくつか残っている(要研究)。
レイヤをまとめることにより、容量を節約することができる。
$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
197c1adcd755: Pull complete
45f2e353f7d2: Pull complete
68ec6ece42ef: Pull complete
cfa4d9a7b88e: Pull complete
64cab5858b1d: Pull complete
92fcd248d982: Pull complete
88635e83312d: Pull complete
43f0427259d9: Pull complete
79828698a290: Pull complete
a8854781893e: Pull complete
6c8bdf3091d9: Pull complete
Digest: sha256:8653a170e0b0df19ea95055267def2615fc53c62df529e3750817c1a886485f0
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
レイヤを確認してみる。
$ docker image history mysql
IMAGE CREATED CREATED BY SIZE COMMENT
57da161f45ac 10 days ago /bin/sh -c #(nop) CMD ["mysqld"] 0B
<missing> 10 days ago /bin/sh -c #(nop) EXPOSE 3306 33060 0B
<missing> 10 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B
<missing> 10 days ago /bin/sh -c ln -s usr/local/bin/docker-entryp… 34B
<missing> 10 days ago /bin/sh -c #(nop) COPY file:e9c22353a1133b89… 14.2kB
<missing> 10 days ago /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0B
<missing> 10 days ago /bin/sh -c set -eux; microdnf install -y "m… 213MB
<missing> 10 days ago /bin/sh -c #(nop) ENV MYSQL_SHELL_VERSION=8… 0B
<missing> 10 days ago /bin/sh -c set -eu; . /etc/os-release; { … 215B
<missing> 10 days ago /bin/sh -c set -eux; microdnf install -y "m… 179MB
<missing> 10 days ago /bin/sh -c set -eu; . /etc/os-release; { … 225B
<missing> 10 days ago /bin/sh -c #(nop) ENV MYSQL_VERSION=8.0.32-… 0B
<missing> 10 days ago /bin/sh -c #(nop) ENV MYSQL_MAJOR=8.0 0B
<missing> 10 days ago /bin/sh -c set -eux; key='859BE8D7C586F5384… 3.17kB
<missing> 10 days ago /bin/sh -c set -eux; microdnf install -y … 13.6MB
<missing> 10 days ago /bin/sh -c set -eux; arch="$(uname -m)"; c… 2.36MB
<missing> 10 days ago /bin/sh -c #(nop) ENV GOSU_VERSION=1.16 0B
<missing> 10 days ago /bin/sh -c set -eux; groupadd --system --gi… 2.77kB
<missing> 11 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 11 days ago /bin/sh -c #(nop) ADD file:6a3fb962576ab4237… 110MB
多くのレイヤがあることを確認できる。
$ docker images | grep mysql
mysql latest 57da161f45ac 10 days ago 517MB
まとめるのには、いくつかのやりかたがある。
まずは、サイズを圧縮したいイメージから、コンテナを立ち上げる。
mysql コンテナを立ち上げられなかった(要調査)ので、ubuntu イメージで実験する。
まずは、コンテナを立ち上げる。
$ docker container run -dt --name my_ubuntu ubuntu
8229282bc476d6394eee8ad64ff9e9a40a3c678f6fef1ab060c21824c61514a0
コンテナが立ち上がったか確認する。
$ docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8229282bc476 ubuntu "/bin/bash" 7 seconds ago Up 6 seconds my_ubuntu
e6e93cd9f5c5 5e4 "nginx -g 'daemon of…" 36 hours ago Up 33 minutes 0.0.0.0:8082->80/tcp, :::8082->80/tcp mycustomnginx
67df4d402280 nginx "/docker-entrypoint.…" 3 days ago Up 31 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp mynginx
export サブコマンドで、ファイル化する。
$ docker export my_ubuntu > my_ubuntudemo.tar
$ ls -l my_ubuntudemo.tar
-rw-r--r-- 1 xxx xxx 80328704 Feb 19 19:35 my_ubuntudemo.tar
import コマンドで、別イメージを作成する。
$ cat my_ubuntudemo.tar | docker import - my_ubuntu:latest
sha256:cf29e08b397543ecf7838f972a10135905eb75598b61cfa505e635f74920f688
イメージを確認する。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_ubuntu latest cf29e08b3975 22 seconds ago 77.8MB
<none> <none> 5e443cc82858 37 hours ago 175MB
<none> <none> ede4075dc036 37 hours ago 175MB
nginx latest 3f8a00f137a0 10 days ago 142MB
mysql latest 57da161f45ac 11 days ago 517MB
ubuntu latest 58db3edaf2be 3 weeks ago 77.8MB
容量が変わっていなかった。。
なぜだか確かめる。
$ docker image history my_ubuntu
IMAGE CREATED CREATED BY SIZE COMMENT
cf29e08b3975 2 minutes ago 77.8MB Imported from -
$ docker image history ubuntu
IMAGE CREATED CREATED BY SIZE COMMENT
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
一つのレイヤだけになったことは確認できた。容量が減らなかったのは、元のイメージのその他のレイヤのサイズが 0B だからのようだ。
開発者が、すでに、容量圧縮について取り組んでいたからであろうか。
レイヤをまとめることにより、通常であれば?容量が減るであろう言が確認できた。
イメージの検索方法。
$ docker search --help
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
limit オプションを使ってみる。
$ docker search nginx --limit 5
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 18117 [OK]
bitnami/nginx Bitnami nginx Docker Image 152 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 79
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 23 [OK]
kasmweb/nginx An Nginx image based off nginx:alpine and in… 4
オフィシャルのものを検索する方法。
$ docker search nginx --filter "is-official=true"
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 18117 [OK]