1、什么是容器数据卷?

docker的理念回顾

  • 应用环境打包成一个镜像!

    • 如果数据都在容器中,那么容器删除,数据就会丢失!需求:数据可以持久化。如:MySQL,容器删除了,MySQL数据可以存储在本地!
  • 容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术!目录的挂载,将容器内的目录,挂载到Linux上面!

卷的作用

  • 容器数据的持久化和同步操作!
  • 容器间数据共享!

2、使用数据卷

方式一 :直接使用命令挂载 -v 宿主机目录:容器内目录

-v, --volume list                    Bind mount a volumedocker run -it -v 主机目录:容器内目录  -p 主机端口:容器内端口# 把容器内的home目录,挂载(映射)到宿主机的/home/test目录
docker run -it -v /home/test:/home centos /bin/bash

  • 查看挂载情况
# 该命令在宿主机环境下;容器内没有这个命令
docker inspect 容器id

测试

  • 容器中修改文件,宿主机下查看

  • 宿主机中修改文件,容器下查看

  • 删除容器,查看宿主机下文件

3、测试安装 MySql

目的:需要将 MySql 中的配置信息和数据文件,同步到容器外部;如果 MySql 容器被删除时,数据依然存在

  • 搜索下载 mysql
# 搜索 mysql
docker search mysql# 下载 mysql 镜像;此处仅为测试;建议下载5.7,高版本mysql会有密码的加密规则
docker pull mysql:5.7

  • 启动 mysql

    • 数据挂载:-v 宿主机目录:mysql容器内文件或目录,可以有多个挂载 -v
    • 配置密码:-e MYSQL_ROOT_PASSWORD=密码
# 运行容器
# 需要做数据挂载
# 安装启动 mysql,需要配置密码
# 参考官网hub
# docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag# 启动
# -d 后台运行
# -p 端口映射
# -v 卷挂载
# -e 环境配置
# -- name 容器名字
docker run -d -p 3310: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

  • 查看挂载目录

  • 外部连接测试

    在虚拟机之外用 Navicat 连接

  • 删除 MySql 容器,查看挂载点数据

4、具名挂载和匿名挂载

1)匿名挂载

# 匿名挂载:不推荐
# -v 只有容器内路径!不指定宿主机目录;会生成随机的宿主机挂载目录
docker run -d -P --name 容器名称 -v 容器内路径# 查看所有的 volume 的情况
docker volume ls

2)具名挂载

# 具名挂载:推荐
# 指明挂载点的文件名(卷名),不是路径
docker run -d -P --name nginx02 -v nginx02:/etc/nginx nginx

  • 查看特定的卷
docker volume inspect 卷名

所有的 docker 容器内的卷,没有指定目录的情况下都是在宿主机/var/lib/docker/volumes/xxxx/_data下,如果指定了目录,docker volume ls 是查看不到的

3)三种挂载区分

区别 挂载命令 查看特定的卷 卷名 卷在宿主机中位置
匿名 -v 只指定容器内路径 docker volume inspect 卷名 随机 /var/lib/docker/volumes/xxxx/_data
具名
[推荐]
-v 卷名:容器内路径 docker volume inspect 卷名 指定 /var/lib/docker/volumes/xxxx/_data
指定路径 -v 宿主机指定路径:容器内路径 - - 按指定路径

4)读写权限

在容器内路径后面加 :ro:rw

  • ro readonly 只读;容器内无法修改,只能在宿主机的挂载点操作
  • rw readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx

5、初识DockerFile

方式二:使用DockerFile生成卷挂载

  • DockerFile 就是用来构建docker镜像的构建文件!
  • 这种方式使用的十分多,因为项目开发后会构建自己的镜像!
  • 通过脚本生成镜像
# 创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 文件中的内容 指令(大写) 参数
FROM centosVOLUME ["volume01","volume02"]CMD echo "----end----"
CMD /bin/bash
#这里的每个命令,就是镜像的一层!

  • 生成镜像
# -f : file缩写;指的是dockerfile文件路径,下面例子为dockerfile1文件的所在目录下
# -t : target缩写;指的是生成镜像的名称,不是路径,前面不要加 /
# .  : 生成在当前目录下
docker build -f dockerfile1 -t tuwer/centos .

  • 启动镜像
docker run -it tuwer/centos /bin/bash

  • 查看卷挂载

  • 同步测试

6、数据卷容器

不同容器间的挂载,可以实现数据同步

--volumes-from 被挂载容器

  • 启动被挂载容器
# 指定容器名称为 centos01
docker run -it --name centos01 tuwer/centos

  • 启动挂载容器
# 指定容器名称为 centos02
# --volumes-from centos01 挂载到容器 centos01 上
docker run -it --name centos02 --volumes-from centos01 tuwer/centos

  • 测试容器间数据同步

    • 在容器centos01下,进入volume01挂载目录,创建文件 test.txt
    • 在容器centos02下,进入对应的挂载目录volume01查看,发现目录内也有 test.txt,文件实现了同步

  • 启动第三个容器,挂载第二个容器

  • 容器3中创建文件,容器1和容器2中查看

  • 删除容器1,查看容器2和容器3

结论:

  • 容器间挂载后,数据的传递,不是简单的共享(不像windows中的快捷方式),而是复制(备份),有多少个挂载容器,就会存在多少份数据,当一个容器中的挂载数据变化后,会同步到其它容器;当删除任意一个容器后,其它容器中的数据不受影响;所以数据卷容器的生命周期一直持续到没有容器使用为止,只要有一个挂载容器存在,数据就不会丢失。
  • 如果数据挂载到外部宿主机,那么即使所有容器删除,宿主机中的对应数据也是不会删除的!

【Docker】7、数据卷详解:具名挂载、匿名挂载、初识DockerFile、数据卷容器相关推荐

  1. android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递

    在上一次讲述Activity的时候,还有一个非常重要且常用的知识点没有讲,就是不同Activity之间的跳转和数据传递.我们在平常在使用app应用的时候,Activity的跳转和数据传递是经常会接触到 ...

  2. Oracle数据泵详解

    Oracle数据泵详解    Oracle Database 10g中采用了数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中 ...

  3. Docker容器数据卷详解

    文章目录 1. 数据卷介绍 2. 简单使用 3. MySQL容器建立数据卷同步数据 4. 常用命令 5. 具名挂载和匿名挂载 5.1 匿名挂载 5.2 具名挂载 6. Dockerfile中设置数据卷 ...

  4. Docker的基础知识详解(镜像,容器,网络)

    文章目录 Docker 一. Docker的概述 1. Docker为什么会出现 2. Docker能干什么 3. Docker的组成 4. Docker的运行流程 5. Docker的底层原理 二. ...

  5. kubernetes系列10—存储卷详解

    kubernetes系列10-存储卷详解 1.认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kub ...

  6. Docker(十四):Docker:网络模式详解

    Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...

  7. Docker:网络模式详解

    http://www.cnblogs.com/zuxing/articles/8780661.html Docker:网络模式详解 袖珍指南 Docker作为目前最火的轻量级容器技术,牛逼的功能,如D ...

  8. Docker持续部署图文详解

    2019独角兽企业重金招聘Python工程师标准>>> Docker持续部署图文详解 博客分类: docker 架构 JAVA项目如何通过Docker实现持续部署(只需简单四步),即 ...

  9. 基于Kubernetes构建Docker集群管理详解

    from: 基于Kubernetes构建Docker集群管理详解 Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动 ...

最新文章

  1. 【通俗理解】差模电压和共模电压
  2. 【MyBatis使用】mapper.xml 文件内<if test>标签判断参数值不等于null和空 当参数值为 0 时筛选条件失效原因分析(源码探究)
  3. webdriverAPI-Java
  4. Spring boot (1)--- 第一个应用程序helloworld
  5. 为什么要远程连接Linux
  6. Centos7下Yum安装PHP5.5,5.6,7.0
  7. 敏友的【敏捷个人】有感(6): 我的改变从执行力分享开始
  8. 没有计算机基础可以学python-Python的学习,都需要具备哪些计算机基础知识?
  9. 斯坦福大学CS143编译原理课程笔记:2.编译器结构
  10. 如何用C语言编写字母游戏,怎么样用C语言编写一个小游戏?
  11. 及时搜索工具下载地址 listary
  12. 清华女硕士代言西湖名胜六和塔(组图),张姣怡,杭州西湖六和塔
  13. 如何调出手机信任计算机的指令,如何取消信任iPhone或iPad上的计算机 | MOS86
  14. 深度学习——DRD-Net
  15. BOF——Bag-of-Featrures
  16. 黎曼猜想(一) 欧拉乘积式
  17. NRF52832学习笔记(19)——TWI(I2C)接口使用
  18. 2011年国外最受欢迎的15个儿童网站
  19. 荒野行动服务器维护什么时候好,荒野行动12月21日服务器维护到几点 12月21日具体开服时间公告...
  20. php开源堡垒机,Jumpserver开源跳板机(堡垒机)

热门文章

  1. 高效提升效率的办公软件,快来get吧
  2. 智云通CRM:销售的黄金法则,尊重客户的意见
  3. 当前电子鼻系统数据处理中常用的模式识别技术
  4. matlab 局部放大
  5. screen 状态为Attached
  6. P315 GCD等于XOR UVa12176 “不难发现”的解释 以及完整推导过程
  7. TCP/IP参考模型-传输层TCP
  8. 《算法图解》——第五章 散列表(服务器大姨妈来了?第四第五内容传不上去= =!)
  9. 退出mysql命令_进入mysql命令行之后,怎么退出
  10. 第三方支付系统如何测试?案例分析