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
とすれば、白紙に戻った開発環境の出来上がりです。