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

最近我一直在调查docker,然后开始研究数据容器,以及如何在会话之间保持信息,而且我很困惑。

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

让我们看一个简单的图书馆/ postgres图像,在它的dockerfile中显示了一个卷/ var / lib / postgresql / data假设我在本地映射到/ docker / db_data在一个容器设置中,我知道/ var / lib / postgresql / data将会在我的笔记本电脑/ docker / db_data文件夹中find。

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

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

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

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

让我们看一个简单的图书馆/ postgres图像,在它的dockerfile中显示了一个卷/ var / lib / postgresql / data假设我在本地映射到/ docker / db_data在一个容器设置中,我知道/ var / lib / postgresql / data将会在我的笔记本电脑/ docker / db_data文件夹中find。

不完全是。 您可以使用-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卷的数据的实际位置,例如, docker inspect postgressql会显示类似于…

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

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

一个容器可以有多个-v参数的多个卷。 在你的情况下,如果你想要一个容量为2的数据卷容器,你首先要创build一个容器来充当数据容器的容器:

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容器的两个卷,尽pipepostgres只关心/var/lib/postgressql/data

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

我不确定最佳实践,但我认为没有理由使用1个数据容器来pipe理两个不相关容器的数据。 我会去每个单独的数据量容器。

如果以后你需要做一些备份或迁移postgres和jenkins的数据,你可以用多个--volumes-from来创build另一个容器--volumes-from并备份整个事物。 这非常灵活。