不要コンテナイメージの削除

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/

以上。

■ 関連