bind mount共享数据

创建一个共享页面目录

1
2
[root@localhost ~]# mkdir htdocs/
[root@localhost ~]# echo "hello" > htdocs/index.html

然后进行bind mount的方式共享数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# docker run -d -p 80 --name web0 --volume /root/htdocs/:/usr/local/apahce2/htdocs httpd
2ac16608128f2ac9462cbded6b0a92b1c210d9c34d7a56278b3b4f6e64e400d9
[root@localhost ~]# docker run -d -p 80 --name web1 --volume /root/htdocs/:/usr/local/apahce2/htdocs httpd
5f2f8214a377541f2c35512bdd241c43d356e32a052bc6a9d683124412b77ea2
[root@localhost ~]# docker run -d -p 80 --name web2 --volume /root/htdocs/:/usr/local/apahce2/htdocs httpd
a51b1477241634d0f66e51c4a7d3d6595128cc30f98c4c70732ed60e6fd92cc8
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a51b14772416 httpd "httpd-foreground" 9 seconds ago Up 8 seconds 0.0.0.0:32770->80/tcp web2
5f2f8214a377 httpd "httpd-foreground" 14 seconds ago Up 14 seconds 0.0.0.0:32769->80/tcp web1
2ac16608128f httpd "httpd-foreground" 25 seconds ago Up 24 seconds 0.0.0.0:32768->80/tcp web0
# 分别访问不同容器映射到主机的端口
[root@localhost ~]# curl 172.16.1.16:32770
hello
[root@localhost ~]# curl 172.16.1.16:32769
hello
[root@localhost ~]# curl 172.16.1.16:32768
hello

卷容器共享数据

volume container:专门为其他容器提供volume的容器
volume container既可以通过bind mount共享数据库,也可以通过manage volume来共享数据

创建一个卷容器

1
2
3
[root@localhost ~]# docker create --name vc_data --volume /root/htdocs/:/usr/local/apache2/htdocs \
--volume test:/usr/local/apache2/logs busybox
139ec94bf4cc9dc9198e831ac4ff6e39b166d38c7bda2b3993a35130e59ab975

--volume /root/htdocs/:/usr/local/apache2/htdocs:将本地的htdocs目录以bind mount方式挂载到容器中的htdocs目录中
--volume test:/usr/local/apache2/logs:将容器中的logs目录以manage volume的方式映射到物理机本地,volume 名为test

1
2
3
4
5
6
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
139ec94bf4cc busybox "sh" 4 minutes ago Created vc_data
a51b14772416 httpd "httpd-foreground" 11 minutes ago Up 11 minutes 0.0.0.0:32770->80/tcp web2
5f2f8214a377 httpd "httpd-foreground" 11 minutes ago Up 11 minutes 0.0.0.0:32769->80/tcp web1
2ac16608128f httpd "httpd-foreground" 12 minutes ago Up 12 minutes 0.0.0.0:32768->80/tcp web0

查看卷列表

1
2
3
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local test

查看卷容器的挂载信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~]# docker inspect vc_data 
# 找到以下关键信息
"Mounts": [
{
"Type": "bind", # bind mount 共享数据
"Source": "/root/htdocs",
"Destination": "/usr/local/apache2/htdocs",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "volume", # manage volume共享数据
"Name": "test",
"Source": "/var/lib/docker/volumes/test/_data",
"Destination": "/usr/local/apache2/logs",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],

使用卷容器连接其他容器

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# docker run -d -p 80 --volumes-from vc_data --name web3 httpd
0e352478964ac86658db8e72f796bd188f2f269dbdaf41f69816df94c06ee0b7
[root@localhost ~]# docker run -d -p 80 --volumes-from vc_data --name web4 httpd
e966b5860bfd9f063e541791adaeef59b01f4c5595ff7462d5cad3d8ccb1e6bd
[root@localhost ~]# docker run -d -p 80 --volumes-from vc_data --name web5 httpd
390ac7c88206d4c56c1c4dcc7ac9ecda877fcc0587920fe25ffc15a39ef59efc

[root@localhost ~]# docker ps
PORTS NAMES
0.0.0.0:32773->80/tcp web5
0.0.0.0:32772->80/tcp web4
0.0.0.0:32771->80/tcp web3

访问

1
2
3
4
5
6
[root@localhost ~]# curl 172.16.1.16:32771
hello
[root@localhost ~]# curl 172.16.1.16:32772
hello
[root@localhost ~]# curl 172.16.1.16:32773
hello