つまりなにしたの?
Dockerを使っているといつの間にかDockerのイメージとかボリュームで肥大化してくるので、使わなくなったものは捨てたい。
どうやら便利なdocker system pruneというコマンドがあるらしいので使ってみた。
pruningって剪定って意味で、使っていないコンテナとかを剪定してくれる的な意味だった。
ミキプルーンの苗木。みたいなのを思い出してたせいで剪定が全然出てこなかった。
環境について
すでにインストール済とする。
docs.docker.com
以降の環境は
Docker CE Version 18.06.0-ce-mac70 (26399) Engine: 18.06.0-ce Compose: 1.22.0 Machine: 0.15.0 Notary: 0.6.1 Credential Helper: 0.6.0 Kubernetes: v1.10.3
で実行した。
どんなファイルが肥大化してくるのか
version: '3' services: env: image: jupyter/datascience-notebook environment: LANG: C.UTF-8 expose: - "8080" ports: - "8080:8080" volumes: - ./:/home/jovyan/ volumes: env: driver: 'local'
先日のdatascience-notebookのDocker Composeファイルを使ってコンテナを立ち上げてみる。
% docker-compose up # 色々立ち上げてくれる % docker image ls ?[feature/issue5] REPOSITORY TAG IMAGE ID CREATED SIZE jupyter/datascience-notebook latest ee385992ea10 9 days ago 6.13GB % docker container ls ?[feature/issue5] CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 976ccaaad982 jupyter/datascience-notebook "tini -g -- start-no…" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, 8888/tcp datasci_env_1 % docker network ls ?[feature/issue5] NETWORK ID NAME DRIVER SCOPE c2d0a1c3097e bridge bridge local acf38dc5d352 datasci_default bridge local bdf358de9acf host host local 56f83d902ba5 none null local % docker volume ls ?[feature/issue5] DRIVER VOLUME NAME local datasci_env
こんなかんじで、Image, Container, Network, Volumeがそれぞれできてきていた。
docker-composeなので終了すると
% docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 976ccaaad982 jupyter/datascience-notebook "tini -g -- start-no…" 3 minutes ago Exited (0) 14 seconds ago datasci_env_1
止まっている。
昔はどんな方法があったのか
- コンテナの削除
% docker ps -aq | xargs docker rm
- イメージの削除
% docker images -aq | xargs docker rmi
こんなんでやってて、一度なれたらコレばっかり使っていた。
きれいにする方法
コンテナだけ綺麗にしたいとき
docker container prune | Docker Documentation
% docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 976ccaaad982415ba72da7be7685fa232ae3febc635b3830734f07d99d453ca6 Total reclaimed space: 0B % docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ちゃんと消えた。
イメージだけ綺麗にしたいとき
docker image prune | Docker Documentation
関連付けのあるイメージはというのは、
タグ付けされておらず、どのコンテナによっても参照されないイメージのこと。
今回の場合はタグがついているので-aをつけて削除しなければならない。
% docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE jupyter/datascience-notebook latest ee385992ea10 9 days ago 6.13GB % docker image prune -a WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N] y Deleted Images: 諸々
ネットワークだけ綺麗にしたいとき
docker network prune | Docker Documentation
% docker network ls NETWORK ID NAME DRIVER SCOPE acf38dc5d352 datasci_default bridge local 他のネットワークなどなど % docker network prune WARNING! This will remove all networks not used by at least one container. Are you sure you want to continue? [y/N] y Deleted Networks: datasci_default
これでネットワークも削除できる
docker system pruneの動作確認
Container, Image, Networkについては
docker system prune
で削除できる。(Imageは関連付けが無いものについて)
あれ?まだ肥大化が収まらない
docker system pruneだとVolumeまでは削除してくれない。これはこれで安全でいいけど、
削除する場合は以下のオプションを付ければ削除できる。
docker system prune --volumes
もしくは
docker system prune # の次に docker volume prune # を実行すれば消せる