什么是容器数据卷
容器之间可以有一个数据共享的技术,Docker 容器产生的数据同步到本地。
这就是卷技术,目录挂载,将我们容器内的目录,挂在到本地主机!
一句话总结:容器的持久化和同步操作,容器之间数据共享。
使用数据卷
方法一 : 直接使用命令来挂载 docker run -v
# 命令docker run -v 本地目录:容器目录e.g.docker run -dit -v /home/test:/home centos /bin/bash# 查看容器挂在信息docker inspect 0751e20f445d

容器内目录和本地目录任意一个目录操作两边都是同步的,即使容器停止,只要容器还存在。
好处**:以后想要修改容器内数据,只需要对本地挂载目录进行操作即可,容器内会自动同步。**
mysql实例
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 mysql# 参数解释-d 后台运行容器-p 端口映射-v 卷挂载-e 环境配置# 删除mysql容器,挂载在本地的文件依然存在[root@Box data]# docker rm -f 8e408f72886a8e408f72886a[root@Box data]# lsauto.cnf ca.pem ib_buffer_pool #innodb_temp public_key.pem undo_001binlog.000001 client-cert.pem ibdata1 mysql server-cert.pem undo_002binlog.000002 client-key.pem ib_logfile0 mysql.ibd server-key.pembinlog.index #ib_16384_0.dblwr ib_logfile1 performance_schema sysca-key.pem #ib_16384_1.dblwr ibtmp1 private_key.pem test[root@Box data]# cd ..[root@Box mysql]# lsconf data[root@Box mysql]#
数据卷的挂载方式
具名挂载和匿名挂载
# 匿名卷挂载-v 容器内目录[root@Box ~]# docker run -d -p 80:80 --name nginx01 -v /etc/nginx nginx# 列出所有卷信息[root@Box ~]# docker volume lsDRIVER VOLUME NAMElocal 01ed6a7102f1c53ae0449eaf8de9079871c0009ca72d095a7c67967477d64cb7# 具名挂载-v 卷名:容器目录[root@Box ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx# 查看具名卷信息[root@Box ~]# docker volume inspect juming-nginx# 具名
数据卷-Dokerfile
什么是dockerfile
Dokerfile就是用来构建docker镜像文件的命令脚本。
通过这个脚本可以生成镜像,镜像是一层层的,脚本每一个命令都是一层。
# 创建一个dockerfile文件,名字随意,建议使用dockerfile# 文件中内容(指令大写) 参数# dockerfile 文件内容FROM centosVOLUME ["volume01","volume02"] # 匿名挂载,会挂在两个目录在本地CMD echo "------end------"CMD /bin/bash# 脚本每一个命令都是一层
数据卷容器
# 创建centos01容器docker run --name centos01 -dit box/centos:1.0 /bin/bash# centos01 数据卷容器或者父容器docker run --name centos02 -dit --volumes-from centos01 box/centos:1.0 /bin/bash--volumes-from #指定一个数据卷容器,实现数据共享
多个MySQL实现数据共享
# 创建一个mysql01父容器docker run -d --name mysql01 -p 3306:3306 -v /etc/mysql/conf.d \-v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql# 创建mysql02容器同步mysql01docker run -d --name mysql02 -p 33060:3306 -v etc/mysql/conf.d \-v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --volumes-from msyql01 mysql
结论:容器之间配置信息的传递,数据卷容器的生命周期可以持续到没有容器为止。
