容器数据卷：将应用和环境打包成一个镜像目的：将容器中的目录，挂在的Linux本地（容器的持久化和同步操作、容器间数据共享）方式一：直接使用 -v 命令挂载docker run -it -v 主机目录:容器内目录 # 测试 [root@suaxi ~]# docker run -it -v /home/test:/home centos /bin/bash 从容器同步到主机：从主机同步到容器：（在容器停止后，主机修改了绑定路径下的文件，容器再次启动后，双向绑定依然生效）1.安装MySQl# 拉取镜像 [root@suaxi ~]# docker pull mysql # 官方文档命令 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # 启动（注意：docker启动mysql需使用-e命令配置密码） -d 后台运行 -p 端口映射 -v 数据卷挂载 -e 环境配置 --name 给容器起个别名 [root@suaxi ~]# docker run -d -p 8088:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql # 后续再使用navicat等工具连接docker中的mysql实际测试一下配置是否生效删除容器之后，同步到本地的数据依然存在，即实现数据的持久化。2.具名挂载、匿名挂载# 匿名挂载 -v 容器内的路径 -P 大写的P，随机映射端口 [root@suaxi ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx # 具名挂载 -v 卷名:容器内路径 [root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx # 查看刚才挂载的卷 [root@suaxi ~]# docker volume inspect juming-nginx 所有docker容器内的卷，在没有指定目录的情况下都在 /var/lib/docker/volumes/xxx/通过具名挂载，可以方便的找到挂载的卷及相关数据、信息# 区分匿名/具名挂载、指定路径挂载 -v 容器内路径 # 匿名挂载 -v 卷名:容器内路径 # 具名挂载 -v /主机路径:容器内路径 # 指定路径挂载# 通过 -v 容器内路径:ro/rw 改变读写权限 ro read only # 只读 rw read/write # 可读可写 [root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx [root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx # ro 只能通过主机来操作，容器内只具有读的权限方式二：Dockerfile通过脚本生成镜像# 1.创建dockerfile文件 # 2.编写脚本，命令（都是大写）参数 FROM centos VOLUME ["volume01","volume02"] CMD echo "----create complete----" CMD /bin/bash启动并进入容器：脚本命令中挂载的目录是匿名挂载：测试挂载目录下的双向绑定是否成功:1.数据卷容器多个mysql同步数据图片来源：狂神说Java# 通过刚才的脚本依次启动3个容器 [root@suaxi docker-test-volume]# docker run -it --name docker01 b0bf8a6507a3 [root@suaxi docker-test-volume]# docker run -it --name docker02 --volumes-from docker01 b0bf8a6507a3 [root@suaxi docker-test-volume]# docker run -it --name docker03 --volumes-from docker01 b0bf8a6507a3 通过volumes实现容器间的数据共享注：即使删除父容器docker01，其他容器中的数据依然存在# 实现多个mysql间的数据同步 [root@suaxi ~]# docker run -d -p 8088:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql [root@suaxi ~]# docker run -d -p 8088:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql结论：容器之间配置信息的传递，数据卷容器的生命周期一直持续到没有容器使用为止。