提示:以下是本篇文章正文内容,Docker 系列学习将会持续更新
一、数据卷概念
思考:
• Docker 容器删除后,在容器中产生的数据也会随之销毁?(会)
• Docker 容器和外部机器可以直接交换文件吗?(不可以)
• 容器之间想要进行数据交互?
数据卷:
• 数据卷是宿主机中的一个目录或文件。
• 当容器目录和数据卷目录绑定后,对方的修改会立即同步。
• 一个数据卷可以被多个容器同时挂载。
• 一个容器也可以被挂载多个数据卷。
数据卷作用:
• 容器数据持久化。
• 外部机器和容器间接通信。
• 容器之间数据交换。
二、配置数据卷
● 创建启动容器时,使用 –v
参数 设置数据卷
docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
● 注意事项:
- 目录必须是绝对路径。
- 如果目录不存在,会自动创建。
- 可以挂载多个数据卷。
● 举例1:数据持久化
①创建并运行容器,设置数据卷
docker run -it --name c1 -v /root/docker-data:/root/c1-data centos:7 /bin/bash
②在容器中插入数据,宿主机也同步了数据
[root@c70c7c1de0f8 c1-data]# touch hello.txt
[root@VM-4-12-centos docker-data]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 21 22:16 hello.txt
③在宿主机插入数据,容器也同步了数据
[root@VM-4-12-centos docker-data]# echo wangshaoyu > a.txt
[root@c70c7c1de0f8 c1-data]# ll
total 4
-rw-r--r-- 1 root root 11 Mar 21 14:17 a.txt
-rw-r--r-- 1 root root 0 Mar 21 14:16 hello.txt
[root@c70c7c1de0f8 c1-data]# cat a.txt
wangshaoyu
④删除了 c1 容器,但是宿主机中的数据卷依然存在
[root@c70c7c1de0f8 c1-data]# exit
exit
[root@VM-4-12-centos ~]# docker rm c1
c1
[root@VM-4-12-centos ~]# cd docker-data
[root@VM-4-12-centos docker-data]# ll
total 4
-rw-r--r-- 1 root root 11 Mar 21 22:17 a.txt
-rw-r--r-- 1 root root 0 Mar 21 22:16 hello.txt
⑤创建新的容器,挂载宿主机的数据卷,并且同步了数据
docker run -it --name c2 -v ~/docker-data:/root/c2-data centos:7 /bin/bash
⑥一个容器与宿主机之间挂载多个数据卷
docker run -it --name c3 -v ~/data1:/root/c3-data1 -v ~/data2:/root/c3-data2 centos:7
● 举例2:容器之间数据交换,多个容器挂载同一个数据卷
①c1挂载宿主机contain-data数据卷,进行数据插入
docker run -it --name c1 -v ~/contain-data:/root/data centos:7
[root@3579f64270a9 ~]# cd data
[root@3579f64270a9 data]# echo helloworld > hello.txt
②c2挂载宿主机contain-data数据卷,同步了数据
docker run -it --name c2 -v ~/contain-data:/root/data centos:7
[root@a558336365ef ~]# cd data
[root@a558336365ef data]# ll
total 4
-rw-r--r-- 1 root root 11 Mar 21 14:51 hello.txt
[root@a558336365ef data]# cat hello.txt
helloworld
③宿主机也同步了数据
[root@VM-4-12-centos ~]# cd contain-data
[root@VM-4-12-centos contain-data]# ll
total 4
-rw-r--r-- 1 root root 11 Mar 21 22:51 hello.txt
[root@VM-4-12-centos contain-data]# cat hello.txt
helloworld
三、数据卷容器
配置数据卷容器:创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from
)。
1、创建启动 c3 数据卷容器,使用 –v
参数,设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
2、创建启动 c1 c2 容器,使用 --volumes-from
参数,设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
查看信息:docker inspect c1
、docker inspect c2
、docker inspect c3
,我们会发现它们三个的挂载路径一摸一样。
"Mounts": [
{
"Type": "volume",
"Name": "0862ef2b0d79e01e15259c2d3b6d0baf71019a771e8cf76eb4a83c23b3cd514d",
"Source": "/var/lib/docker/volumes/0862ef2b0d79e01e15259c2d3b6d0baf71019a771e8cf76eb4a83c23b3cd514d/_data",
"Destination": "/volume",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
此时:
- 宿主机、c1容器、c2容器、c3容器 之间互相可以同步数据。
- 当 c3 数据卷容器停止运行,或被删除,也不影响其它容器之间的数据交换。
总结:
提示:这里对文章进行总结:
本文是对Docker的学习,认识了数据卷,学会了配置数据卷实现数据持久化、容器与客户端和其它容器之间的数据交换,并且又学会了配置数据卷容器。之后的学习内容将持续更新!!!