容器之间的数据共享技术, Docker容器产生的数据同步到本地
卷技术 --> 目录挂载, 将容器内的目录挂载到服务器上
使用命令来挂载 -v
# 可以挂载多个目录
docker run -it -v 主机目录地址:容器内目录地址
# 测试
docker run -it -v /root/temp:/home centos /bin/bash
linux主机的temp目录就和容器的home目录的操作是双向绑定了
删除容器并不会删除linux主机的数据
测试挂载Mysql
启动mysql是需要配置密码的
# 官方测试
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mypassword -dmysql:tag
# 自己运行容器挂载目录
-v 卷挂载
-e 环境配置
docker run -d -p 3310:3306 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
具名和匿名挂载
# 匿名挂载
-P 随机映射端口
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 具名挂载
-v 挂载名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
# 卷操作
docker volume --help
create Create a volume
inspect Display detailed information on one or more volumes
ls 查看所有卷
prune Remove all unused local volumes
rm Remove one or more volumes
# docker volume ls
local 39381d9f3555d38c6c24dcb0d3e7d6813b7e869e4c1a0f4e0a24c128dd483148 # 匿名挂载
local juming-nginx # 具名挂载
# 查看卷 docker volume inspect 卷id/卷名
docker volume inspect juming-nginx
[
{
"CreatedAt": "2020-08-29T13:35:12+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
所有容器内的卷, 在没有指定目录的情况下都可以在这查看: `/var/lib/docker/volumes/xxx/_data`
扩展
# -v 容器内路径:ro rw 设置读写权限 默认是 rw
:ro readonly 只读
:rw readwrite 可读可写
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
# ro 路径只能通过宿主机来操作, 容器内无法操作
数据卷容器
–volumes-from 容器名
# 通过 --volumes-from 容器名/id 来同步docker01的数据卷
--volumes-from 容器名/id # 同步这个容器的数据卷
docker run -it --name docker02 --volumes-from docker01 jiawei-centos:1.0
多个容器通过 --volumes-from 绑定的容器之间是双向绑定的, 删除`数据卷容器`不会影响其他容器, 其他容器他们还是绑定的
# 就是把所有关联的容器都停止了, 才会结束
结论: 数据卷容器的生命周期会一直持续到没有容器使用为止