031、Docker容器数据卷
本文最后更新于 260 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

Docker容器数据卷

1. 什么是 Docker 容器数据卷

需求:

  • Docker 可以将运行的环境打包形成容器运行,但是我们对 Docker 容器的数据的要求希望是持久化的
  • 容器之间希望共享数据

Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。

为了能保存数据在docker中我们使用数据卷。

类似 Redis里面的rdb和aof文件或者我们平时使用的移动硬盘

2. 数据卷的用处

数据卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

数据卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

特点:

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

3. 数据卷使用

一. 直接通过命令添加数据卷

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

验证数据卷是否挂载成功

宿主机和容器之间的数据交互

同理, 容器可以对数据进行修改并同步到宿主机

容器停止退出后,主机修改后数据是否同步

通过 exit 命令停止容器并退出终端

然后在宿主机对数据进行修改

重新开启容器

可以发现,即便是容器关闭,宿主机依然可以对数据卷进行数据操作,当容器重新开启时,数据卷会自动进行同步

如果想要设置权限,例如容器只能对数据卷进行读和同步,宿主机可以操作数据卷,那么只需要添加一个参数即可

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

ro 就表示 read-only 权限(针对容器)

二. DockerFile添加数据卷

DockerFile 简单来说,就是描述 Docker 镜像的描述文件

流程简单梳理如下

  1. 宿主机新建一个 DockerFile

    可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷

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

  2. build 构建镜像

  3. 根据镜像运行容器

  4. 测试数据卷

    根据 inspect 命令查看对应的宿主机数据卷目录

    默认宿主机挂载地址需要通过 inspect 命令查看

三. 数据卷容器

主要用于容器和容器之间的数据共享

命令: --volumes-from

示例如下:

  1. 启动一个父容器

    启动后我们在指定目录下创建一个文件

  2. 新建两个子容器,继承自父容器

    可以发现成功同步了父容器的数据

    同时修改任意一个子容器的数据卷数据,都会同步到其他容器

    即便是删除任意一个容器,数据卷的数据同步不会停止

  3. 结论

    容器之间共享数据的传递,数据卷的生命周期一直持续到没有容器使用它为止

谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇