Docker Data Volume

AWS SAM CLI のテストで躓いたので、Dockerの共有フォルダについて理解することにした。以下のURLが非常に参考になる。
https://www.crz33.com/software/docker/docker_doc_data

ホストOS(windows7)のディレクトリをマウントして、コンテナから中身を見れば共有設定がどうなっているか確認できる。

docker run -v /c/Users:/home -it --rm ubuntu /bin/bash

Oracle VM VitualBox マネージャーの設定から共有フォルダを設定する。Cドライブを選択するとフォルダ名が [C_DRIVE] と自動的に入力されるがこれだとコンテナから見えない。共有できない。

フォルダ名を [c] とすると共有できる。自動マウント[Auto-mount]も選択する。C:\Users のフォルダ名が c/Users になっていることから、フォルダ名がパスとして使われているのだろうか?
http://docs.docker.jp/engine/userguide/dockervolumes.html

※大文字小文字も重要。Docker の公式サイトにもそれっぽいことが書かれていた。

Note: Within the VM path, c is lowercase and the Users is capitalized.
注:VMパス内では、cは小文字で、ユーザーは大文字です。
https://docs.docker.com/toolbox/toolbox_install_windows/#optional-add-shared-directories

-v : と -v は挙動が違うため、混同していると Data Volume が何者かよくわからなくなります。

出典:Docker の Data Volume まわりを整理する – Qiita

前者はホスト上の指定したディレクトリ を の位置に、 Data Volume としてマウントします。
動的にファイルをコンテナ内部で使いたい場合や、逆にホスト側のファイルを操作したい場合などに使われます。

一方、後者はコンテナを起動するタイミングでホスト上にディレクトリを作り、それを の位置に Data Volume としてマウントします。
ホスト上のディレクトリを明示的に指定する場合と大きく違うのは、コンテナを削除するとそのボリュームが消える(正しくは参照が切れる)という点です。
また、マウントされているディレクトリはホスト上のファイルシステムに作られますが、/var/lib/docker以下に隔離されているので、ホストに干渉しないという特徴を持ちます。

ホストOSのディレクトリをマウント

出典:Dockerでデータボリュームを使ってみる|crz33

Windowsであれば、”c:¥”を共有設定してあれば、”/c/”で始まる名前でマウントすると、WindowsOSのフォルダ、マッチしなければホストLinux側のディレクトリをマウントしようとする動きかと思います。

Docker Data Volume を理解する

出典:Docker Data Volume を理解する – Carpe Diem

Dockerのデータをホスト側に保持する方法をまとめます。
Dockerはコンテナの破棄・再作成が簡単にできる一方、そのままだとデータも消えてしまいます。
今回のDate Volumeはデータの永続性を保つべきシーンで必要となる知識です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です