Как правильно перезапустить Docker-контейнеры для процесса развертывания? - PullRequest
0 голосов
/ 12 апреля 2019

Я создаю скрипт, который я буду использовать как GitHub webhook после каждого нажатия на мастер. Теперь в этом сценарии мое развертывание выглядит примерно так:

cd directory/to/docker-compose
git pull
docker-compose up --build -d --force-recreate

Таким образом, каждый раз, когда я делаю push to master, мне предлагается выполнить сценарий развертывания, который извлекает изменения из GitHub и перезапускает контейнер Docker с изменениями кода.

Может ли кто-нибудь подтвердить или дать мне несколько советов, если это правильный способ сделать это?

1 Ответ

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

Ваш процесс развертывания не должен включать Git вообще. Стандартный способ сделать это:

  1. Запустите систему CI docker build, чтобы создать образ из каждого коммита. Пометьте каждое изображение отметкой даты, тегом контроля источника, идентификатором изменения контроля источника или чем-то еще (или всем этим; но чем-то уникальным, а не latest).
  2. docker push встроенные образы в некоторый центральный реестр (Docker Hub, Amazon ECR, Google GCR, что-то самообслуживаемое, ...).
  3. Измените тег изображения в 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, вы получите нулевое время простоя. обновить систему бесплатно.)

...