Конфигурационные файлы на образе докера, совместно используемые несколькими контейнерами - PullRequest
2 голосов
/ 04 апреля 2019

Я запускаю разные экземпляры программного обеспечения PHP, используя Docker. Каждый экземпляр имеет свой собственный контейнер базы данных, контейнер приложения, файл 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"

Это работает, но заставляет меня иметь копии обоих файлов для каждого экземпляра приложения. Когда я хочу внести изменения, мне нужно реплицировать их на каждый экземпляр.

Я хочу иметь простой, переносимый, воспроизводимый способ размещения этих настроек на нескольких экземплярах этих контейнеров.

Я прочитал этот ответ , и то, что я сейчас делаю, это в основном их вариант (а), но у него есть все недостатки, которые я упомянул. Я не могу использовать опцию (b), потому что нет поддержки для изображений, которые я использую - по крайней мере, не для всех пользовательских конфигураций, которые мне нужны; тогда как для варианта (c) мне нужно было бы создать собственное производное изображение для каждой версии / тега каждого изображения, которое мы используем.

Я пытался создать образ, содержащий только файлы конфигурации, и добавить его в качестве тома. Он работает, если том является папкой, но затем «перезаписывает» исходную папку, и присутствуют только эти 2 пользовательских файла, тогда как мне нужны и другие оригинальные файлы в папке.

Если я попытаюсь использовать один файл в качестве тома, он не будет работать.

Думаю, я мог бы поместить все файлы в томе в новое изображение, а затем создать символическую ссылку на контейнеры для каждого файла. Но я не уверен, как бы я создал эти символические ссылки на контейнерах.

Вероятно, есть лучший способ продолжить, но я, к сожалению, застрял.

1 Ответ

1 голос
/ 04 апреля 2019

Возможно, вам следует попытаться использовать службу конфигурации роя : основываясь на вашем описании, я думаю, это поможет вам двигаться вперед.

Вы можете использовать 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 \
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...