0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker の実験(その12:イメージのクリーンアップ・検索)

Last updated at Posted at 2023-02-19

その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]

その13:イメージの移設・ビルド(レイヤ)キャッシュにつづく

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?