6、Docker容器数据卷

考虑到容器内的数据会因为删除容器而丢失(es,mysql等)所以容器内不可以存储数据,而是应该将容器中的数据同步到本地或者一个可以持久化的磁盘
所以出现了容器数据卷技术,主要实现的功能就是容器内的目录挂载到服务器上。
目的是实现容器的持久化和同步操作,容器间的数据共享

1、使用数据卷

设置挂载命令:docker -run -v 主机目录:容器目录
查看挂载命令:docker inspect 容器id,再基本信息中查看Mounts信息

2、具名挂载和匿名挂载

1、匿名挂载

匿名挂载就是不指定主机的目录,例如docker run -d -P --name nginxtest -v /etc/nginx nginx
通过命令docker volume ls 查看所有的卷的情况

> docker volume ls 
DRIVER    VOLUME NAME
local     c5c9084f91c9847022c4e9e55ed4d55687f521d387b95c407c5d227e0c558e46

其中没有名称,只有一个字符串(c5c9084f91c9847022c4e9e55ed4d55687f521d387b95c407c5d227e0c558e46)的就是匿名卷

2、具名挂载

具名挂载就是指定卷的名称,
例如docker run -d -P --name nginx-has-volume-name -v nginx-volume:/etc/nginx nginx
docker run -d -P --name nginx-has-volume-name -v nginx-volume /etc/nginx:/etc/nginx nginx
然后通过docker volume ls查看所有的卷列表

> docker volume ls
DRIVER    VOLUME NAME
local     8c8088e2c10fed85d56193d61e19f1a2159b3c9f8d410d9d245f8c59b47a20a4
local     nginx-volume

查看卷对应的挂载路径
docker volume inspect nginx-volume

> docker volume inspect nginx-volume
[
    {
        "CreatedAt": "2021-08-06T00:16:53-07:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx-volume/_data",
        "Name": "nginx-volume",
        "Options": null,
        "Scope": "local"
    }
]

默认所有没有指定路径的卷都存储在这个目录下/var/lib/docker/volumes/
推荐使用具名挂载

设置挂在权限
docker run -d -P --name nginx01 -v nginx-volume:/etc/nginx:ro nginx
ro表示为设置只读权限,只能从外部宿主机目录中修改文件,容器内的目录只能读取文件,不能修改

docker run -d -P --name nginx01 -v nginx-volume:/etc/nginx:rw nginx
rw表示设置为读写权限,宿主机目录和容器内目录都可以做修改和读取

3、数据卷容器

适用于子容器需要从父容器同步数据的过程,父容器就是数据券容器
实现命令:
docker run -it --name docker02 --volume-from docker01 docker镜像:镜像版本
docker02就是数据卷容器,两个容器之间的实现数据共享(容器之间的数据互相拷贝)
应用的实际情况mysql 数据的共享

你可能感兴趣的:(6、Docker容器数据卷)