使用单个数据卷容器混淆了多个不同的容器

Joh*_*ell 2 containers docker

我最近一直在研究docker,我继续开始研究数据量容器,以及如何在会话之间保持信息,我很困惑.

在大多数情况下可以使用单个数据卷容器吗?

让我们看一个简单的库/ postgres图像,在它的dockerfile中公开一个卷/ var/lib/postgresql/data假设我在本地映射到/ docker/db_data在一个容器设置中,我明白了/的内容var/lib/postgresql/data可以在我的laptops/docker/db_data文件夹中找到.

但是,如果你想分支出另外一个容器运行Jenkins会发生什么,例如,它将/ var/jenkins_home暴露为一个卷.最初我会将其映射到笔记本电脑上的另一个文件夹,例如/ docker/jenkins_data.

但是,如果我想启用数据卷容器来管理这两个容器,怎么办呢?

让我们说我们想要将两个容器映射到我的笔记本电脑上的目录,/ docker/db_data和/ docker/jenkins_data

或者我做错了,如果我使用2个数据量容器并将其保持简单,它会被认为是最佳做法吗?

une*_*acn 5

让我们看一个简单的库/ postgres图像,在它的dockerfile中公开一个卷/ var/lib/postgresql/data假设我在本地映射到/ docker/db_data在一个容器设置中,我明白了/的内容var/lib/postgresql/data可以在我的laptops/docker/db_data文件夹中找到.

不完全是.您可以将笔记本电脑中的目录安装到容器中-v /docker/db_data:/var/lib/postgressql/data.如果/var/lib/postgressql/data容器中已存在,则将覆盖其内容/docker/db_data.

但是,如果使用-v /var/lib/postgressql/data(安装主机目录),则映像所在的任何文件/var/lib/postgressql/data都将复制到卷中.

您可以使用该docker inspect命令查看卷的数据的实际位置,例如,docker inspect postgressql将显示类似于...的内容

"Volumes": { "/var/lib/postgressql/data": "/var/lib/docker/volumes/[some_guid_like_string]" }

但是,如果我想启用数据卷容器来管理这两个容器,怎么办呢?

容器可以有多个具有多个-v参数的卷.在您的情况下,如果您想要一个包含2个卷的数据卷容器,则首先要创建一个容器作为数据卷容器,其中包含:

docker create -v /var/lib/postgressql/data -v /var/jenkins_home --name mydata ubuntu /bin/true

请注意2卷.您docker create是因为数据容器不需要运行来存储数据.

现在你的postgres和jenkins容器可以使用--volumes-from标志访问卷.这是postgres的一个例子:

docker run --volumes-from mydata --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

有了--volumes-from,postgres容器将使用容器中的两个卷mydata,虽然postgres只是真正关心/var/lib/postgressql/data.

如果我使用2个数据量容器并保持简单,它会被认为是最佳实践吗?

我不确定最佳实践,但我认为1个数据卷容器没有理由管理两个不相关容器的数据.我会为每个容器分别使用单独的数据容器.

如果,稍后,您需要执行诸如备份或迁移postgres和jenkins的数据之类的操作,您可以动态创建另一个容器并使用多个备份--volumes-from备份整个事物.它非常灵活.