危機感にかられて今更Dockerを学び直す人の記録(data volumeをおさらい)

今日やること

data volume を理解し直す

data volume ってなんぞ

ボリュームは、Dockerコンテナによって生成され、使用されるデータを永続化するための推奨されるメカニズムです

docs.docker.com

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が遅いという問題を解決できると公式ドキュメントに書かれてた

docs.docker.com

--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なので、VMsshする必要がある

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

感想

前回書いた、dockerでrailsを動かす記事の、volumeの設定に誤りがあることを理解した

以下はdata volumeにした方が良い

kasei-san.hatenablog.com

参考

developer.feedforce.jp

  • 弊社記事。ここに書かれていることと、自分の記事の差異から、この記事が生まれた。感謝!

docs.docker.com

  • 公式ドキュメント

https://success.docker.com/article/Different_Types_of_Volumessuccess.docker.com

  • 公式。data volume の違いについて説明している