1、什么是容器数据卷
如果数据都在容器中,那么我们容器删除,数据就会丢失,因此数据可以持久化!
容器之间可以有一个数据共享的技术,Docker容器产生的数据,同步到本地!
这就是卷技术,目录的挂载,将容器内的目录挂载到Linux上面
总结一句话:容器的持久化和同步操作,容器间数据也是可以共享的。
2、使用数据卷
#创建数据卷
[root@node1 ~]# docker volume create nginx-vol
nginx-vol
#查看数据卷
[root@node1 ~]# docker volume ls
DRIVER VOLUME NAME
local nginx-vol
[root@node1 ~]#
#查看数据卷的原始数据
[root@node1 ~]# docker volume inspect nginx-vol
[
{
"CreatedAt": "2021-03-17T22:15:24+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/data/docker/volumes/nginx-vol/_data",
"Name": "nginx-vol",
"Options": {},
"Scope": "local"
}
]
[root@node1 ~]#
#数据卷是空的
[root@node1 ~]# ls /data/docker/volumes/nginx-vol/_data
#用数据卷创建容器
[root@node1 ~]# docker run -d --name=nginx-test -p 81:80 -v nginx-vol:/usr/share/nginx/html nginx
[root@node1 ~]# docker port nginx-test
80/tcp -> 0.0.0.0:81
[root@node1 ~]#
#数据卷有数据了,和容器共享
[root@node1 ~]# ls /data/docker/volumes/nginx-vol/_data/
50x.html index.html
[root@node1 ~]#
[root@node1 ~]# rm -f /data/docker/volumes/nginx-vol/_data/*
[root@node1 ~]# ls /data/docker/volumes/nginx-vol/_data/
[root@node1 ~]# echo "hello" >//data/docker/volumes/nginx-vol/_data/index.html
[root@node1 ~]# ls /data/docker/volumes/nginx-vol/_data/
index.html
[root@node1 ~]# curl 127.0.0.1:81
hello
[root@node1 ~]#
#把容器删除
[root@node1 ~]# docker rm nginx-test -f
nginx-test
#数据库的数据还是存在的
[root@node1 ~]# ls /data/docker/volumes/nginx-vol/_data/
index.html
[root@node1 ~]#
# 删除数据卷,数据才会真正删除
[root@node1 ~]# docker volume rm nginx-vol
nginx-vol
注意:
1.如果没有指定创建的数据卷,数据卷会自动创建。
[root@node1 ~]# docker run -d --name=nginx-test1 -p 82:80 -v hehe:/usr/share/nginx/html nginx
[root@node1 ~]# docker volume ls
DRIVER VOLUME NAME
local hehe
2.如果要删除数据卷,一定要先删除容器
3.这种方式是具名挂载 通过 -v 卷名:容器内路径
4.这种方式是匿名挂载 通过 -v 容器内路径
5.这种方式是指定路径挂载 -v /宿主机路径:容器内路径
例子:
# 匿名挂载
[root@node1 ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx
694ade3ec73b20073ade8cb670c3cfa0eefd5282bfe3445aeee2961d305e7156
[root@node1 ~]# docker volume ls
DRIVER VOLUME NAME
local e36b187a899252f6bfbbb7139bbe490609c5b7a79244b1f996363186900c443a
#这里发现,这种就是匿名挂载,没有名字,我们在-v 只写了容器内的路径,没有写容器外的路径
#挂载路径
[root@node1 ~]# docker run -d --name test -v /opt/:/opt/ nginx
3、数据卷扩展
# 我们通过 -v 设置挂载卷,还可以设置读写权限
ro readonly #只读
rw readwrite #读写,默认的权限
docker run -d --name nginx03 -v juming-nginx-03:/etc/nginx:ro nginx
docker run -d --name nginx04 -v juming-nginx-04:/etc/nginx:rw nginx
#只要看到ro就说明这个容器路径只能通过宿主机来操作,容器内部是无法操作
4、总结
多个运行容器之间共享数据。
当容器停止或被移除时,该卷依然存在。
多个容器可以同时挂载相同的卷。
当明确删除卷时,卷才会被删除。
将容器的数据存储在远程主机或其他存储上
将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录,默认数据卷目录(/var/lib/docker/volumes/)
文档更新时间: 2021-03-18 09:54 作者:xtyang