Docker05容器数据卷
目录
什么是容器数据卷? #
问题:如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
解决:容器之间可以有一个数据共享技术,Docker 容器中产生的数据可以同步到本地。这就是卷技术。
数据卷技术:实现容器与主机之间持久化和同步操作,容器与容器之间的数据共享。
使用数据卷 #
# docker run -it -v 主机目录:容器内目录
#运行
[root@izwz91mv6i3x6k12jjqh60z ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
#进入容器内部查看文件
[root@1309cabd368d /]# cd home
[root@1309cabd368d home]# ls
test
#快捷键退出后,查看主机文件
[root@izwz91mv6i3x6k12jjqh60z ~]# cd ../
[root@izwz91mv6i3x6k12jjqh60z /]# ls
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@izwz91mv6i3x6k12jjqh60z /]# cd home/ceshi
[root@izwz91mv6i3x6k12jjqh60z ceshi]# ls
test
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e9a056333396 centos "/bin/bash" 16 minutes ago Up 16 minutes strange_grothendieck
39f11d68d64d tomcat "catalina.sh run" About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat02
#看到容器有如下显示:说明配置成功
[root@izwz91mv6i3x6k12jjqh60z ~]# docker inspect e9a056333396
具名和匿名挂载 #
#匿名挂载(只写了容器内的路径)
[root@izwz91mv6i3x6k12jjqh60z ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx
0f3e16361a94ebad9c33f1f95541221baeb34938f49cc22b0e2f4b48529ac5c5
#查看所有 volume 卷情况
[root@izwz91mv6i3x6k12jjqh60z ~]# docker volume ls
DRIVER VOLUME NAME
local 24570da35a5fed8d17719e297aee20858fea33320982d266ba9a42d272f96514
local 47031f8700fc06fda4053726e7df7e37df7917b0bf66c834ed94998c73049d3d
local 3454500b1f5630df52a4292c2b98bce1a77de4fed08a7e2a02606dd13482a410
local cc0f07ef4be0cf2bf6c8e9395198e69744227cc10cba02aad9d9c08d613b7426
#具名加载
[root@izwz91mv6i3x6k12jjqh60z ~]# docker run -d -P --name nginx02 -v jumin-nginx:/etc/nginx nginx
264b185cbcccb005f20eb63d86b01d39e39b99fe2e7626590ed41d2b1bc57838
[root@izwz91mv6i3x6k12jjqh60z ~]# docker volume ls
DRIVER VOLUME NAME
local 24570da35a5fed8d17719e297aee20858fea33320982d266ba9a42d272f96514
local 47031f8700fc06fda4053726e7df7e37df7917b0bf66c834ed94998c73049d3d
local 3454500b1f5630df52a4292c2b98bce1a77de4fed08a7e2a02606dd13482a410
local cc0f07ef4be0cf2bf6c8e9395198e69744227cc10cba02aad9d9c08d613b7426
local jumin-nginx
#查看这个卷
[root@izwz91mv6i3x6k12jjqh60z ~]# docker inspect jumin-nginx
[
{
"CreatedAt": "2021-05-14T15:41:29+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/jumin-nginx/_data",
"Name": "jumin-nginx",
"Options": null,
"Scope": "local"
}
]
总结:所有容器内的卷,在没有指定目录的情况下都是在 /var/lib/docker/volumes/XXXXXX/_data
。通过具名加载可以方便的找到我们的一个卷,大多数情况都是使用 具名加载
注意如下不同点:
-v 容器内路径 #匿名加载
-v 卷名:容器内路径 #具名加载
-v /宿主机路径:容器路径 #指定路径加载
拓展:
#通过 设置 ro rw 改变读写权限
ro #只读
rw #可读可写
#如:
docker run -d -P --name nginx02 -v jumin-nginx:/etc/nginx:ro nginx
#若设置为只读就说明这个路径只能通过宿主机来操作,容器内部是无法操作的。
什么是数据卷容器? #
容器之间使用数据卷技术实现数据同步和共享。
两个或多个容器之间实现数据共享思路:
#启动容器 docker01
[root@izwz91mv6i3x6k12jjqh60z test]# docker run -it --name docker01 zhang_new_centos:1.0
#启动容器 docker02 --volumes-from docker01
[root@0292e5d71d18 /]# [root@izwz91mv6i3x6k12jjqh60z test]# docker run -it --name docker02 --volumes-from docker01 zhang_new_centos:1.0
#查看状态
[root@66a61d493849 /]# [root@izwz91mv6i3x6k12jjqh60z test]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66a61d493849 zhang_new_centos:1.0 "/bin/sh -c /bin/bash" 12 seconds ago Up 11 seconds docker02
0292e5d71d18 zhang_new_centos:1.0 "/bin/sh -c /bin/bash" 26 seconds ago Up 25 seconds docker01
通过 docker inspect docker01
发现:
通过 docker inspect docker02
发现:
说明成功实现了容器间的数据同步!!
注意:容器之间配置信息的传递,数据卷容器的生命周期会一直持续到没有容器使用为止。但一旦你持久化到了本地,这个时候,本地的数据是不会删除的。