Ваш процесс развертывания не должен включать Git вообще. Стандартный способ сделать это:
- Запустите систему CI
docker build
, чтобы создать образ из каждого коммита. Пометьте каждое изображение отметкой даты, тегом контроля источника, идентификатором изменения контроля источника или чем-то еще (или всем этим; но чем-то уникальным, а не latest
).
docker push
встроенные образы в некоторый центральный реестр (Docker Hub, Amazon ECR, Google GCR, что-то самообслуживаемое, ...).
- Измените тег изображения в
docker-compose.yml
и повторите docker-compose up
. Compose заметит, что изображение изменилось, остановит старый контейнер, вытащит измененное изображение и запустит новый.
На последнем шаге обратите внимание, что тег image:
поддерживает расширение переменной среды , поэтому ваш docker-compose.yml
может сказать что-то вроде:
version: '3'
services:
one:
image: "myorg/service-one:${SERVICE_ONE_TAG:-latest}"
, который будет использовать latest
, если переменная среды не установлена, но ваша система CI / CD может установить переменную среды, чтобы получить что-то другое.
(Этот же подход очень важен, если вы переезжаете в Kubernetes: у вас обычно нет прямого доступа к узлам, поэтому вы не можете перенести исходный код или ресурсы на хост; вам придется делать это вручную на каждом хосте, и изменение в спецификации развертывания - вот то, что дает системе ключи для фактического изменения. Если вы примете эту настройку сейчас, а затем перейдете в Kubernetes, вы получите нулевое время простоя. обновить систему бесплатно.)