#マウントについて
##バインドマウント(bind)
Dockerホストのファイルやディレクトリをコンテナ上にマウントする機能
バインドマウントを行うと、コンテナの外にあるファイルを、コンテナの中から読み書き可能になります。
##ボリュームマウント(volume)
Docker が管理するデータ領域を コンテナ上にマウントする機能です。
バインドマウントとの違いは、バインドマウントが「Dockerが管理するデータ領域以外もマウント可能である」ことに対し、ボリュームマウントは「Dockerが管理するデータ領域内でのマウントのみ可能である」という点です。
ホストマシン上に新たなディレクトリが生成され、そこが Dockerの保存ディレクトリとなります。 そしてDockerはそのディレクトリ内の内容を管理していきます。コンテナが破棄させるとvolumesに保存される。ホストのデータが更新され、コンテナを立ち上げれば、volumeの既存データもupdateされる。
##一時ファイルシステムのマウント(tmpfs)
Dockerホストにファイルとして保存したくないデータを一時的に利用できるようにする(データ領域をメモリ上に置く)機能。
##ホストマシンとは
ホストマシンとコンテナでディレクトリを同期させることができるが、 注意しておきたいのが, ここでいうホストマシンとはMacのことではない。
Mac上で起動しているのはdockerの仮想Linuxマシンであること。そもそもコンテナというものはLinuxカーネルに使われている技術。したがってMacでコンテナ技術を使うためには, 間に仮想Linuxマシンをはさまなくてはならない。
Macとコンテナはデータのやりとりができないのかというとそうではない。 仮想Linuxマシンからは, Mac全体が/Macとして参照できるらしい。
つまりMac全体が仮想Linuxマシンにマウントされているとのこと。 他にもMac上の/Usersが仮想Linuxマシンからも/Usersでアクセスできる。
実際にdocker run コマンドを使用しバインドマウントを行って見た。
Hostディレクトリ構成
docker run -it -d -p 8080:80 -v /Users/hamadayuuta/Desktop/test_dk/test3/:/var/lib/test/ nginx:latest
バインドマウント先は任意のコンテナ内のディレクトリが作成可能。
/User~ : まではホストのターゲットpath
/var/lib/ → dockerコンテナ内のpath。環境はlinux環境
/test/は任意のディレクトリを作成。 ここがマウント領域になる。
docker exec -it nginx:latest /bin/bashで見にいくと
root@b00e211eff2b:/# cd ./var/lib/test/
root@b00e211eff2b:/var/lib/test# ls
index.html
マウントを確認。
docker inspectで確認すると
"Mounts": [
{
"Type": "bind",
"Source": "/Users/hamadayuuta/Desktop/test_dk/test3",
"Destination": "/var/lib/test",
マウントを確認できました。
コンテナはlinuxのプロセス空間を用いて作成したものであるから、 マウントをする際はlinuxのディレクトリ構造をイメージして作成しないといけないかな。→間違えてたらすみません。