我使用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),我需要为我们使用的每个图像的每个版本/标签创建一个自定义派生图像。
我尝试的是创建仅包含配置文件的映像,并将其添加为卷。如果该卷是一个文件夹,则可以使用该文件,但是它将“覆盖”原始文件夹,并且仅存在这两个自定义文件,而我还需要该文件夹上的其他原始文件。
如果我尝试将单个文件用作卷,它将无法正常工作。
我想我可以将所有文件放在新图像的卷中,然后在容器上创建到每个文件的符号链接。但是我不确定如何在容器上创建这些符号链接。
可能有更好的处理方法,但很不幸,我被困住了。
答案 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 \