本稿では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