一篇搞定Docker数据卷及其配置

编程入门 行业动态 更新时间:2024-10-21 09:43:01

一篇搞定Docker<a href=https://www.elefans.com/category/jswz/34/1771445.html style=数据卷及其配置"/>

一篇搞定Docker数据卷及其配置

前言:
😄作者简介:小曾同学,小伙伴们也可以叫我小曾,一个致力于测试开发的博主⛽️
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊
座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

文章目录

  • 1 写在前面
  • 2 数据卷的概念
  • 3 数据卷的作用
  • 4 如何配置数据卷
    • 4.1 配置单个数据卷
    • 4.2 配置多个数据卷
    • 4.3 多个容器挂载同一个数据卷
    • 4.4 容器的数据卷
      • 4.4.1 数据卷容器概念
      • 4.4.2 如何配置数据卷容器
    • 4.5 读写规则映射添加说明
  • 5 总结

1 写在前面

前段时间给小伙伴们分享了 Docker 相关理论介绍及基本命令的详解,今天主要想给大家分享 Docker 数据卷及其配置。
在开始分享之前先抛出三个小问题:

  1. Docker 容器删除后,在容器中产生的数据还在吗?

  2. Docker 容器外部机器可以直接交换文件吗?

  3. 容器之间怎么进行数据交互

以上的三个问题都可以使用数据卷来解决,那什么是数据卷呢,接下来正式开启本篇内容。

2 数据卷的概念

数据卷是宿主机中的一个目录或文件。就是将容器内的目录和宿主机中的目录进行挂载,其中宿主机中的目录就被称为数据卷。

3 数据卷的作用

我们知道了数据卷是宿主机上的一个目录或者文件,那么这个目录或者文件可以做什么呢?可以概括为三点:

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间可数据交换

当容器目录和数据卷目录绑定后,任意一方的修改都会立即同步,也就是说,当容器目录中的内容发生变化时,数据卷目录也会跟着变化;当数据卷目录中的内容发生变化时,容器内目录也会发生变化。

当然,一个数据卷可以被多个容器同事挂载;一个容器也可以被挂载多个数据卷.

4 如何配置数据卷

4.1 配置单个数据卷

创建启动容器时,使用 -v 参数设置数据卷

docker run -it -v /宿主机目录绝对路径:/容器内目录路径 --name="xx" 镜像名  —privileged=true

注意事项:

1)目录必须是绝对路径

2)如果目录不存在,会自动创建

3)一个容器可以挂载多个数据卷(一个“-v”挂载一个数据卷)

4)如果出现 cannot open directory:permission denied 时,需要多加一个 —privileged=true参数即可(有些系统里面可能会认为挂载目录时不安全的所以就被禁止了,而加入参数后会将这一限制打开)

案例如下

第一步,创建启动容器

docker run -it --privileged=true -v /Users/xxxxx/host_data:/tmp/docker_data --name=test1 13b66b487594
## /Users/xxxxx/host_data 表示宿主机绝对路径
## /tmp/docker_data 容器目录路径

第二步,确定容器是否开启成功

docker ps

第三步,查看数据卷是否挂在成功,输入如下命令

docker inspect 容器名
找到Mounts(表示挂载)信息,其中
type:bind  表示绑定型的
Source      表示宿主机路径
destination    表示容器内路径


上述过程就可以实现容器和宿主机之间数据共享啦。

  1. 当在容器目录内输入一些内容时,数据卷(宿主机目录)中的内容也会随即更新;当更新数据卷中的内容时,容器目录中的内容也会随即更新;这种方式也叫做映射。将容器目录映射到宿主机。
  2. 当容器被停止时,在宿主机中修改文件,当再进去容器时,文件也同样被修改。

4.2 配置多个数据卷

为一个容器配置多个数据卷

docker run -it -v /宿主机目录绝对路径1:/容器内目录路径1 -v /宿主机目录绝对路径2:/容器内目录路径2 -v /宿主机目录绝对路径3:/容器内目录路径3 -name="xx" 镜像名  —privileged=true

4.3 多个容器挂载同一个数据卷

执行命令

docker run -it -v /宿主机目录绝对路径:/容器内目录路径 --name="xx" 镜像名  —privileged=true
或者
docker run -it -v /宿主机目录绝对路径:/容器内目录路径 --name="xx" 镜像名 —privileged=true

案例详解

docker run -it -v /User/xxx/data:/data --name="demo1" ubuntu:14.04 —privileged=truedocker run -it -v /User/xxx/data:/data --name="demo2" ubuntu:14.04 —privileged=true详细说明:当在容器demo1中更新目录内容时,数据卷 /User/xxx/data和 容器demo2中的内容会同步更新。

4.4 容器的数据卷

多容器间进行数据交换,有两种方式:

  • 多个容器挂载同一个数据卷(缺点:操作比较麻烦,因为当容器过多时,需要一个个的挂载)
  • 数据卷容器

相比,数据卷容器方式更胜一筹,同时数据卷容器也体现了数据卷的继承关系。

4.4.1 数据卷容器概念

见名知意,容器的数据卷,也可以称为数据卷容器或者容器卷,表示这个容器是用来共享数据的。

可以看下图,

  1. 在 c3 容器挂载了一个数据卷,
  2. c1 和 c2 容器再分别挂载到 c3 容器上,
  3. 这样 c1 和 c2 容器相当于挂载到了数据卷上,这样的话 c1、c2 c3 可以相互通信,即使 c3 挂了,c1 和 c2 也可以通过数据卷进行通信。

4.4.2 如何配置数据卷容器

第一步,创建启动 c3 数据卷容器,使用-v 参数设置数据卷

docker run -it -v /容器目录 —name="c3" 镜像名 /bin/bash
## /容器目录 表示当没有指定宿主机目录时,docker会自动分配

第二步,数据卷继承

docker run -it --name="c1" --volumes-from c3 镜像名
docker run -it --name="c2" --volumes-from c3 镜像名

案例详解

第一步,创建启动c3容器

docker run -it -v /volumes —name="c3" ubuntu:14.04 /bin/bash

进入c3 容器后,可看到有新增目录 volumes

此时再新建命令窗口输入命令

docker inspect 3d065763c8af

查看宿主机目录路径(数据卷路径)

第二步,分别创建启动 c1 和 c2 容器

docker run -it --name="c1" --volumes-from c3 ubuntu:14.04docker run -it --name="c2" --volumes-from c3 ubuntu:14.04##进入容器后,均会发现容器内有新增 volumes 目录,此时也可以输入命令 docker inspect c1,查看容器挂载信息


上述步骤即可实现容器间数据交换,当容器 c3 挂掉时,c1 和 c2 依然可正常数据交换。

4.5 读写规则映射添加说明

docker run -it -v /宿主机目录绝对路径:/容器内目录路径 --name="xx" 镜像名  —privileged=true
或者
docker run -it -v /宿主机目录绝对路径:/容器内目录路径:rw --name="xx" 镜像名  —privileged=true

当未添加 rw 参数时,默认数据卷是有可读可写权限。
如果给数据卷只读权限,则使用如下命令:

docker run -it -v /宿主机目录绝对路径:/容器内目录路径:ro --name="xx" 镜像名  —privileged=true

5 总结

数据卷是宿主机中的一个目录或文件。数据卷可使容器数据持久化;保持外部数据和容器间接通信;容器之间可数据交换;卷中的更改可以直接实时生效;数据卷中的更改不会包含在镜像的更新中;数据卷的生命周期一直持续到没有容器使用它为止;如果大家通过本篇文章了解了数据卷以及数据卷的配置,这将是本篇文章分享的意义。

如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

更多推荐

一篇搞定Docker数据卷及其配置

本文发布于:2024-03-07 02:24:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1716588.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据   Docker

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!