604
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

《滅びの呪文》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

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
Sign upLogin
604
Help us understand the problem. What are the problem?