この記事は「ゆるっと Advent Calendar 2020」 25日目の記事です
初めに
2020年もあと少しで終わりです。年末、年明けを気持ちよく過ごしたいです。
普段のお仕事で使用頻度が(多分)一番高いDockerの掃除をして年明け気持ちいDockerライフを送ることを目指します。
※ 下記のDokcerリソースを動作している、停止している関係なく全て削除します。
- コンテナ
- イメージ
- ネットワーク
- ボリューム
- キャッシュ
コンテナを全て削除する
まずはすべてのコンテナを下記手順で削除します。
- コンテナ一覧を確認
- 全てのコンテナをストップ
- 全てのコンテナを削除
1. コンテナ一覧を確認
コンテナの一覧を見たいときはdocker ps -a
で見ることができます
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e628c6d89be lab-test "bash" 10 days ago Exited (0) 10 days ago beautiful_hermann
79832a249067 lab-test "bash" 10 days ago Exited (1) 10 days ago intelligent_kirch
db62543bae14 7f4591b869f3 "bash" 11 days ago Exited (0) 11 days ago wonderful_nash
dc7eab95300d 7f4591b869f3 "bash" 11 days ago Exited (0) 11 days ago kind_proskuriakova
68691ef5b776 681b31775932 "bash" 11 days ago Exited (1) 11 days ago adoring_snyder
386bbaa3699a 681b31775932 "bash" 11 days ago Exited (129) 11 days ago vigorous_margulis
.
.
.
ちなみに
docekr ps -aq
をするとコンテナのIDだけを出力してくれます
$ docekr ps -aq
f26dd4661c42
8e628c6d89be
79832a249067
79d9e52e5e76
.
.
.
2. 全てのコンテナをストップ
全てのコンテナを見ることができたので次にすべてのコンテナを一度停止させます
コマンドはdocker stop $(docker ps -aq)
$ docker stop $(docker ps -aq)
その次に下記コマンドを入力して起動してるコンテナがないか念のため確認します
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3. 全てのコンテナを削除
全てのコンテナを停止させることができたので次は全てのコンテナを下記コマンドで削除します。
$ docker rm $(docker ps -aq)
削除できたかどうか確認します。
これで起動している起動していないにかかわらずすべてのコンテナを終了させることができました。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
イメージを全て削除する
先ほどコンテナを全て削除することができたので次はイメージを下記手順で削除します。
- イメージ一覧の確認
- イメージの全削除
1. イメージ一覧の確認
まずはイメージがどれくらいあるか確認します。
ちなみに最近docker images
の-a
オプションの意味を最近知りました。
中間イメージを表示してくれるみたいです。docker images -h
の内容を読んで初めて知りました。
$ docker images -aq
056a32e64258
bfdf7441bdfc
24136c61804b
.
.
.
2. イメージの全削除
イメージの一覧を確認できたので下記コマンドで全て削除します。
-f
オプションを付けることでイメージの削除を強制することができます。
$ docker rmi -f $(docker images -aq)
削除が終わったら念のためイメージ一覧を確認します。
$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
これでイメージの削除が終わりました。
ネットワークを削除する
dockerが作成したネットワークを下記の手順で削除していきます。
- ネットワーク一覧の確認
- ネットワークの削除
1. ネットワーク一覧の確認
ネットワークの一覧は下記コマンドで確認できます。
ちなみにbridge,host,noneはデフォルトで存在しているネットワークになります。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
20e1d4898d67 bridge bridge local
2a419890b777 host host local
a275a9c25a0c influxdb_default bridge local
6521ba142a08 labs_default bridge local
ab08971ace6d mongo_default bridge local
4087108a7f37 none null local
2. ネットワークの削除
先ほどまでは削除コマンドにIDの一覧を渡して削除していましたが、network,volumeに関してはpruneオプションを利用します。
rm
オプションもあるんですが下記2点がわからないので試したことないですね。今度試してみようかしら?
- IDを渡すことができるのか
- デフォルトのネットワークがどうなるかがわからない
$ docker network prune -f
Deleted Networks:
mongo_default
labs_default
influxdb_default
これでデフォルトで作成されるネットワーク以外のネットワークを削除しました。
念のため確認します。デフォルト以外が消えているので大丈夫そうです。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
20e1d4898d67 bridge bridge local
2a419890b777 host host local
4087108a7f37 none null local
ボリュームの削除
dockerが作成したボリュームをネットワークと同じような手順で削除します。
- ボリューム一覧の確認
- ボリュームの削除
1. ボリューム一覧の確認
ボリュームの一覧は下記コマンドで確認できます。
$ docker volume ls
DRIVER VOLUME NAME
local 1a2ff7bbf277fb6f134ef03f63604cf9d79a7bb3c13dd76ee5ee43370979266a
local 4b4ffeb6c0ea586148eb1e140c4a2bb9c8b062ccccd3c1916c0c8b1fe7362c9f
local 4d53cbc45378083f9ebbf798a90442b6d1cf0778ea28a24328dcfda0682dadb4
local 6cd26eb1a2f0f175b13d3cfdb0106b8dc88fdf8a7ce08ca5c6209f22e21e3f28
.
.
.
2. ボリュームの削除
下記コマンドでボリュームを削除します
Total reclaimed space: 2.991GB
ちなみに私の環境では2.991GB程度空きができました。
頻繁にやってるつもりですがすぐ溜まっちゃいます
docker volume prune -f
Deleted Volumes:
local 1a2ff7bbf277fb6f134ef03f63604cf9d79a7bb3c13dd76ee5ee43370979266a
local 4b4ffeb6c0ea586148eb1e140c4a2bb9c8b062ccccd3c1916c0c8b1fe7362c9f
local 4d53cbc45378083f9ebbf798a90442b6d1cf0778ea28a24328dcfda0682dadb4
local 6cd26eb1a2f0f175b13d3cfdb0106b8dc88fdf8a7ce08ca5c6209f22e21e3f28
.
.
.
Total reclaimed space: 2.991GB
念のために確認します。
$ docker volume ls
DRIVER VOLUME NAM
これでボリュームを全て削除することができました。
キャッシュを削除
docker build
した際に作られるキャッシュを削除します。
(実はこのキャッシュについてほとんど知識がないです)
私の環境ではキャッシュがなかったようなので0Bになっています
$ docker builder prune -f
Total reclaimed space: 0B
削除されているか確認
最後に掃除されているか確認します(最初にこのコマンド入力すればよかったけど後の祭りです)
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
20e1d4898d67 bridge bridge local
2a419890b777 host host local
4087108a7f37 none null local
最後に感想とか
今回は、Dockerの大掃除を行いました。これで年明け気持ちよく使い始めることができると思います。
Dokerコマンドのヘルプはかなりわかりやすいと考えています。何か困ったら-h
をとりあえずやって見るのがいいかもしれません。
Dockerのデフォルトで作成されるネットワークは削除していいのかまた別の機会に調べます。