У меня следующая схема.
В репозитории проект в корне лежит Dockerfile, который умеет собирать как прод так и дев версию контейнера.
Для каждого сервиса отдельно в гите свои репозитории. Например у nginx в репе Dockerfile, в котором по сути одна команда - скопировать конфиг.
Redis у меня работает с конфигами по дефолту, так что для него репы нет.
Так же в каждой репе лежит конфиг для
Drone, который при отправке коммитов запускает сборку, тестирование и последующий деплой на прод сервер.
Деплоем контейнеров на сервере у меня сейчас занимается
Rancher. Но в ближайшее время планирую перейти на Docker Swarm.
Конфиги сборок лежат в гите, кроме параметров.
Параметры для Symfony я передаю через environment при старте контейнеров.
Параметры для сборки зашифрованы в .drone.sec файле. Но в версии 0.5 они будут лежать сразу на сервере.
Docker-compose для прода я не использую, через него поднимается окружение исключительно для дев версии.
Прокидывать папки с хостовой машины не рекомендуется, поэтому для персистентных данных нужно создавать volume и прокидывать их.
При данной схеме на сервер вообще не захожу. Сделал пуш, код протестировался и задеплоился.
Примеры моих конфигов:
Dockerfile,
drone.yml