与多个容器共享的Docker映像上的配置文件

时间:2019-04-04 14:02:49

标签: docker

我使用Docker运行PHP软件的不同实例。每个实例都有其自己的数据库容器,应用程序容器,docker-compose文件等(没有群集,kubernetes或任何类型的编排)。

/usr/local/etc/php/conf.d/上必须包含一些自定义项。我需要更改文件的内容,然后添加另一个文件。

这是我目前在docker-compose上实现此目标的方式:

volumes:
  - "./conf/disable-opcache.ini:/usr/local/etc/php/conf.d/opcache-recommended.ini:z"
  - "./conf/custom.ini:/usr/local/etc/php/conf.d/custom.ini:z"

它可以工作,但是强迫我为应用程序的每个实例都拥有两个文件的副本。当我想进行更改时,需要将它们复制到每个实例。

我想以一种简单,可移植,可复制的方式将这些自定义项放置在这些容器的多个实例上。

我已经读过this answer,而我目前正在做的基本上是他们的选择(a),但是它具有我提到的所有缺点。我不能使用选项(b),因为我使用的图像不支持-至少不是我需要的所有自定义配置;而对于选项(c),我需要为我们使用的每个图像的每个版本/标签创建一个自定义派生图像。

我尝试的是创建仅包含配置文件的映像,并将其添加为卷。如果该卷是一个文件夹,则可以使用该文件,但是它将“覆盖”原始文件夹,并且仅存在这两个自定义文件,而我还需要该文件夹上的其他原始文件。

如果我尝试将单个文件用作卷,它将无法正常工作。

我想我可以将所有文件放在新图像的卷中,然后在容器上创建到每个文件的符号链接。但是我不确定如何在容器上创建这些符号链接。

可能有更好的处理方法,但很不幸,我被困住了。

1 个答案:

答案 0 :(得分:1)

也许您应该尝试使用swarm configuration service:根据您的描述,我认为它将帮助您前进。

您可以在单个“节点”(您的本地计算机)上使用swarm,然后继续使用撰写文件。使用:docker swarm init开始。

您将disable-opcache.ini文件添加到服务中,如下所示:

docker config create dopcache disable-opcache.ini

然后使用类似的方法将配置传递到您的容器:

docker service create \
   --name myphpapp \
   --config source=dopcache,target=/usr/local/etc/php/conf.d/opcache-recommended.ini,mode=0440 \
   -c my-docker-compose.yml \
   myphpimage:latest \