Docker のデータを保存する volumes について

2017/10/10   #docker 
このエントリーをはてなブックマークに追加

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 になってしまった原因のコマンドを実行する。