什么是容器数据卷

容器之间可以有一个数据共享的技术,Docker 容器产生的数据同步到本地。
这就是卷技术,目录挂载,将我们容器内的目录,挂在到本地主机!
一句话总结:容器的持久化和同步操作,容器之间数据共享。

使用数据卷

方法一 : 直接使用命令来挂载 docker run -v

  1. # 命令
  2. docker run -v 本地目录:容器目录
  3. e.g.
  4. docker run -dit -v /home/test:/home centos /bin/bash
  5. # 查看容器挂在信息
  6. docker inspect 0751e20f445d

图片.png
容器内目录和本地目录任意一个目录操作两边都是同步的,即使容器停止,只要容器还存在。
好处**:以后想要修改容器内数据,只需要对本地挂载目录进行操作即可,容器内会自动同步。**

mysql实例

  1. docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d \
  2. -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
  3. # 参数解释
  4. -d 后台运行容器
  5. -p 端口映射
  6. -v 卷挂载
  7. -e 环境配置
  8. # 删除mysql容器,挂载在本地的文件依然存在
  9. [root@Box data]# docker rm -f 8e408f72886a
  10. 8e408f72886a
  11. [root@Box data]# ls
  12. auto.cnf ca.pem ib_buffer_pool #innodb_temp public_key.pem undo_001
  13. binlog.000001 client-cert.pem ibdata1 mysql server-cert.pem undo_002
  14. binlog.000002 client-key.pem ib_logfile0 mysql.ibd server-key.pem
  15. binlog.index #ib_16384_0.dblwr ib_logfile1 performance_schema sys
  16. ca-key.pem #ib_16384_1.dblwr ibtmp1 private_key.pem test
  17. [root@Box data]# cd ..
  18. [root@Box mysql]# ls
  19. conf data
  20. [root@Box mysql]#

数据卷的挂载方式

具名挂载和匿名挂载

  1. # 匿名卷挂载
  2. -v 容器内目录
  3. [root@Box ~]# docker run -d -p 80:80 --name nginx01 -v /etc/nginx nginx
  4. # 列出所有卷信息
  5. [root@Box ~]# docker volume ls
  6. DRIVER VOLUME NAME
  7. local 01ed6a7102f1c53ae0449eaf8de9079871c0009ca72d095a7c67967477d64cb7
  8. # 具名挂载
  9. -v 卷名:容器目录
  10. [root@Box ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
  11. # 查看具名卷信息
  12. [root@Box ~]# docker volume inspect juming-nginx
  13. # 具名

数据卷-Dokerfile

什么是dockerfile
Dokerfile就是用来构建docker镜像文件的命令脚本。
通过这个脚本可以生成镜像,镜像是一层层的,脚本每一个命令都是一层。

  1. # 创建一个dockerfile文件,名字随意,建议使用dockerfile
  2. # 文件中内容(指令大写) 参数
  3. # dockerfile 文件内容
  4. FROM centos
  5. VOLUME ["volume01","volume02"] # 匿名挂载,会挂在两个目录在本地
  6. CMD echo "------end------"
  7. CMD /bin/bash
  8. # 脚本每一个命令都是一层

数据卷容器

  1. # 创建centos01容器
  2. docker run --name centos01 -dit box/centos:1.0 /bin/bash
  3. # centos01 数据卷容器或者父容器
  4. docker run --name centos02 -dit --volumes-from centos01 box/centos:1.0 /bin/bash
  5. --volumes-from #指定一个数据卷容器,实现数据共享

多个MySQL实现数据共享

  1. # 创建一个mysql01父容器
  2. docker run -d --name mysql01 -p 3306:3306 -v /etc/mysql/conf.d \
  3. -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
  4. # 创建mysql02容器同步mysql01
  5. docker run -d --name mysql02 -p 33060:3306 -v etc/mysql/conf.d \
  6. -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --volumes-from msyql01 mysql

结论:容器之间配置信息的传递,数据卷容器的生命周期可以持续到没有容器为止。