本稿ではdocker-composeで作られた、コンテナ、イメージ、ボリューム、ネットワークそして未定義コンテナ、全てを一括消去するコマンドを説明する。
一括消去するコマンド docker-compose down
docker-compose down --rmi all --volumes --remove-orphans
実行結果の例
Stopping my-php-app_app_1 ... done
Stopping my-php-app_db_1 ... done
Removing my-php-app_app_1 ... done
Removing my-php-app_db_1 ... done
Removing network my-php-app_default
Removing volume my-php-app_mysqldata
Removing image mysql:8
Removing image php:7-apache
docker-compose down
の説明
docker-compose down --rmi all --volumes --remove-orphans
down
コマンドの特性としては、up
コマンドと真逆のことをするコマンドということになる。つまり、up
コマンドで作られうるもの(イメージ、コンテナ、ボリューム、ネットワーク)をすべて削除する。
--rmi
オプションは、削除するイメージの種類を指定する。all
はすべてのイメージ。local
はフィールドにカスタムタグのないイメージのみを削除する。--rmi
オプションを省略すると、イメージは消されない。
--volumes
オプションは、docker-compose.yml
のvolumes
セクションに書かれた名前付きボリュームとコンテナにアタッチされたanonymous volumeが削除される。
--remove-orphans
オプションは、docker-compose.yml
で定義から削除されたサービス用の未定義コンテナも削除される。
これら3つのオプションをつけないと、削除されるのはコンテナとネットワークだけとなる。
- 公式サイトによる解説: docker-compose down | Docker Documentation
docker-compose down
の使いみち
docker-compose down
の使いみちとしては「開発環境を一旦クリーンにして、ゼロから作り直したい」が多いと思う。
・・・
今まで、開発環境をリセットするためにdocker-compose stop
してdocker-compose rm
、docker rmi
、docker volume rm
のあわせ技で対応していたとしたら、ここで紹介したコマンドは代替手段としてとても役に立つと思う。
docker-compose down
体験ワークショップ
docker-compose down
を手元の環境で体験したい場合は、まず次の内容でdocker-compose.yml
を作成してほしい。
version: '3.7'
services:
app:
image: php:7-apache
depends_on:
- db
db:
image: mysql:8
volumes:
- mysqldata:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
mysqldata:
driver: local
次に、docker-compose up -d
で普段どおりに起動をかける。
$ docker-compose up -d
Creating network "my-php-app_default" with the default driver
Creating volume "my-php-app_mysqldata" with local driver
Pulling db (mysql:8)...
8: Pulling from library/mysql
Digest: sha256:01cf53f2538aa805bda591d83f107c394adca8d31f98eacd3654e282dada3193
Status: Downloaded newer image for mysql:8
Pulling app (php:7-apache)...
7-apache: Pulling from library/php
Digest: sha256:205073d982746d818c3a1a546b918a4d24368a2a8cb53477ac3224efee3390d0
Status: Downloaded newer image for php:7-apache
Creating my-php-app_db_1 ... done
Creating my-php-app_app_1 ... done
ここで、docker-compose ps
したり、docker-compose images
、docker volume ls
、docker network ls
などを実行してみて、イメージやボリュームが作られていることを確認してほしい。
そうしたら今度はdocker-compose down --rmi all --volumes
を実行して、up
で作られたものを一括削除してみよう。
$ docker-compose down --rmi all --volumes
Stopping my-php-app_app_1 ... done
Stopping my-php-app_db_1 ... done
Removing my-php-app_app_1 ... done
Removing my-php-app_db_1 ... done
Removing network my-php-app_default
Removing volume my-php-app_mysqldata
Removing image mysql:8
Removing image php:7-apache
削除が終わったら、先程やったようにイメージやボリュームのリストを出してみて、完全消去されていることを確認してみよう。
所感
docker-composeで
— suin❄️TypeScriptが好き (@suin) September 3, 2019
・コンテナ止める
・ネットワーク削除する
・ボリューム削除する
・イメージ削除する
って
docker-compose down --rmi all --volumes
で一括してできたのね。
こんな便利な「滅びの呪文」があるなんて知らなかった。
いちいち stop, rm などしてた……😢
最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローお願いします→Twitter@suin