不要な Docker image を消す方法

こんにちは yoshi です。 レッスンタイムでは全てのアプリケーションが Docker で動いているのですが0、 imageを扱ったりすると容量を大変使うので、定期的に使わないイメージを消さないといけません。

docker 運用の上でよく使うコマンドがこちらで、

# build
docker build --rm -t location.gcr.io/project-name/application:v1 .  

--rm オプションで、再度作成するときに、同じimageがあれば削除するものです。 ただ、なんども使っていると、Tagがnoneのものができるので、適宜削除します。
こんな感じになります。

$ docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE  
asia.gcr.io/lesson-mothership/ltd-api   v1                  6b0261892dc5        19 seconds ago      1.55GB  
<none>                                  <none>              44070bd99a80        2 minutes ago       1.48GB  
<none>                                  <none>              43d05be9b694        3 minutes ago       1.48GB  
<none>                                  <none>              5bc64ad702a8        4 minutes ago       1.48GB  
<none>                                  <none>              649209e2efcf        5 minutes ago       1.48GB  
<none>                                  <none>              fc7ddbbaeb21        6 minutes ago       1.48GB  
<none>                                  <none>              23323f8b1a16        8 minutes ago       1.48GB  
<none>                                  <none>              ddfe574903af        11 minutes ago      1.45GB  
<none>                                  <none>              a2d90c5db3f3        2 hours ago         1.23GB  
<none>                                  <none>              1f441ebedf04        2 hours ago         1.23GB  
<none>                                  <none>              f531750c1f5d        2 hours ago         1.23GB  
<none>                                  <none>              3475e145f9d9        2 hours ago         1.08GB  
<none>                                  <none>              f5532429e401        2 hours ago         1.08GB  
<none>                                  <none>              a01aee68742b        2 hours ago         1.08GB  
<none>                                  <none>              aeb226db6d73        2 hours ago         1.08GB  
<none>                                  <none>              70b49b3a8926        2 hours ago         1.08GB  
<none>                                  <none>              c0a95bf42d99        2 hours ago         1.08GB  
<none>                                  <none>              9158f561ef2a        2 hours ago         1.08GB  
<none>                                  <none>              52658aa0c560        2 hours ago         1.08GB  
<none>                                  <none>              3559adf38ce6        2 hours ago         1.08GB  
<none>                                  <none>              8ccc87ec86e6        2 hours ago         1.08GB  
<none>                                  <none>              35169c9b804e        2 hours ago         1.08GB  
<none>                                  <none>              4748bac895cf        2 hours ago         1.08GB  
<none>                                  <none>              4e12ef13fa0d        2 hours ago         1.05GB  
<none>                                  <none>              51f6ab4b8828        2 hours ago         1.05GB  
<none>                                  <none>              349184c974d7        2 hours ago         1.65GB  
<none>                                  <none>              57c4a2ceb68a        2 hours ago         1.12GB  
<none>                                  <none>              2d21a9549e6f        2 hours ago         1.12GB  
<none>                                  <none>              1934969a9319        2 hours ago         1.05GB  
<none>                                  <none>              7dff6f77a3d9        2 hours ago         859MB  
<none>                                  <none>              ebce2d55350d        2 hours ago         1.22GB  
<none>                                  <none>              266a9ce88a46        2 hours ago         1.19GB  
<none>                                  <none>              87a8859d5bf2        2 hours ago         1.24GB  
<none>                                  <none>              d58745c3c049        2 hours ago         1.24GB  
<none>                                  <none>              24232cefb567        3 hours ago         1.24GB  
<none>                                  <none>              3e82371a9429        3 hours ago         1.2GB  
<none>                                  <none>              9fba60624c8b        3 hours ago         1.27GB  
asia.gcr.io/lesson-mothership/ltd-pro   v1                  cb1c48ab3d5b        21 hours ago        759MB  
ltd/ltd-pro                             v1                  cb1c48ab3d5b        21 hours ago        759MB  
ltd/ltde                                v1                  cb1c48ab3d5b        21 hours ago        759MB  
ltd/ltd                                 v1                  ed4647c60498        22 hours ago        1.68GB  
golang                                  1.9.2               1a34fad76b34        2 weeks ago         733MB  
mysql                                   latest              5709795eeffa        2 weeks ago         408MB  
mysql                                   <none>              b4e78b89bcf3        2 months ago        412MB  
registry.heroku.com/beego-sample/web    latest              56c1e5d5b7fe        3 months ago        760MB  
test                                    v1                  56c1e5d5b7fe        3 months ago        760MB  
golang                                  onbuild             5d82e356477f        3 months ago        699MB  
golang                                  latest              6ce094895555        3 months ago        699MB  
asia.gcr.io/lesson-mothership/gojayui   v1                  37fc1154450d        13 months ago       1.24GB  

そこでこのコマンドで全ての不要な画像を消そうと思います。

$ docker rmi $(docker images -f dangling=true -q)
Deleted: sha256:44070bd99a80f091bd44b403fcff7c14fbd902746f4ce3e52f6588e664f52bc7  
Deleted: sha256:ed17a75bedd3a0c0a85bb1a45ea4c4d957135dc581e8e7d51f289756f1fd5d2a  
Deleted: sha256:43d05be9b694924e4710f4cd7f011c6a847db90befba78b3c1138ad3827df152  
Deleted: sha256:283efe603a570fcd9c080a63d6548bdcdb8050ae393bb1a99052420e14a70f6d  
Deleted: sha256:5bc64ad702a8859e8e4df10a0ae7aed9e1545c5c68564dc5caf932ca34f2e901  
Deleted: sha256:aeaafda5785ff19997aebca9db225a3153ec8101e5e6484fbed859bac04d861a  
Deleted: sha256:d7ae4415f807460aadbf59b309a1d67b22dc854c68da5d039895c9f07a79103c  
Deleted: sha256:649209e2efcf33264e5959bc9b4b0a1a15df9d5e4960871558d0aa85294e77d7  
Deleted: sha256:bb3ba557502ede74ca47fa3066e445030137fe5870827d4e1a5f2ab243d35eeb  
Deleted: sha256:fc7ddbbaeb214869a0d0d95a7e105c8021d2ea7d60ce2e786a1fbcf7f9946a90  
Deleted: sha256:54ac281635360948f2b5b52116214f57b92c53c0d77b3d7b326a8e445c580168  
Deleted: sha256:23323f8b1a162bf13529c92384dc22406d77f8936e882d2237823eaecb7dc4c3  
...

ちゃんと Container を止めていない場合は怒られます。

Error response from daemon: conflict: unable to delete b4e78b89bcf3 (cannot be forced) - image is being used by running container 57a1af78d106  

これでスッキリいらないdocker image は削除できました。