docker起動時にボリュームをマウントする
-v
オプションを指定してコンテナ起動するとコンテナ内にマウントされる。
$ docker run -it --name container-test -h CONTAINER -v /data debian /bin/bash
root@CONTAINER:/# ls /data
root@CONTAINER:/# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 38G 3.6G 34G 10% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 245M 0 245M 0% /sys/fs/cgroup
/dev/mapper/VolGroup00-LogVol00 xfs 38G 3.6G 34G 10% /data
shm tmpfs 64M 0 64M 0% /dev/shm
tmpfs tmpfs 245M 0 245M 0% /proc/scsi
tmpfs tmpfs 245M 0 245M 0% /sys/firmware
root@CONTAINER:/#
- dockerホスト上でボリューム確認すると
/var/lib/docker/volumes/9ef~/_data
が確認できる
$ docker inspect -f {{.Mounts}} container-test
[{volume 9ef51c8191eb85447334fd166f159a09f254d2b83746bf39422a565dbe54ce81 /var/lib/docker/volumes/9ef51c8191eb85447334fd166f159a09f254d2b83746bf39422a565dbe54ce81/_data /data local true }]
$ sudo ls -ld /var/lib/docker/volumes/9ef51c8191eb85447334fd166f159a09f254d2b83746bf39422a565dbe54ce81/_data
drwxr-xr-x. 2 root root 6 Apr 19 02:11 /var/lib/docker/volumes/9ef51c8191eb85447334fd166f159a09f254d2b83746bf39422a565dbe54ce81/_data
- コンテナで/dataにファイル作成すると
root@CONTAINER:/# echo "test" >> /data/hoge.txt
root@CONTAINER:/# cat /data/hoge.txt
test
root@CONTAINER:/# ls -la /data/hoge.txt
-rw-r--r--. 1 root root 5 Apr 19 02:24 /data/hoge.txt
root@CONTAINER:/#
- dockerホストに同じように作成されてる
$ sudo ls -la /var/lib/docker/volumes/9ef51c8191eb85447334fd166f159a09f254d2b83746bf39422a565dbe54ce81/_data/
total 4
drwxr-xr-x. 2 root root 22 Apr 19 02:24 .
drwxr-xr-x. 3 root root 19 Apr 19 02:11 ..
-rw-r--r--. 1 root root 5 Apr 19 02:24 hoge.txt
[vagrant@pxeboot01 ~]$ sudo cat /var/lib/docker/volumes/9ef51c8191eb85447334fd166f159a09f254d2b83746bf39422a565dbe54ce81/_data/hoge.txt
test
Dockerfileでボリュームを指定
やってることは-vオプションと同じ。
注意点として
- VOLUME命令の後に置かれてる命令はそのボリュームに変更を加えることはできない
- Dockerfile作成
$ cat Dockerfile
FROM debian:wheezy
RUN useradd foo
RUN mkdir /data2 && touch /data2/foo.txt
RUN chown -R foo:foo /data2
VOLUME /data2
- buildする
$ docker build -t volume-foo .
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM debian:wheezy
---> 4c3b65fb373e
Step 2/5 : RUN useradd foo
---> Running in 29e19aa39414
Removing intermediate container 29e19aa39414
---> 28b3fa4ac2f6
Step 3/5 : RUN mkdir /data2 && touch /data2/foo.txt
---> Running in 74d5ea5cdd83
Removing intermediate container 74d5ea5cdd83
---> 6886db4affa4
Step 4/5 : RUN chown -R foo:foo /data2
---> Running in 6542605944a1
Removing intermediate container 6542605944a1
---> d75aec9eaa80
Step 5/5 : VOLUME /data2
---> Running in ed6c55b8ff8e
Removing intermediate container ed6c55b8ff8e
---> a6e05034b2fd
Successfully built a6e05034b2fd
Successfully tagged volume-foo:latest
- コンテナ起動して確認
$ docker run -it volume-foo /bin/bash
root@807962520c6b:/# df -hT
Filesystem Type Size Used Avail Use% Mounted on
rootfs rootfs 38G 3.7G 34G 10% /
overlay overlay 38G 3.7G 34G 10% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 245M 0 245M 0% /sys/fs/cgroup
/dev/mapper/VolGroup00-LogVol00 xfs 38G 3.7G 34G 10% /data2
/dev/mapper/VolGroup00-LogVol00 xfs 38G 3.7G 34G 10% /etc/resolv.conf
/dev/mapper/VolGroup00-LogVol00 xfs 38G 3.7G 34G 10% /etc/hostname
/dev/mapper/VolGroup00-LogVol00 xfs 38G 3.7G 34G 10% /etc/hosts
shm tmpfs 64M 0 64M 0% /dev/shm
tmpfs tmpfs 64M 0 64M 0% /proc/kcore
tmpfs tmpfs 64M 0 64M 0% /proc/keys
tmpfs tmpfs 64M 0 64M 0% /proc/timer_list
tmpfs tmpfs 64M 0 64M 0% /proc/timer_stats
tmpfs tmpfs 64M 0 64M 0% /proc/sched_debug
tmpfs tmpfs 245M 0 245M 0% /proc/scsi
tmpfs tmpfs 245M 0 245M 0% /sys/firmware
root@807962520c6b:/# ls -l /data2/*
-rw-r--r--. 1 foo foo 0 Apr 19 02:49 /data2/foo.txt
root@807962520c6b:/#
ホスト上のディレクトリをコンテナ内のディレクトリにマウント
-v HOST_DIR:CONTAINER_DIR
を指定してコンテナ起動
$ docker run -it -v /home/vagrant/test:/data debian /bin/bash
root@a6cdd0313782:/# md5sum /data/Dockerfile
447ba265cf960b1763e9818ec4c17e95 /data/Dockerfile
- ホスト上のディレクトリと同じファイルが見えてること確認
$ md5sum /home/vagrant/test/Dockerfile
447ba265cf960b1763e9818ec4c17e95 /home/vagrant/test/Dockerfile
コンテナ間でのデータ共有
--volumes-from
オプションで別コンテナのボリュームをマウントする
$ docker run -it -h newcontainer --volumes-from a6cdd0313782 debian /bin/bash
root@newcontainer:/# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 38G 3.7G 34G 10% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 245M 0 245M 0% /sys/fs/cgroup
/dev/mapper/VolGroup00-LogVol00 xfs 38G 3.7G 34G 10% /data
shm tmpfs 64M 0 64M 0% /dev/shm
tmpfs tmpfs 245M 0 245M 0% /proc/scsi
tmpfs tmpfs 245M 0 245M 0% /sys/firmware
root@newcontainer:/#
root@newcontainer:/# ls -l /data/*
-rw-rw-r--. 1 1000 1000 118 Apr 19 02:48 /data/Dockerfile
-rw-r--r--. 1 root root 5 Apr 19 03:08 /data/hoge.txt
root@newcontainer:/#
ボリューム削除
- 表示
$ docker volume ls
DRIVER VOLUME NAME
local 348cbd7daab00736c01f09cd3276d55edf23cf243411a17c5a7fbfadd1e64e05
local 4f7d27a90257dfd8c23ed17420a9f7a8d16272a4f99e4aecc53ae36adf6f7629
local 5180dc01cbf3745a522dc4a9f33e96a13e3507ccedd11c40317f450cfb15e73f
local 53c08970544155f0d25284e12a2c29a5f13bcacf57a6ed77ccd97b4aa42464e5
local 7ca568369cc785e838046200445a5a41eee6ef2cab90d3d3c8e3588241ff5786
local 9ef51c8191eb85447334fd166f159a09f254d2b83746bf39422a565dbe54ce81
local a7ad22e0048060d5ccd929d1e3434e747a1cbb54ebe9e6be73d6b4131be9e947
local bc60514c0dac103a603d26b8552b2acfc96525c8bf0ae671dd4dfc09f64de1b9
local cdb8fcc97974974cb1317824850af24075943824e8432058db28afae4e562164
local dc26bcdae951127b7e0ae2464dcacaff8f651e7b9934114d3aceaecbe3e99644
- 削除
$ docker volume rm 348cbd7daab00736c01f09cd3276d55edf23cf243411a17c5a7fbfadd1e64e05
348cbd7daab00736c01f09cd3276d55edf23cf243411a17c5a7fbfadd1e64e05
- 全削除
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
53c08970544155f0d25284e12a2c29a5f13bcacf57a6ed77ccd97b4aa42464e5
5180dc01cbf3745a522dc4a9f33e96a13e3507ccedd11c40317f450cfb15e73f
7ca568369cc785e838046200445a5a41eee6ef2cab90d3d3c8e3588241ff5786
dc26bcdae951127b7e0ae2464dcacaff8f651e7b9934114d3aceaecbe3e99644
a7ad22e0048060d5ccd929d1e3434e747a1cbb54ebe9e6be73d6b4131be9e947
4f7d27a90257dfd8c23ed17420a9f7a8d16272a4f99e4aecc53ae36adf6f7629
bc60514c0dac103a603d26b8552b2acfc96525c8bf0ae671dd4dfc09f64de1b9
cdb8fcc97974974cb1317824850af24075943824e8432058db28afae4e562164
9ef51c8191eb85447334fd166f159a09f254d2b83746bf39422a565dbe54ce81