はじめに
最初volumeの関係がよく分からなかったので
まとめてみました。
(重要な点のみ記載してます、間違ってたらコメント下さい)
環境
本記事は以下の環境等を使用しております。
環境 | Version | application |
---|---|---|
Windows | 10(64bit) | Docker for Windows |
macOS | Mojave(64bit) | Docker for Mac |
前準備
Mac:Docker環境が使用可能であること(Coming Soon)
【結論】-v
オプションの動作はこんな感じ
ちなみに公式では--mount
が推奨されていますが
今回は -v
の確認なので--mount
には触れません。
以降は確認した内容です。
コンテナの起動とボリューム生成(自動)
terminal
# ① ~ ⑤
>docker run -v vol1 --name c1 -itd osugizmo/alpine:3.9.4 /bin/sh
>docker volume ls ★ボリューム名をメモっておく
>docker run -v vol1 --name c2 -itd osugizmo/alpine:3.9.4 /bin/sh
>docker run -v <①Volumeのhash値>:/vol1 --name c3 -itd osugizmo/alpine:3.9.4 /bin/sh
>docker run -v vol2:/vol1 --name c4 -itd osugizmo/alpine:3.9.4 /bin/sh
>docker run -v /c/vol3:/vol1 --name c5 -itd osugizmo/alpine:3.9.4 /bin/sh
# 起動コンテナの確認
>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d44602250ba5 osugizmo/alpine:3.9.4 "/bin/sh" 26 minutes ago Up 26 minutes c5
fd986a43c555 osugizmo/alpine:3.9.4 "/bin/sh" 26 minutes ago Up 26 minutes c4
52170f5abcd0 osugizmo/alpine:3.9.4 "/bin/sh" 26 minutes ago Up 26 minutes c3
b0899080f006 osugizmo/alpine:3.9.4 "/bin/sh" 27 minutes ago Up 27 minutes c2
4a7d512beff1 osugizmo/alpine:3.9.4 "/bin/sh" 27 minutes ago Up 27 minutes c1
# ボリュームの確認
>docker volume ls
DRIVER VOLUME NAME
local 3fe77f2217648fad943a325442a85ec350213eb837f7169d653ddbf04c61b4fd
local 62ec5b816fc407e53582a092762ff43610e7f91f99b95c112fd83b6745a3abd6
local vol2
C1コンテナに接続しているボリュームにファイル作成
terminal
>docker exec -it c1 /bin/sh
/# ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var vol1 # <---★マウントされている
/# echo c1-container > /vol1/c1-file1.txt # <---★ファイル作成+書き込み
/# ls -la /vol1/
total 12
drwxr-xr-x 2 root root 4096 Jun 16 17:39 .
drwxr-xr-x 1 root root 4096 Jun 16 17:04 ..
-rw-r--r-- 1 root root 13 Jun 16 17:39 c1-file1.txt # <---★ファイルが存在する
/# cat /vol1/c1-file1.txt
c1-container # <---★書き込まれている
/# exit
C2コンテナに接続しているボリュームにファイル作成
terminal
>docker exec -it c2 /bin/sh
/# ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var vol1 # <---★同じvol1でマウントされている
/# ls -la /vol1 # <---★C1とは別のボリュームなのでファイルが存在しない
total 8
drwxr-xr-x 2 root root 4096 Jun 16 17:04 .
drwxr-xr-x 1 root root 4096 Jun 16 17:04 ..
/# echo c2-container > /vol1/c2-file1.txt # <---★ファイル作成+書き込み
/# ls -la /vol1/
total 12
drwxr-xr-x 2 root root 4096 Jun 16 17:50 .
drwxr-xr-x 1 root root 4096 Jun 16 17:04 ..
-rw-r--r-- 1 root root 13 Jun 16 17:50 c2-file1.txt # <---★ファイルが存在する
/# cat /vol1/c2-file1.txt
c2-container # <---★書き込まれている
/# exit
C3コンテナに接続しているボリュームにC1ボリュームのC1ファイルがあるか確認
terminal
>docker exec -it c3 /bin/sh
/# ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var vol1 # <---★同じvol1でマウントされている
/# ls -la /vol1 # <---★C1のボリュームなのでファイルが存在する
total 12
drwxr-xr-x 2 root root 4096 Jun 16 17:39 .
drwxr-xr-x 1 root root 4096 Jun 16 17:05 ..
-rw-r--r-- 1 root root 13 Jun 16 17:39 c1-file1.txt
/# cat /vol1/c1-file1.txt
c1-container # <---★C1で作成したファイル+内容と一致
/# exit
C4コンテナに接続しているボリュームにファイル作成
terminal
>docker exec -it c4 /bin/sh
/# ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var vol1 # <---★マウントされている
/# echo c4-container > /vol1/c4-file1.txt # <---★ファイル作成+書き込み
/# ls -la /vol1/
total 12
drwxr-xr-x 2 root root 4096 Jun 16 18:20 .
drwxr-xr-x 1 root root 4096 Jun 16 17:05 ..
-rw-r--r-- 1 root root 13 Jun 16 18:20 c4-file1.txt # <---★ファイルが存在する
/# cat /vol1/c4-file1.txt
c4-container # <---★書き込まれている
/# exit
C5コンテナに接続しているボリュームにファイル作成
terminal
>docker exec -it c5 /bin/sh
/# ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var vol1 # <---★同じvol1でマウントされている
/# ls -la /vol1 # <---★C1~C4とは別のボリュームなのでファイルが存在しない
total 8
drwxr-xr-x 2 root root 4096 Jun 16 17:04 .
drwxr-xr-x 1 root root 4096 Jun 16 17:04 ..
/# echo c5-container > /vol1/c5-file1.txt # <---★ファイル作成+書き込み
/# ls -la /vol1/
total 5
drwxrwxrwx 2 root root 0 Jun 16 18:13 .
drwxr-xr-x 1 root root 4096 Jun 16 17:05 ..
-rwxr-xr-x 1 root root 13 Jun 16 18:13 c5-file1.txt<---★ファイルが存在する
※ホスト(Windows)とbindしているから?実行権限が自動でついた
/# cat /vol1/c5-file1.txt
c5-container # <---★書き込まれている
/# exit
>cd c:\vol3
>c:\vol3>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は C823-E669 です
c:\vol3 のディレクトリ
2019/06/17 03:13 <DIR> .
2019/06/17 03:13 <DIR> ..
2019/06/17 03:13 13 c5-file1.txt # <---★書き込まれている
最後に
個人的にはホストのpermissionに影響を受けたくないので
抽出したいときは④ベースでtarにまとめてcpです。
(あくまでも個人的見解なのでオススメがあれば教えてください)
terminal
# 抽出したいものをtarでまとめる
>docker exec -i c4 tar -zcvf vol1.tar.gz /vol1
# コンテナからホストにコピー
>docker exec -i c4 ls -la
>docker cp c4:/vol1.tar.gz ./
# コンテナからまとめたtarを削除
>docker exec -i c4 rm /vol1.tar.gz
>docker exec -i c4 ls -la
# 解凍
>tar -zxvf vol1.tar.gz