前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker之快速搞定容器数据卷

Docker之快速搞定容器数据卷

作者头像
用户4919348
发布2019-12-30 18:23:48
7100
发布2019-12-30 18:23:48
举报
文章被收录于专栏:波波烤鸭波波烤鸭

  前面我们介绍了镜像容器,通过镜像我们可以启动多个容器,但是我们发现当我们的容器停止获取删除后,我们在容器中的应用的一些数据也丢失了,这时为了解决容器的数据持久化,我们需要通过容器数据卷来解决这个问题,本文我们就来介绍下容器数据卷

1.是什么

  Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。简单来说,容器卷就相当于Redis中持久化方式的RDB和AOF。

2.解决了什么问题

  卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:   卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

持久化,容器间继承和共享数据

3.数据卷

  首先我们来看看数据卷的使用方式

3.1 直接命令添加

3.1.1 挂载数据卷

添加的命令

代码语言:javascript
复制
docker run -it -v /宿主机绝对路径:/容器内目录 镜像名
在这里插入图片描述
在这里插入图片描述

我们发现执行了该命令后,在宿主机中会添加mydatavolume文件夹,同时在容器中的根目录中也有了datavolumecontainer文件夹。

在这里插入图片描述
在这里插入图片描述

这表示数据卷挂载成功了。同时我们也可以通过前面介绍的 docker inspect 容器名称ID来查看容器的 json数据

在这里插入图片描述
在这里插入图片描述

3.1.2 数据共享操作

  数据卷挂载成功后,我们来看看容器和宿主机之间的数据共享,我们先在宿主机的mydatavolume目录中创建一个文件。然后到容器的datavolumecontainer目录中查看是否有相同的文件,然后我们再反过来测试。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后我们发现在容器中也有了相同的文件,而且内容也一致。反过来

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这就说明容器和宿主机中的数据实现了数据共享

3.3.3 容器停止数据共享

  接下来我们把容器停止掉,然后在宿主机中更新数据,然后启动容器我们看看数据是否还能同步。

在这里插入图片描述
在这里插入图片描述

更新宿主机中的数据

在这里插入图片描述
在这里插入图片描述

启动原来的容器查看。

在这里插入图片描述
在这里插入图片描述

3.3.4 权限管理

  前面我们介绍的共享的权限是在容器中具有读写的权限。通过docker inspect 容器ID 我们也可以看到

在这里插入图片描述
在这里插入图片描述

我们可以修改该权限

代码语言:javascript
复制
docker run -it -v /宿主机绝对路径:/容器内目录:ro 镜像名
在这里插入图片描述
在这里插入图片描述

查看状态

在这里插入图片描述
在这里插入图片描述

宿主机添加文件

在这里插入图片描述
在这里插入图片描述

容器中查看

在这里插入图片描述
在这里插入图片描述

创建文件或者修改文件会失败

在这里插入图片描述
在这里插入图片描述

3.2 DockerFile添加

  DockerFile下篇文章我们会专门来介绍,此处我们先来使用看看效果。

3.2.1 mydocker文件夹

  在根目录下创建mydocker文件夹

在这里插入图片描述
在这里插入图片描述

3.2.2 VOLUM指令

代码语言:javascript
复制
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

说明: 出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

3.2.3 File构建

  构建File文件

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
# volume test

FROM centos

VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]

CMD echo "finished,--------success1"

CMD /bin/bash

3.2.4 build新镜像

代码语言:javascript
复制
docker build -f /mydocker/dockerfile1 -t bobokaoya/centos .
在这里插入图片描述
在这里插入图片描述

3.2.5 run一个新容器

  根据上面新创建的镜像我们来run一个新容器

在这里插入图片描述
在这里插入图片描述

那么如此一来,对应的宿主机的映射地址在哪呢?docker inspect 容器ID来查看

在这里插入图片描述
在这里插入图片描述

容器的 共享目录中创建 文件。

在这里插入图片描述
在这里插入图片描述

去宿主中的映射目录中查看

在这里插入图片描述
在这里插入图片描述

搞定~ 注意

Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied 解决办法:在挂载目录后多加一个–privileged=true参数即可

4.数据卷容器

  命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器,我们在前面的案例基础上来介绍

4.1 启动一个父容器

代码语言:javascript
复制
docker run -it --name dc01 bobokaoya/centos
在这里插入图片描述
在这里插入图片描述

然后在共享目录中创建文件

在这里插入图片描述
在这里插入图片描述

4.2 创建两个子容器

创建dc02

代码语言:javascript
复制
docker run -it --name dc02 --volumes-from dc01 bobokaoya/centos
在这里插入图片描述
在这里插入图片描述

同时在dc02中修改了文件 我们在创建dc03容器,同时继承dc01

代码语言:javascript
复制
docker run -it --name dc03 --volumes-from dc01 bobokaoya/centos
在这里插入图片描述
在这里插入图片描述

我们发现dc03中也看到dc02修改的数据,说明共享是成功的。

4.3 删除dc01,查看dc02和dc03是否共享

  我们停掉dc01并删除,dc02和dc03之间的数据还是共享的

在这里插入图片描述
在这里插入图片描述

dc02修改,然后查看dc03

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.是什么
  • 2.解决了什么问题
  • 3.数据卷
    • 3.1 直接命令添加
      • 3.1.1 挂载数据卷
      • 3.1.2 数据共享操作
      • 3.3.3 容器停止数据共享
      • 3.3.4 权限管理
    • 3.2 DockerFile添加
      • 3.2.1 mydocker文件夹
      • 3.2.2 VOLUM指令
      • 3.2.3 File构建
      • 3.2.4 build新镜像
      • 3.2.5 run一个新容器
  • 4.数据卷容器
    • 4.1 启动一个父容器
      • 4.2 创建两个子容器
        • 4.3 删除dc01,查看dc02和dc03是否共享
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档