鯛めしのお釜

ウェブに関する技術的なメモを書いていきます。

Docker for Mac で dangling Image を眺める

Docker を触っていく中で、「<none> 」という Image が生まれる場合があることに気付いた。今回はそれについて調べてみた。

f:id:red_snapper:20161129113117p:plain

 

---

<none> について調べてみると、このような Image を「untaged Image」とか「dangling Image」と呼ぶらしい。はて、これは何だろうか。

どうやらこれは、既に存在する Image と同じものを取得しようとした際、コンフリクト(と言ってよいか分からんが)を起こすことによって生まれるものらしい。

コンフリクトした際、取得処理を破棄するのではなく、こうして <none> とリネームすることで常に全ての Image が取得されるように配慮されている・・・ということだろうか。

以下、興味深い記事に出逢ったのでご紹介したい。

www.projectatomic.io

 

---

さて、<none> の実態がなんとなく把握できたところで、Image が重複して存在するなんてちょっとばっちいので、今回の件をきっかけに掃除をすることにした。

docs.docker.com

<掃除の手順>

今回は特に重要なものなんて無かったので、一括削除してしまうことにした。

  1. Container の一括削除「$ docker rm $(docker ps -a -q)」
  2. Image の一括削除「$ docker rmi $(docker images -a -q)」

一括削除時、削除したくない Container が1個だけある、みたいな状況であれば、それを起動しておくとよい。そうすれば削除されないし、それに紐付く Image も消されずに残る。本当はフィルタリングをかけるオプションを付けたほうがええんやけれども・・・。

もし Image 削除時にコンフリクトが起こる場合は「$ docker rmi -f {Image の ID(複数指定可)}」で抹消する。

 

---

また、<none> という Image を無くしたい場合、削除ではなくリネームするという方法もある。

docs.docker.com

これが手っ取り早いっちゃあ手っ取り早い。けれどその <none> を確信を持って「これは CentOS の Image だ」とか言える場合でなければ、見当違いの名称を付与する事故が起こりそうで危ない。

 

---

ちなみに Image には、取得した Image に紐付く「intermediate images」というのがあって、「$ docker images -a」で表示できるのだが、場合によってはそれらが <none> だらけになることに気付いた。

これはどういうことだろうか。もしかして知る必要は無くて、「そういうもの」なのだろうか。いや、そんなはずは・・・。

 

以上、dangling Image まわりのメモでした。