サーバ構築

Dockerコンテナのデータ管理

投稿日:

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

-サーバ構築
-

Copyright© 明日から頑張ります。 , 2025 All Rights Reserved Powered by STINGER.