参考:
http:
//docs
.docker.com
/userguide/dockervolumes/
针对数据的存储,有个data volume的概念。
使用参数: -
v
在container中创建一个volume,或者类似目录映射的方式,挂载一个数据盘或者目录到docker的container中。
环境准备:
[root@svr200-10 ~]
[root@svr200-10 ~]
Docker version 1.5.0, build a8a31ef
/1
.5.0
[root@svr200-10 ~]
[root@svr200-10 ~]
[root@svr200-10 ~]
[Jack@svr200-10 bin]$ docker pull centos
[Jack@svr200-10 bin]$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 7 fd44297e2ddb 11 days ago 215.7 MB
centos centos7 fd44297e2ddb 11 days ago 215.7 MB
centos latest fd44297e2ddb 11 days ago 215.7 MB
一、简单的方式是:挂载一个数据目录到container中
[Jack@svr200-10 bin]$ docker run -d -it -
v
/home/datacenter
:
/datacenter
--name datacenter centos
66f5e0e0e7042e371c092ff24117598055b7f65d4224f9738efbf13ba6273127
[Jack@svr200-10 bin]$ docker
ps
-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66f5e0e0e704 centos:7
"/bin/bash"
12 seconds ago Up 11 seconds datacenter
[Jack@svr200-10 bin]$ docker attach test01
[root@66f5e0e0e704 /]
total 60
lrwxrwxrwx. 1 root root 7 Apr 15 14:28 bin -> usr
/bin
drwxr-xr-x. 2 root root 4096 May 4 02:55 datacenter
drwxr-xr-x. 5 root root 380 May 4 02:51 dev
drwxr-xr-x. 47 root root 4096 May 4 02:51 etc
drwxr-xr-x. 2 root root 4096 Jun 10 2014 home
lrwxrwxrwx. 1 root root 7 Apr 15 14:28 lib -> usr
/lib
lrwxrwxrwx. 1 root root 9 Apr 15 14:28 lib64 -> usr
/lib64
drwx------. 2 root root 4096 Apr 15 14:26 lost+found
drwxr-xr-x. 2 root root 4096 Jun 10 2014 media
drwxr-xr-x. 2 root root 4096 Jun 10 2014 mnt
drwxr-xr-x. 2 root root 4096 Jun 10 2014 opt
dr-xr-xr-x. 235 root root 0 May 4 02:51 proc
dr-xr-x---. 2 root root 4096 Apr 15 14:29 root
drwxr-xr-x. 10 root root 4096 Apr 15 14:29 run
lrwxrwxrwx. 1 root root 8 Apr 15 14:28 sbin -> usr
/sbin
drwxr-xr-x. 2 root root 4096 Jun 10 2014 srv
dr-xr-xr-x. 13 root root 0 May 4 02:51 sys
-rw-r--r--. 1 root root 11 May 4 02:52 test01
-rw-r--r--. 1 root root 11 May 4 02:52 test04
drwxrwxrwt. 7 root root 4096 May 4 02:51 tmp
drwxr-xr-x. 13 root root 4096 Apr 15 14:28 usr
drwxr-xr-x. 19 root root 4096 Apr 15 14:29 var
[root@66f5e0e0e704 /]
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-252
:0-262241-66f5e0e0e7042e371c092ff24117598055b7f65d4224f9738efbf13ba6273127 9.8G 254M 9.0G 3% /
tmpfs 1.9G 0 1.9G 0%
/dev
shm 64M 0 64M 0%
/dev/shm
/dev/mapper/vg_svr20010-lv_root
50G 9.3G 38G 20%
/etc/hosts
/dev/mapper/vg_svr20010-lv_home
405G 48G 338G 13%
/datacenter
tmpfs 1.9G 0 1.9G 0%
/proc/kcore
写入数据:
[root@66f5e0e0e704 /]
[root@66f5e0e0e704 /]
[root@66f5e0e0e704 /]
test01 test02
[root@66f5e0e0e704 /]
Mon May 4 02:57:19 UTC 2015 aaa
Mon May 4 02:57:27 UTC 2015 123
[root@66f5e0e0e704 /]
exit
查看宿主机挂载目录的文件和内容:
[Jack@svr200-10 bin]$ ll
/home/datacenter
total 8
-rw-r--r--. 1 root root 33 May 4 10:57 test01
-rw-r--r--. 1 root root 33 May 4 10:57 test02
[Jack@svr200-10 bin]$
cat
/home/datacenter/test0
*
Mon May 4 02:57:19 UTC 2015 aaa
Mon May 4 02:57:27 UTC 2015 123
[Jack@svr200-10 bin]$ docker stop datacenter
datacenter
[Jack@svr200-10 bin]$ docker
rm
datacenter
datacenter
二、复杂一点儿:创建一个data volume container,共享给其他container
如官网所示:
If you have some persistent data that you want to share between containers, or want to use from non-persistent containers, it's best to create a named Data Volume Container, and
then
to
mount
the data from it.
1)创建一个container,提供一个数据卷供其他container使用:
[Jack@svr200-10 bin]$ docker run -d -it -
v
/home/datacenter
:
/datacenter
--name Data_Vol centos
7691eccc73f6e4e2e2c3d6816cf6ba6a80a5f98f5067d48db6e8bafb4e4db021
[Jack@svr200-10 bin]$ docker
ps
-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7691eccc73f6 centos:7
"/bin/bash"
7 seconds ago Up 5 seconds Data_Vol
再创建2个container,使用刚才创建的数据卷Data_Vol来存储数据。
在启动container时,用这个参数:--volumes-from Data_Vol,而不是之前提到的-
v
参数,来挂载数据卷。
2)创建一个container:app1 ,写入一点儿数据
[Jack@svr200-10 bin]$ docker run -d -it --volumes-from Data_Vol --name app1 centos
1474f622b7f04c98da98e320d10864538b50b0b053677bbda039c8fb657062c1
[Jack@svr200-10 bin]$ docker attach app1
[root@1474f622b7f0 /]
total 52
lrwxrwxrwx. 1 root root 7 Apr 15 14:28 bin -> usr
/bin
drwxr-xr-x. 2 root root 4096 May 4 02:56 datacenter
drwxr-xr-x. 5 root root 380 May 4 03:40 dev
drwxr-xr-x. 47 root root 4096 May 4 03:40 etc
drwxr-xr-x. 2 root root 4096 Jun 10 2014 home
lrwxrwxrwx. 1 root root 7 Apr 15 14:28 lib -> usr
/lib
lrwxrwxrwx. 1 root root 9 Apr 15 14:28 lib64 -> usr
/lib64
drwx------. 2 root root 4096 Apr 15 14:26 lost+found
drwxr-xr-x. 2 root root 4096 Jun 10 2014 media
drwxr-xr-x. 2 root root 4096 Jun 10 2014 mnt
drwxr-xr-x. 2 root root 4096 Jun 10 2014 opt
dr-xr-xr-x. 244 root root 0 May 4 03:40 proc
dr-xr-x---. 2 root root 4096 Apr 15 14:29 root
drwxr-xr-x. 10 root root 4096 Apr 15 14:29 run
lrwxrwxrwx. 1 root root 8 Apr 15 14:28 sbin -> usr
/sbin
drwxr-xr-x. 2 root root 4096 Jun 10 2014 srv
dr-xr-xr-x. 13 root root 0 May 4 03:40 sys
drwxrwxrwt. 7 root root 4096 May 4 03:40 tmp
drwxr-xr-x. 13 root root 4096 Apr 15 14:28 usr
drwxr-xr-x. 19 root root 4096 Apr 15 14:29 var
[root@1474f622b7f0 /]
test01 test02
[root@1474f622b7f0 /]
[root@1474f622b7f0 /]
app1 test01 test02
[root@1474f622b7f0 /]
[root@1474f622b7f0 /]
Mon May 4 03:43:11 UTC 2015 hello app1
[root@1474f622b7f0 /]
exit
2)再创建一个container:app2 ,写入一点儿数据
[Jack@svr200-10 bin]$ docker run -d -it --volumes-from Data_Vol --name app2 centos
c4d743681ec95d78b21a52d3a558b4cab40a9f7ba43e884e4686c57c313b6923
[Jack@svr200-10 bin]$ docker attach app2
[root@c4d743681ec9 /]
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-252
:0-262241-c4d743681ec95d78b21a52d3a558b4cab40a9f7ba43e884e4686c57c313b6923 9.8G 254M 9.0G 3% /
tmpfs 1.9G 0 1.9G 0%
/dev
shm 64M 0 64M 0%
/dev/shm
/dev/mapper/vg_svr20010-lv_root
50G 9.3G 38G 20%
/etc/hosts
/dev/mapper/vg_svr20010-lv_home
405G 48G 338G 13%
/datacenter
tmpfs 1.9G 0 1.9G 0%
/proc/kcore
[root@c4d743681ec9 /]
app1 test01 test02
[root@c4d743681ec9 /]
Mon May 4 03:43:11 UTC 2015 hello app1
[root@c4d743681ec9 /]
[root@c4d743681ec9 /]
exit
[Jack@svr200-10 bin]$ docker
ps
-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4d743681ec9 centos:7
"/bin/bash"
6 minutes ago Exited (0) 6 seconds ago app2
1474f622b7f0 centos:7
"/bin/bash"
6 minutes ago Exited (130) About a minute ago app1
7691eccc73f6 centos:7
"/bin/bash"
7 minutes ago Up 7 minutes Data_Vol
[Jack@svr200-10 bin]$
3)我们停止Data_Vol这个容器,再试试写入数据
[Jack@svr200-10 bin]$ docker stop Data_Vol
Data_Vol
[Jack@svr200-10 bin]$
[Jack@svr200-10 bin]$ docker start app1
app1
[Jack@svr200-10 bin]$ docker
ps
-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4d743681ec9 centos:7
"/bin/bash"
7 minutes ago Exited (0) About a minute ago app2
1474f622b7f0 centos:7
"/bin/bash"
8 minutes ago Up 7 seconds app1
7691eccc73f6 centos:7
"/bin/bash"
8 minutes ago Exited (137) 16 seconds ago Data_Vol
[Jack@svr200-10 bin]$ docker attach app1
[root@1474f622b7f0 /]
app1 app2 test01 test02
[root@1474f622b7f0 /]
[root@1474f622b7f0 /]
Mon May 4 03:43:11 UTC 2015 hello app1
Mon May 4 03:48:53 UTC 2015 app1 is back here
[root@1474f622b7f0 /]
exit
看起来,,这个用来持久化的Data_Vol不用启动,,其他的container用--volumes-from Data_Vol来挂载数据卷,也是可以正常使用的。
4)回到宿主机了,我们看下数据
[Jack@svr200-10 bin]$
ls
/home/datacenter/
app1 app2 test01 test02
看起来,文件都在这里呢,再看下数据:
[Jack@svr200-10 bin]$
cat
/home/datacenter/app1
Mon May 4 03:43:11 UTC 2015 hello app1
Mon May 4 03:48:53 UTC 2015 app1 is back here
[Jack@svr200-10 bin]$
cat
/home/datacenter/app2
Mon May 4 03:46:37 UTC 2015 this is app2
看,符合预期。