Docker のデータを保存するために定義する volumes についてのメモ。
Compose file version 3 reference | Docker Documentation
Docker Data Volume を理解する - Carpe Diem
docker-compose での volume 定義
昔は busybox
という最小限コンテナイメージを元にボリューム用のコンテナをつくって、 volumes_from
でそれを指定していたらしい。
docker-composeでmysql & postgreSQL をサクッと起動 - Qiita
今は driver: local
的な感じでサクッとローカルディスクを指定できるようになっている。
という理解でいいっぽい。
volume の命名に注意する
docker-compose.yml で以下のような感じで volume を定義するが、
volumes:
foodb-data:
driver: local
foodb-data
のところ、これが volume 名になる。
driver が local の場合、volume 名でホストマシンに領域が作られるので、
ここがホストマシンで作業するときのアプリなりで被っていると予期しないエラーの原因になる。
ので、 volume 名はプロジェクト名とかアプリ名とかを含ませて被らないようにする 運用が望ましい。
volume の一覧を見る
$ docker volume ls
DRIVER VOLUME NAME
local 04566d1da2b17a53229d2dc17ea24c51e94a61806f8bb866f5822be477d03875
local 129bdd40ce9ba5344b3760dcac8691605546224a8002077e8bc837fdd0464171
local 298358023d1fd03cc47cce2fc384f569f1d5152946546a154e7d42a6237b7749
local 50974a5f0b1aeb09d7b5c7cae492c648d7cd00e73403c51ff163c6fe8bdbf530
local 728dc999bc7c2c5a15c20cbf483000042bbdcdef5ae12413c6199c1ba91b330e
volume をまとめて消す
$ docker volume ls -q | xargs docker volume rm
番外編: 速攻で Exited しちゃうときの原因探し
まずは docker-compose up
と -d
をつけない感じで起動してみる。
それでもワカラン時は以下のような手順で原因を探す。。
dockerコンテナーでExitedした時の原因を探す - Qiita
$ docker ps -a --no-trunc
で何のコマンドで Exited になってしまったか確認。
$ docker commit -m "exited" コンテナID
sha256:4333223352538d379ca37a815efde50e6aace5fdf1bd5ba29107f9b6cdd5c06a
でいったんコミット。
$ docker run --rm -it 4333223352538d379ca37a815efde50e6aace5fdf1bd5ba29107f9b6cdd5c06a bash
で入って、
Exited になってしまった原因のコマンドを実行する。