对使用单个数据卷容器的多个不同容器感到困惑
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-from
和 back up事物。非常灵活。
我最近一直在研究 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-from
和 back up事物。非常灵活。