DockerComposeで生成したコンテナ・イメージ・ボリューム・ネットワークを一括削除
DockerComposeで生成したコンテナ・イメージ・ボリューム・ネットワークを一括削除
2020/06/27

Dockerの開発環境を初期化して、開発し直したいときに役立つdownコマンドの紹介。

$ docker-compose down --rmi local -v  

以上のコマンドだけで、関係するコンテナ・イメージ・ボリューム・ネットワークを一括削除することができる。

想定する状況

例で示すと、
クライアントサイドはNodeのフレームワークGatsby、記事管理にはGhostCMS+MySQLを使ったブログサービスがDockerで動いているとする。
ゴミファイルなどが溜まってしまったDBなど、すべて白紙に戻して開発し直したい。

Dockerの構成は以下のようになっている。

コンテナ

  • app: Gatsby
  • db: MySQL
  • ghost: Ghost
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
af50ab24edc5        blog-sample_app     "docker-entrypoint.s…"   2 minutes ago       Up About a minute   0.0.0.0:8080->8080/tcp   blog-sample_app_1
624ee466b8d8        blog-sample_db      "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        3306/tcp, 33060/tcp      blog-sample_db_1
f6f41484bf81        ghost:3.7-alpine    "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:2368->2368/tcp   blog-sample_ghost_1

イメージ

  • node
  • mysql
  • ghost
$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
blog-sample_app            latest              de2c50cbc00e        4 minutes ago       1.67GB
node                       12-alpine           7a48db49edbf        8 weeks ago         88.7MB
mysql                      5.7                 1e4405fe1ea9        7 months ago        437MB
ghost                      3.7-alpine          1320b5ea0bea        4 months ago        328MB

ボリューム

  • node_modules
$ docker volume list
DRIVER              VOLUME NAME
local               blog-sample_node_modules

ネットワーク

  • default
$ docker network list
NETWORK ID          NAME                       DRIVER              SCOPE
1d5ce36ca401        blog-sample_default        bridge              local

docker-composeの一括削除コマンド down

「一度白紙に戻して、再度開発環境を整えたい!」となったときに、一括削除してくれる down コマンドが存在する

$ docker-compose down

コンテナを停止し、 up で作成したコンテナ・ネットワーク・ボリューム・イメージを削除します。デフォルトではコンテナとネットワークのみ削除します。

オプションをつけずに実行して削除されるのは、

Compose ファイル内で定義したサービス用のコンテナ
Compose ファイルの network セクションで定義したネットワーク
default ネットワーク(を使っている場合)

のコンテナとネットワークだけで、イメージとボリュームが削除されないので、完全に白紙の状態には戻らない。

イメージとボリュームが削除されない

オプションを付けて、イメージとボリュームも削除ができる。

$ docker-compose down --rmi local -v  

--rmi

--rmi つまり「remove image」の略で、イメージを削除するオプション。

このオプションでは、削除対象を選択することができ、

'all': あらゆるサービスで使う全イメージを削除
'local': image フィールドにカスタム・タグのないイメージだけ削除

allを指定した場合、例にあるイメージでは、blog-sample_app, node, mysql, ghostが削除される。
他のプロジェクトで、同じmysqlのイメージを使っていた場合、動かなくなる可能性があるので、全削除は注意が必要になる。

node, mysql, ghostのイメージは何度削除しても、インストールするものは結局同じイメージなので、あえて削除する必要がない。

だから、自分は--rmi local でblog-sample_appイメージだけ削除するようにしている。

-v

-v オプションは、「volume」 ボリュームを削除するオプション。

実行結果

これらのオプションを使い削除することで、コンテナ・イメージ・ボリューム・ネットワークの一括削除ができる

$ docker-compose down --rmi local -v  

コンテナ・イメージ・ボリューム・ネットワークの一括削除ができる

実際に削除してみると・・

$ docker-compose down --rmi local -v  
Stopping blog-sample_app_1   ... done
Stopping blog-sample_db_1    ... done
Stopping blog-sample_ghost_1 ... done
Removing blog-sample_app_1   ... done
Removing blog-sample_db_1    ... done
Removing blog-sample_ghost_1 ... done
Removing network blog-sample_default
Removing volume blog-sample_node_modules
Removing image blog-sample_app

コンテナが停止され、コンテナ・イメージ・ボリューム・ネットワークを削除していることがわかる。
nodeやmysqlイメージは削除されずに残っている。

以上で、開発環境を完全削除ができたので、

$ docker-compose build
$ docker-compose up -d

とすれば、白紙に戻った開発環境の出来上がりです。