目录
1.什么是数据卷
2.使用数据卷
方式一:指定目录挂载
方式二:匿名挂载
方式三:具名挂载
方式四:dockerfile实现目录挂载
注意
方式五:容器之间目录挂载
1.什么是数据卷
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
容器的持久化和同步操作!容器间也是可以数据共享的!
2.使用数据卷
验证
docker inspect 容器id或容器名
方式一:指定目录挂载
-v 主机目录:容器内目录
docker run -it -v 主机目录1:容器内目录1 -v 主机目录2:容器内目录2
示例
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
-- name 容器名字
命令:
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
方式二:匿名挂载
1.挂在不指定宿主机目录,也不使用卷名。
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
2.查看所有的volume的情况
docker volume ls
命令结果:
DRIVER VOLUME NAME
local 33ae588fae6d34f511a769948f0d3d123c9d45c442ac7728cb85599c2657e50d
local
3. 这里发现,这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路劲!
4.匿名挂载宿主机目录:/var/lib/docker/volumes/卷名或id/_data下
方式三:具名挂载
# 1.具名挂载
-v 自定义卷名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
命令结果:
DRIVER VOLUME NAME
local juming-nginx
# 通过 -v 卷名:容器内路径
# 查看一下这个卷
# 2.具名挂载宿主机目录:/var/lib/docker/volumes/卷名或id/_data下
方式四:dockerfile实现目录挂载
Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
# 1.创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 2.文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
#这里的每个命令,就是镜像的一层!
注意这里的是匿名挂载
创建并启动dockerfile
启动镜像
注意
1.所有的docker容器内的卷,没有指定目录挂在的情况下都是在宿主机目录:
/var/lib/docker/volumes/卷名或id/_data下
2.如果是目录挂载,docker volume ls 是查看不到的
3.# 通过 -v 容器内路径: ro rw 改变读写权限
ro #readonly 只读
rw #readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
方式五:容器之间目录挂载
容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!
#1.命令
--volumes-from 容器名或id
#2.实例
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
# 这个时候,可以实现两个容器数据同步!
#3.实例
docker run -it --name dc01 zzyy/centos
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
docker run -it --name dc03 --volumes-from dc01 zzyy/centos