Docker的共享数据和数据容器
▶ Docker的共享数据和数据容器
共享数据和数据容器都用到了 -v HOST_DIR:CONTAINER_DIR 这种形式。
▷ Docker的共享数据
共享数据很容易理解就是 容器B 使用的是 容器A 的数据卷。容器B 在启动容器的时候使用 --volumes-from 指定想要关联的卷的容器就能关联到该容器下挂载的数据卷。
如:事先先创建了一个 容器Acontainer,该容器有一个数据卷在容器中是 /data 这个目录
[root@server ~]# docker run -it --name Acontainer -v /data debian /bin/bash
root@3e318f1b6ce0:/# ls -d data
data
root@3e318f1b6ce0:/# echo "the data" > /data/Acontainer.txt
在 Acontainer 这个容器的 /data 目录下写入了一个 Acontainer.txt 文件,内容是 the data。
现在开启一个名为 Bcontainer 的容器,指定启动时候参数时 --volumes-from 后面跟上 Acontainer 这个容器,这样 Bcontainer 就能访问 Acontainer 的数据卷了。
[root@server ~]# docker run -it --name Bcontainer --volumes-from Acontainer debian /bin/bash
root@7a275cf5b8a7:/# ls /data
Acontainer.txt
可以看到有 /data 这个数据卷,里面也有之前写入的 Acontainer.txt 这个文件。
如果此时将 Acontainer 删除,再查看 Bcontainer 容器,此时 /data 和下面的文件也是存在的。
[root@server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a275cf5b8a7 debian "/bin/bash" 6 minutes ago Exited (0) 32 seconds ago Bcontainer
3e318f1b6ce0 debian "/bin/bash" 24 minutes ago Up 15 minutes Acontainer
[root@server ~]# docker start Bcontainer
Bcontainer
[root@server ~]# docker exec -it Bcontainer /bin/bash
root@7a275cf5b8a7:/# ls /data
Acontainer.txt
数据卷在没有被容器关联后会被删除。除非是使用了 -v HOST_DIR:CONTAINER_DIR 这种格式的形式。
▷ Docker的数据容器
数据容器:顾名思义,这种容器的唯一目的就是与其他的容器分享数据。它提供了一个方便的命名空间,使数据卷可以很容易通过 --volumes-from 命令进行加载。
[root@server ~]# docker run --name dbdata postgres echo "Data-only container for postgres"
Data-only container for postgres
[root@server ~]# docker run -d --volumes-from dbdata --name db1 postgres
c3882ecc5aa5a5b826f072b4edc2f7f6c4db9329298863983720189240d61492
通常,创建数据容器没有必要使用像 busybox 或 scratch 这种极小的镜像。你只需使用与数据使用方一样的镜像即可。例如,为 PostgreSQL 数据库创建数据容器的话,只需使用 postgres 镜像来做。
使用相同的镜像不会占用任何额外空间,因为你肯定已经下载或创建了用作数据使用方的镜像。这样做也让镜像有机会为容器建立任何初始数据,并确保权限设置正确。

浙公网安备 33010602011771号