今日やること
data volume を理解し直す
data volume ってなんぞ
ボリュームは、Dockerコンテナによって生成され、使用されるデータを永続化するための推奨されるメカニズムです
Dockerコンテナの中のファイル/ディレクトリは、コンテナが終了すると削除されてしまう
そのため、永続化したいデータがあるときに、data volume を使う
data volume は、ホストのファイルシステムに作成されるディレクトリで、コンテナにマウントされる
(普通は /var/lib/docker
に生成されるらしい)
また、特定のホストのディレクトリと紐付けることも可能で、その場合、ホストの特定のディレクトリをコンテナから参照できる (開発環境では主にこの使い方をするはず)
data volume は、起動時の --volume (-v)
オプションもしくは --mount
オプションで指定する
--volume (-v)
オプション
値は、:
で区切られた3つの値を指定する
- 1個目 : ホストマシン上でのpath。もしくは、名前付きボリュームを指定。省略すると匿名ボリュームになる
- 2個目 : コンテナ上でのpath
- 3個目 : オプション(カンマ区切り。後述)
ボリュームは、ホストマシンの特定のディレクトリと紐付かなくても作成できる
-v
オプションで、:
区切りの1個目を指定しない場合、無名のボリュームが生成される。これを匿名ボリューム(anonymous volume)と呼ぶ
使いそうなオプション
- ro: 読み取り専用(read-only)
- cached: コンテナからの読込速度が早くなるかわりに、ホストの更新がコンテナに反映される場合に遅延が許可される
- delegated: コンテナからの書込速度が早くなる代わりに、コンテナの更新がホストに反映される場合に遅延が許可される
cachedと、delegatedは、Docker For Mac でのディスクIOが遅いという問題を解決できると公式ドキュメントに書かれてた
--mount
オプション
key=value形式で、マウント方法を指定するオプション
type=volume で、ボリュームの設定もできるらしいけど、普段あんまり使わなそうなので割愛
data volume の一覧を見る方法
$ docker volume ls
ローカルのdata volume の格納先を確認する方法
$ docker volume inspect #{volume name}
Mountpoint
にpathが書かれている
Docker for mac の場合、書かれているpathは、dockerが動作しているVM上のpathなので、VMにsshする必要がある
$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
感想
前回書いた、dockerでrailsを動かす記事の、volumeの設定に誤りがあることを理解した
以下はdata volumeにした方が良い
参考
- 弊社記事。ここに書かれていることと、自分の記事の差異から、この記事が生まれた。感謝!
- 公式ドキュメント
https://success.docker.com/article/Different_Types_of_Volumessuccess.docker.com
- 公式。data volume の違いについて説明している