Dockerにおいて表題の通り。不要なコンテナイメージという言葉には『もう使用しない』という意味も含まるが、何よりも不要だと思えるのは”<none>“となっているコンテナであろう。今回はこれを一気に削除する方法をメモ。
■ 環境
- Docker 1.8.1
■ <none>
“REPOSITORY“や”TAG“の欄が”<none>“となっているコンテナイメージは、`docker build`を何度も行っていたりすると大量に作成されてしまう。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test latest e53e4ea568ba 13 hours ago 991.8 MB
<none> <none> 5cd5418eb22f 13 hours ago 991.8 MB
<none> <none> ae3310bf7c7c 13 hours ago 991.8 MB
<none> <none> 5e208d0a70a9 14 hours ago 991.8 MB
<none> <none> 8e5f3bc5c554 14 hours ago 991.8 MB
<none> <none> 7c7eafa329c5 14 hours ago 991.8 MB
<none> <none> 875f00d3f3f6 14 hours ago 991.8 MB
<none> <none> f2c81ea3eef9 14 hours ago 991.8 MB
:
java 7 ade42d38879d 2 weeks ago 587.4 MB
centos 6 a005304e4e74 11 weeks ago 203.1 MB
$
不要なコンテナイメージは削除してしまう。
■ 方法1: IMAGE ID
当初はひとつずつ”IMAGE ID“をコピペして`docker rmi`を実行していた。
$ docker rmi 5cd5418eb22f ae3310bf7c7c
これはとても面倒である。
■ 方法2: コマンド組み合わせ
`awk`や`cut`などで出力を絞って組み合わせる。
$ docker rmi $(docker images | grep none | awk '{print $3}')
■ 方法3: コマンド組み合わせ2
`docker images`のオプションを利用する。下記オプションを使うと”<none>“となっているコンテナの一覧が取得できる。
$ docker images -f dangling=true
これを利用して、組み合わせる。
$ docker rmi $(docker images -f dangling=true -q)
この手段が一番すっきりしている。
これはDockerのドキュメントに記載されていた。
https://docs.docker.com/reference/commandline/images/
以上。