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