Docker容器数据卷


提示:以下是本篇文章正文内容,Docker 系列学习将会持续更新

一、数据卷概念

思考
  • Docker 容器删除后,在容器中产生的数据也会随之销毁?(会)
  • Docker 容器和外部机器可以直接交换文件吗?(不可以)
  • 容器之间想要进行数据交互?
在这里插入图片描述
数据卷
  • 数据卷是宿主机中的一个目录或文件。
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步。
  • 一个数据卷可以被多个容器同时挂载。
  • 一个容器也可以被挂载多个数据卷。

在这里插入图片描述

数据卷作用
  • 容器数据持久化。
  • 外部机器和容器间接通信。
  • 容器之间数据交换。

回到目录…

二、配置数据卷

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

docker run ... –v 宿主机目录(文件):容器内目录(文件) ... 

注意事项

  1. 目录必须是绝对路径。
  2. 如果目录不存在,会自动创建。
  3. 可以挂载多个数据卷。

举例1:数据持久化

①创建并运行容器,设置数据卷

docker run -it --name c1 -v /root/docker-data:/root/c1-data centos:7 /bin/bash

②在容器中插入数据,宿主机也同步了数据

[root@c70c7c1de0f8 c1-data]# touch hello.txt

[root@VM-4-12-centos docker-data]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 21 22:16 hello.txt

③在宿主机插入数据,容器也同步了数据

[root@VM-4-12-centos docker-data]# echo wangshaoyu > a.txt

[root@c70c7c1de0f8 c1-data]# ll
total 4
-rw-r--r-- 1 root root 11 Mar 21 14:17 a.txt
-rw-r--r-- 1 root root  0 Mar 21 14:16 hello.txt
[root@c70c7c1de0f8 c1-data]# cat a.txt
wangshaoyu

④删除了 c1 容器,但是宿主机中的数据卷依然存在

[root@c70c7c1de0f8 c1-data]# exit
exit
[root@VM-4-12-centos ~]# docker rm c1
c1
[root@VM-4-12-centos ~]# cd docker-data
[root@VM-4-12-centos docker-data]# ll
total 4
-rw-r--r-- 1 root root 11 Mar 21 22:17 a.txt
-rw-r--r-- 1 root root  0 Mar 21 22:16 hello.txt

⑤创建新的容器,挂载宿主机的数据卷,并且同步了数据

docker run -it --name c2 -v ~/docker-data:/root/c2-data centos:7 /bin/bash

⑥一个容器与宿主机之间挂载多个数据卷

docker run -it --name c3 -v ~/data1:/root/c3-data1 -v ~/data2:/root/c3-data2 centos:7

举例2:容器之间数据交换,多个容器挂载同一个数据卷
在这里插入图片描述
①c1挂载宿主机contain-data数据卷,进行数据插入

docker run -it --name c1 -v ~/contain-data:/root/data centos:7
[root@3579f64270a9 ~]# cd data
[root@3579f64270a9 data]# echo helloworld > hello.txt

②c2挂载宿主机contain-data数据卷,同步了数据

docker run -it --name c2 -v ~/contain-data:/root/data centos:7
[root@a558336365ef ~]# cd data
[root@a558336365ef data]# ll
total 4
-rw-r--r-- 1 root root 11 Mar 21 14:51 hello.txt
[root@a558336365ef data]# cat hello.txt
helloworld

③宿主机也同步了数据

[root@VM-4-12-centos ~]# cd contain-data
[root@VM-4-12-centos contain-data]# ll
total 4
-rw-r--r-- 1 root root 11 Mar 21 22:51 hello.txt
[root@VM-4-12-centos contain-data]# cat hello.txt
helloworld

回到目录…

三、数据卷容器

配置数据卷容器:创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。
在这里插入图片描述
1、创建启动 c3 数据卷容器,使用 –v 参数,设置数据卷

docker run -it --name=c3 -v /volume centos:7 /bin/bash 

2、创建启动 c1 c2 容器,使用 --volumes-from 参数,设置数据卷

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

查看信息docker inspect c1docker inspect c2docker inspect c3,我们会发现它们三个的挂载路径一摸一样。

"Mounts": [
            {
                "Type": "volume",
                "Name": "0862ef2b0d79e01e15259c2d3b6d0baf71019a771e8cf76eb4a83c23b3cd514d",
                "Source": "/var/lib/docker/volumes/0862ef2b0d79e01e15259c2d3b6d0baf71019a771e8cf76eb4a83c23b3cd514d/_data",
                "Destination": "/volume",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

此时

  1. 宿主机、c1容器、c2容器、c3容器 之间互相可以同步数据。
  2. 当 c3 数据卷容器停止运行,或被删除,也不影响其它容器之间的数据交换。

回到目录…


总结:
提示:这里对文章进行总结:
本文是对Docker的学习,认识了数据卷,学会了配置数据卷实现数据持久化、容器与客户端和其它容器之间的数据交换,并且又学会了配置数据卷容器。之后的学习内容将持续更新!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只咸鱼。。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值