ログってなんぼ

エンジニアのメモです

Docker:タグがnoneとなったイメージを一括削除する

docker system prune

docker 1.13から、使われていないcontainer/image/volume/networkを一括削除できるコマンドが追加されました

λ docker system prune
WARNING! This will remove:
        - all stopped containers
        - all volumes not used by at least one container
        - all networks not used by at least one container
        - all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
36d9d9b3160c7b42cd8dc25b8de1373f3c7bcfbaeda18e26cf753acb3882dd09
d1f5f7b8a411360368ea9ee9b5c6bd7711b479d0c3d8bc3b9fc3f20e6c6a7953
a74622372f246f3b3dd3055f4f32cc5880ed6026e4a54654e6aa8767a744bd46
ccb84356a5bb8d54e66725c96166d220d860cade995775266216322d4cf30628
72fcc5a663e6fa7c5dabba930047c02b98f18e4f4d2f937be7f09fb486fb0548

Deleted Volumes:
5c3c29bacb68936e75fdccee1c7b520fe72699f018041e713abbbefafc44f432
cbb727b18c8a153bb8fa64f327e6853852ad51414bff582941a2bded500c9e7b
1e36ceecbf7954010e786cb855be4348053ea1e5fd079677c653f9b3021bea3a

Deleted Images:
deleted: sha256:e26ff620455bd430dab007160a4ab8c19d983a101ed92bb5255f156e5ecc8f87
deleted: sha256:aba1b2611a2e3f476ba37b10c3f5cbf62068aac469071dbc66039c7db5c2abd2
deleted: sha256:99a3ed5ad6a6b7660730522f0e3603e178003bd2e9c74b20fb5eb6198a4ff9cc
deleted: sha256:1429c592c8ce1611fd72d211693f00c8f9a94f99021af8e0285c97697e85be29

Total reclaimed space: 432.7 MB

docker container/image/volume/networkで同様のことができるため t例えば未使用コンテナのみ削除する場合

λ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
7436a91caadfec37a569ce1590934474a79a19c2ba603818cfe3aec19197a274

Total reclaimed space: 0 B

このようになります。

便利になりました。

下記の内容は古くなっています

λ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
okisanjp/centos        7                   9b217c77fc4d        9 hours ago         310.3 MB
<none>                 <none>              035c6c0b0f6f        10 hours ago        310.3 MB
<none>                 <none>              cd290dca7fca        10 hours ago        374 MB
<none>                 <none>              ae5d64f006cf        10 hours ago        374 MB
ruby                   2.3                 48f592019f7f        30 hours ago        732 MB
nginx                  latest              01f818af747d        2 days ago          181.6 MB
httpd                  2.4                 0c4363ef5f12        7 days ago          175.4 MB
centos                 7                   67591570dd29        2 weeks ago         191.8 MB
mysql                  5.7                 594dc21de8de        2 weeks ago         400.2 MB
d4w/nsenter            latest              9e4f13a0901e        3 months ago        83.85 kB
okisanjp/centos_lamp   latest              a3b2954568f3        2 years ago         494.2 MB

Dockerfile作成のためにbuildを繰り返していると、タグが外れたイメージがたくさん残ってしまいます

こちらを一括で消すメモです

https://docs.docker.com/engine/reference/commandline/images/docs.docker.com

昔は無かった気がするのですが(気のせいかな)、docker images コマンドにフィルタオプションがありました。

--filter "dangling=true"というのをつけるとタグなしイメージがリストできます

λ docker images -f "dangling=true"
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              035c6c0b0f6f        10 hours ago        310.3 MB
<none>              <none>              cd290dca7fca        10 hours ago        374 MB
<none>              <none>              ae5d64f006cf        10 hours ago        374 MB

docker psなどと同様、-qオプションでIMAGE IDのみを表示できます

λ docker images -f "dangling=true" -q
035c6c0b0f6f
cd290dca7fca
ae5d64f006cf

ワンライナーで書くと

$ docker rmi $(docker images -f "dangling=true" -q)

普通、こうなると思いますが

Windows環境でcmderを使っていると

λ docker rmi $(docker images -f "dangling=true" -q)
unknown shorthand flag: 'q' in -q)
See 'docker rmi --help'.

こうなってしまうので

λ docker images -f "dangling=true" -q | xargs docker rmi
Deleted: sha256:035c6c0b0f6f1f876edf1e7e664dfa39d469d8379f0f25da768f2f9e7737bcfd
・
・
・

こんな感じで消せます

ちなみに、コンテナが使用中のimageは消えないので

λ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
okisanjp/centos        7                   9b217c77fc4d        10 hours ago        310.3 MB
<none>                 <none>              e874cdbbc0e7        10 hours ago        191.8 MB # まだ<none>が残ってる
ruby                   2.3                 48f592019f7f        30 hours ago        732 MB
nginx                  latest              01f818af747d        2 days ago          181.6 MB
httpd                  2.4                 0c4363ef5f12        7 days ago          175.4 MB
centos                 7                   67591570dd29        2 weeks ago         191.8 MB
mysql                  5.7                 594dc21de8de        2 weeks ago         400.2 MB
d4w/nsenter            latest              9e4f13a0901e        3 months ago        83.85 kB
okisanjp/centos_lamp   latest              a3b2954568f3        2 years ago         494.2 MB

λ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
6384eb1c332f        e874cdbbc0e7        "/bin/sh"   10 hours ago        Exited (2) 35 minutes ago                       jolly_nobel

今回のパターンで言うとIMAGE ID e874cdbbc0e7 のイメージはコンテナが使用中なので消えません

λ docker ps -aq | xargs docker rm
6384eb1c332f

λ docker images -f "dangling=true" -q | xargs docker rmi
Deleted: sha256:e874cdbbc0e77d65c36d180e916dc2f5cfb842448f919f356d22f58ec66f538d
Deleted: sha256:c70d30f4ea3f6ba744878f203bd8c8b2d9a25c2fc5df2389c1f617a9481f75df
Deleted: sha256:5d4ed4e86ea9e82877005cf2f75eadc1439d6372be9cc932d2181d08be1b5ba6
Deleted: sha256:4eb0fdbe6f85d335ed192bd414fbabdb284a7eac596e1b869db572862146ac6b

λ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
okisanjp/centos        7                   9b217c77fc4d        10 hours ago        310.3 MB
ruby                   2.3                 48f592019f7f        30 hours ago        732 MB
nginx                  latest              01f818af747d        2 days ago          181.6 MB
httpd                  2.4                 0c4363ef5f12        7 days ago          175.4 MB
centos                 7                   67591570dd29        2 weeks ago         191.8 MB
mysql                  5.7                 594dc21de8de        2 weeks ago         400.2 MB
d4w/nsenter            latest              9e4f13a0901e        3 months ago        83.85 kB
okisanjp/centos_lamp   latest              a3b2954568f3        2 years ago         494.2 MB

個別に消すなり一括で消すなりして、未使用コンテナを削除すれば消すことができます。

公式ドキュメント

docs.docker.com

ちゃんと勉強したいので本を一冊買おうかなと思っているところですが、公式ドキュメントの読み応えが有りすぎてこれ読んでるだけでもゲームしてるより楽しいです。