Docker imageの削除方法 


[こちらに書いたDocker imagesの削除記事で](https://qiita.com/matsuzan/items/c5c57a471b91d4c2657e) 手抜きなことを書いてしまったので、
改めて、以下のエラーが発生したときの無理ない対処方法を記載。

```bash
docker@default:~$ docker rmi -f 11cf55a56033
Error response from daemon: conflict: unable to delete 11cf55a56033 (cannot be forced) - image has dependent child images
```

エラーメッセージを読むと、子供のimageに依存を持っているため消せないらしい。
というわけで子供のimageを調べる（調べた際の記事は「参照記事」）。

```bash
for i in $(docker images -q)
do
    docker history $i | grep -q "削除対象のdocker iamge id" && echo $i
done | sort -u
```

ちなみに docker historyの結果は以下のようのな感じ。

```bash
docker@default:/hoge/fuge $ docker history fecab3660104
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
fecab3660104        2 months ago        /bin/sh -c #(nop)  ENV PATH=/root/.rbenv/bin…   0B         
5352aaffce2a        2 months ago        /bin/sh -c #(nop) COPY file:50f184d22286888c…   16kB       
19e290fbd5df        2 months ago        /bin/sh -c #(nop) COPY file:0cc28e1bd381941b…   8.02kB     
0696f3b548ef        2 months ago        /bin/sh -c #(nop) WORKDIR /vendor/src/wasabi    0B          
e2fbc6a0e913        2 months ago        /bin/sh -c #(nop)  ENV SRC_DIR=/vendor/src/w…   0B         
9b2faf08151b        2 months ago        /bin/sh -c echo "必要なパッケージがインスト…                 0B
a9155bf2736d        2 months ago        /bin/sh -c cd /usr/local/share/ &&     ln -s…   177B       
6344295f5f29        2 months ago        /bin/sh -c mkdir -p /usr/local/share &&     …   91.5MB     
fec6d6295cb4        2 months ago        /bin/sh -c . ~/.rbenvrc &&     curl -fsSL ht…   103MB      
27959467b5a9        2 months ago        /bin/sh -c git clone git://github.com/ssteph…   3.32MB     
9e46bb875e03        2 months ago        /bin/sh -c chmod 744 $ENTRYPOINT_FILE           12B         
ac161460f001        2 months ago        /bin/sh -c echo "#!/bin/bash" >> $ENTRYPOINT…   12B        
d50358b198d4        2 months ago        /bin/sh -c #(nop)  ENV ENTRYPOINT_FILE=/etc/…   0B         
5721c09db514        2 months ago        /bin/sh -c echo "set encoding=utf-8" >> /etc…   2.17kB     
5ea85a94bfe1        2 months ago        /bin/sh -c update-locale LANG=ja_JP.UTF-8 LA…   70B        
e6275e5e7fad        2 months ago        /bin/sh -c apt-get update && apt-get -y inst…   513MB      
5f8a1f92452d        2 months ago        /bin/sh -c #(nop)  MAINTAINER yamada.te <yam…   0B         
971bb384a50a        3 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B          
<missing>           3 months ago        /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B         
<missing>           3 months ago        /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   2.76kB     
<missing>           3 months ago        /bin/sh -c rm -rf /var/lib/apt/lists/*          0B          
<missing>           3 months ago        /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   195kB      
<missing>           3 months ago        /bin/sh -c #(nop) ADD file:2b307231ea5854129…   188MB      
```

子供のimageがわかったら、その依存する子供のimageを消す。
たいがいの場合、以下のエラーがでるはず。

```bash
docker@default:/hoge/fuge $ docker rmi cf2e26aad7fe
Error response from daemon: conflict: unable to delete cf2e26aad7fe (must be forced) - image is being used by stopped container d7e8028cdbd0
```

とか

```bash
docker@default:/hoge/fuge $ docker rmi a657d18ecf8f
Error response from daemon: conflict: unable to delete a657d18ecf8f (must be forced) - image is referenced in multiple repositories
```

など。

その場合は docker ps -a で関係するcontanierの正体を確認したのち、
問題なければ、docker rmでコンテナを削除する。

containerを消せたならば、docker rmi で先程の依存する子供のimageを削除する。
そうすると、自動的に依存する親のimageが全て削除されるので、目的達成となる。

以上。


## 参照記事

* [How to get the list of dependent child images in Docker?](https://stackoverflow.com/questions/36584122/how-to-get-the-list-of-dependent-child-images-in-docker)   
    * https://stackoverflow.com/questions/36584122/how-to-get-the-list-of-dependent-child-images-in-docker