考虑到容器内的数据会因为删除容器而丢失(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
数据的共享
网友评论