Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド

本稿では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.ymlvolumesセクションに書かれた名前付きボリュームとコンテナにアタッチされたanonymous volumeが削除される。

--remove-orphansオプションは、docker-compose.ymlで定義から削除されたサービス用の未定義コンテナも削除される。

これら3つのオプションをつけないと、削除されるのはコンテナとネットワークだけとなる。

docker-compose downの使いみち

docker-compose downの使いみちとしては「開発環境を一旦クリーンにして、ゼロから作り直したい」が多いと思う。

・・・

今まで、開発環境をリセットするためにdocker-compose stopしてdocker-compose rmdocker rmidocker volume rmのあわせ技で対応していたとしたら、ここで紹介したコマンドは代替手段としてとても役に立つと思う。

docker-compose down体験ワークショップ

docker-compose downを手元の環境で体験したい場合は、まず次の内容でdocker-compose.ymlを作成してほしい。

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 imagesdocker volume lsdocker 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

削除が終わったら、先程やったようにイメージやボリュームのリストを出してみて、完全消去されていることを確認してみよう。

所感


最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローお願いします:relieved:Twitter@suin

suin
Qiita 4位/TypeScript入門書執筆中/TypeScripterのための座談会「YYTypeScript」主催/『実践ドメイン駆動設計』書籍邦訳レビュア/分報Slack考案/YYPHP主催/CodeIQマガジン執筆/株式会社クラフトマンソフトウェア創設/Web自動テスト「ShouldBee」の開発/TypeScript/DDD/OOP
https://yyts.connpass.com/
craftsman_software
「インフラの心配は、もうおしまい」 インフラ運用を自動化し、手作業を限りなくゼロにする会社
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away