0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker Volume についてまとめてみた

Posted at

はじめに

最初volumeの関係がよく分からなかったので
まとめてみました。
(重要な点のみ記載してます、間違ってたらコメント下さい)

環境

本記事は以下の環境等を使用しております。

環境 Version application
Windows 10(64bit) Docker for Windows
macOS Mojave(64bit) Docker for Mac

前準備

Windows:Docker環境が使用可能であること

Mac:Docker環境が使用可能であること(Coming Soon)

【結論】-v オプションの動作はこんな感じ

Docker2.png
ちなみに公式では--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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?