docker容器间数据共享

对于在容器中运行的应用程序来说,容器就像是沙盒。这主要是为了保护在不同容器中运行的应用程序互不干扰。这也意味着,在容器内运行的应用程序所能看到的整个文件系统对该应用程序来说都是私有的,在不同容器中运行的其他应用程序无法对其进行干扰。

但有时,我们希望在容器之间共享数据。假设在容器 A 中运行的应用程序产生了一些数据,而在容器 B 中运行的另一个应用程序将消耗这些数据,可以使用 Docker 卷来实现这一目的。我们可以创建一个卷,并将其挂载到容器 A 和容器 B。

需要注意的是,当多个应用程序或进程同时访问数据时,我们必须非常小心,以避免出现不一致。为避免出现竞争引发的并发问题,我们最好只让一个应用程序或进程创建或修改数据,而所有其他并发访问这些数据的进程只读取数据。

我们可以通过将卷挂载为只读来强制容器中运行的进程只能读取卷中的数据。我们可以这样做。

创建容器writer
docker container run -it --name writer \
    -v shared-data:/data \
    .alpine /bin/sh

在这里,我们创建了一个名为 writer 的容器,它有一个以默认读/写模式挂载的共享数据卷。

容器内创建文件
# / echo "I can create a file" > /data/sample.txt
退出writer容器

按 Ctrl + D 或键入exit 然后在提示符下按 Enter 键

创建容器reader
docker container run -it --name reader \
-v shared-data:/app/data:ro \
ubuntu:22.04 /bin/bash

这里我们有一个名为 reader 的容器,它将使用同一个卷挂载并设置为read-only (ro)

检查文件

确保可以看到在第一个容器writer中创建的文件

ls -l /app/data

这样就可以得到类似的结果:

reader容器中创建文件

 

失败并会显示如下信息: 

这在意料之中,因为挂载卷已设置为只读。说明reader只能读取数据,不能修改和创建

     经过以上步骤,我们可以实现两个容器间的数据共享,如果是更多容器的话,其设置方式也是一样的,需要注意的时,对于只读的容器,我们在挂载卷的时候设置为read-only便可以了,还是很简单的。

以上步骤测试完之后,为了释放docker所占用的资源,可以清理掉测试使用的容器和卷

docker container rm writer reader

docker volume rm -f shared-data

    以上步骤,并没有解释每个docker命令的含义,是比较基础的操作,如果您对以上的命令不太熟悉,可以参考我的docker课程,有对各类命令的详细讲解:Docker 实战_在线视频教程-CSDN程序员研修院

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

面朝大海,春不暖,花不开

您的鼓励是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值