Dockerの参考書(Adrian Mouat著『Docker』)を読みながら、Dockerの勉強を進めてきたのですが、気がつけばダウンロードや新たに作成した(ものと思われる)イメージであふれかえっていました。
不要なイメージは、
$ docker rmi イメージID
で削除できるはずなんですが、ダウンロードしてきたイメージを元に新たなイメージを作成したり、あるいはコンテナが起動したりしていると、イメージが削除できません。
そのあたりのことを理解するために、いろいろと実験してみました。
前提知識
イメージを削除するときは、そのイメージがコンテナで使用されていないことが必要である。
停止されたコンテナで使用されている場合は、まずそのコンテナを削除しなければならない。
(⇒Dockerの停止コンテナを削除する)
コマンドの整理
■コンテナの稼働状況を調べる
$ docker ps (稼働中のコンテナだけを表示する) $ docker ps -a (すべてのコンテナを表示する) $ docker ps -q (稼働中のコンテナIDを表示する) $ docker ps -aq (すべてのコンテナIDを表示する)
■ダウンロードしたイメージを調べる
$ docker images (中間イメージを表示しない) $ docker images -a (すべてのイメージを表示する) $ docker images -q (中間イメージ以外のIDを表示する) $ docker images -aq (すべてのイメージIDを表示する)
これらのコマンドの実行結果をシェル変数として、再度dockerコマンドに渡したりします。
(例)
$ docker rmi $(docker images -qa)
実験開始
■実験1
まず、まっさらの状態で何かイメージをダウンロードします。
ここでは、ubuntu:18.04をダウンロードしました。
$ docker pull ubuntu:18.04
ちゃんとダウロードできたか確認。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 20bb25d32758 10 days ago 87.5MB
今、ダウンロードしたばかりのイメージを削除。
$ docker rmi 20bb25d32758 Untagged: ubuntu:18.04 Untagged: ubuntu@sha256:945039273a7b927869a07b375dc3148de16865de44dec8398672977e050a072e Deleted: sha256:20bb25d32758db4f91b18a9581794cfaa6a8c5fbad80093e9a9e42211e131a48 Deleted: sha256:7b2bffd1a66cacd8cd989f06cee49a1fba28c1d149806a0f7b536229270ddfd2 Deleted: sha256:80f6e37bc2041d00cbd950851c20f0f16b81b8f323290f354279a8a7b62bb985 Deleted: sha256:2069390c92947b82f9333ac82a40e3eeaa6662ae84600a9b425dd296af105469 Deleted: sha256:adcb570ae9ac70d0f46badf9ee0ecd49fbec2ae0bc26254653f99afa60046a4e
ちゃんと削除できたか確認。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE
■実験2
イメージをダウンロード後、コンテナを起動。
$ docker pull ubuntu:18.04 $ docker run ubuntu:18.04 echo 'Hello,Docker.' Hello,Docker.
この状態で、イメージを削除してみる。
$ docker rmi $(docker images -qa) Error response from daemon: conflict: unable to delete 20bb25d32758 (must be forced) - image is being used by stopped container ad34b361942c
停止されているコンテナ(ad34b361942c)で使用されているため、削除できないと言われた。
そこで、このコンテナを削除してから、再度イメージを削除してみる。
$ docker rm $(docker ps -aq) ※docker rm ad34b361942cと同じ。 ad34b361942c $ docker rmi $(docker images -qa) Untagged: ubuntu:18.04 Untagged: ubuntu@sha256:945039273a7b927869a07b375dc3148de16865de44dec8398672977e050a072e Deleted: sha256:20bb25d32758db4f91b18a9581794cfaa6a8c5fbad80093e9a9e42211e131a48 Deleted: sha256:7b2bffd1a66cacd8cd989f06cee49a1fba28c1d149806a0f7b536229270ddfd2 Deleted: sha256:80f6e37bc2041d00cbd950851c20f0f16b81b8f323290f354279a8a7b62bb985 Deleted: sha256:2069390c92947b82f9333ac82a40e3eeaa6662ae84600a9b425dd296af105469 Deleted: sha256:adcb570ae9ac70d0f46badf9ee0ecd49fbec2ae0bc26254653f99afa60046a4e $ docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE
削除できました。
〜ただいま実験継続中〜