混淆了使用单个数据容器的多个不同容器
最近我一直在调查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
并备份整个事物。 这非常灵活。