对使用单个数据卷容器的多个不同容器感到困惑

Confused about multiple different containers using a single data volume containers

我最近一直在研究 docker,我开始研究数据卷容器,以及如何在会话之间持久化信息,但我有点困惑。

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

让我们看一个简单的,library/postgres 图像,在它的 docker 文件中它暴露了一个卷 /var/lib/postgresql/data 假设我在本地映射到 /docker/db_data容器设置,我知道 /var/lib/postgresql/data 的内容可以在我的笔记本电脑 /docker/db_data 文件夹中找到。

但是,如果您想扩展并拥有另一个容器 运行 Jenkins,会发生什么情况,例如,它将 /var/jenkins_home 作为一个卷公开。最初我会把它映射到我笔记本电脑上的另一个文件夹,例如 /docker/jenkins_data.

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

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

或者我做错了,如果我使用 2 个数据卷容器并保持简单,是否会被视为最佳实践?

Lets take a simple one, the library/postgres image, in its dockerfile it exposes a volume /var/lib/postgresql/data Suppose I mapped that locally to /docker/db_data in a single container setup, I understand that the contents of /var/lib/postgresql/data would be found in my laptops /docker/db_data folder.

不完全是。您可以使用 -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]" }

But if I want to enable a data volume container to manage both of these, how can this be done?

一个容器可以有多个带有多个 -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.

would it be considered best practises if I used 2 data volume containers, and kept it simple?

我不确定最佳实践,但我想说没有理由让 1 个数据卷容器管理两个不相关容器的数据。我会为每个容器使用单独的数据量容器。

如果稍后您需要为 postgres 和 jenkins 做备份或迁移数据之类的事情,您可以动态创建另一个容器,其中包含多个 --volumes-fromback up事物。非常灵活。