LoginSignup
0
5

More than 3 years have passed since last update.

Dockerfileをビルドすると<none>:<none>イメージが生成される理由

Posted at

概要

DockerfileからDockerイメージを作成する時に、何度も同じイメージ名でbuildを繰り返していると、

$ docker build -t <イメージ名> .

以下のような、<none>:<none>イメージが作成される。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
app                 latest              993cb7f8cc4b        25 seconds ago      72.9MB
<none>              <none>              ee308f906f56        4 minutes ago       72.9MB
ubuntu              latest              f643c72bc252        9 days ago          72.9MB

<none>:<none>イメージが生成される流れ

簡単な例に沿って、<none>:<none>イメージが作成される流れを理解します。
まずは、適当なDockerfileを作成します。

Dockerfile
FROM ubuntu:latest
RUN echo hello > hello.txt

次に上記で作成したDockerfileをビルドします。
※オプション-tで、appと言うイメージ名にしていますが、適当です。
※カレントディレクトリにいる前提で、「.」を指定しています。

$ docker build -t app .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM ubuntu:latest
latest: Pulling from library/ubuntu
da7391352a9b: Pull complete 
14428a6d4bcd: Pull complete 
2c2d948710f2: Pull complete 
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Downloaded newer image for ubuntu:latest
 ---> f643c72bc252
Step 2/2 : RUN echo hello > hello.txt
 ---> Running in 12a6fb70abb8
Removing intermediate container 12a6fb70abb8
 ---> ee308f906f56
Successfully built ee308f906f56
Successfully tagged app:latest

ビルドが成功したので、イメージを確認してみると、ルートイメージである「ubuntu」と先ほどビルドした「app」ができます。
ここで注目するのは、appのイメージIDが「ee308f906f56」である事を覚えておいて下さい。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
app                 latest              ee308f906f56        About a minute ago   72.9MB
ubuntu              latest              f643c72bc252        9 days ago           72.9MB

先ほど作成したDockerfileの中身を適当に変更してみます。
※ここでは、RUNの内容を適当に変更しています。

Dockerfile
FROM ubuntu:latest
RUN echo world > world.txt

変更したら、先ほどと同じように同じイメージ名でビルドしてみます。

$ docker build -t app .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM ubuntu:latest
 ---> f643c72bc252
Step 2/2 : RUN echo world > world.txt
 ---> Running in 85ef42ffb268
Removing intermediate container 85ef42ffb268
 ---> 993cb7f8cc4b
Successfully built 993cb7f8cc4b
Successfully tagged app:latest

ビルドが成功しました。
イメージを確認してみると、ルートイメージ「ubuntu」とビルドした「app」の他に<none>:<none>イメージが新たに作成されていることが確認できます。
最初にビルドした時の「app」のイメージID「ee308f906f56」が<none>イメージとなり、新たにイメージID「993cb7f8cc4b」が作成されました。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
app                 latest              993cb7f8cc4b        25 seconds ago      72.9MB
<none>              <none>              ee308f906f56        4 minutes ago       72.9MB
ubuntu              latest              f643c72bc252        9 days ago          72.9MB

なぜ、<none>:<none>イメージが生成されるのか

<none>:<none>イメージが生成される理由は、同じ名前のイメージを作り直すのが原因です。
Dockerでは、異なるイメージに同じイメージ名をつけることはできません。
そのため、古い方のイメージはイメージ名を剥奪されて、<none>:<none>となってしまいます。
このようなイメージの事を、Danglingイメージと言います。(意味を持たないぶら下がった状態である事を指します)

Danglingイメージを削除するには

Dangilingイメージは、特別な理由がない限り不要なので削除します。
わかりやすいように、数あるイメージの中から、Danglingイメージのみを抽出します。

$ docker images -f dangling=true
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              ee308f906f56        44 minutes ago      72.9MB

Dangling状態のイメージを削除します。

$ docker rmi <Dangling状態のイメージID>

複数のDanglingイメージを一括で削除したい場合は次のようにします。

$ docker rmi $(docker images -f 'dangling=true' -q)
または
$ docker image prune
0
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5