Docker и CI/CD: как все-таки происходит этот магический деплой?
Прочитал множество статей, посмотрел много примеров на тему CI/CD и везде какая-то своя модель ci/cd.
И они абсолютно разные.
Начиная от использования абсолютно разных вспомогательных приложений, и заканчивая монструозными bash-скриптами.
Я не могу для себя выделить какие-то общие принципы, и начать двигаться в каком-то направлении, чтобы разобраться. Т.к. мне на этом этапе непонятно, какое из решения является правильным, а какое нет.
Я понимаю, что одного правильного решения не бывает, и у каждого проекта своя специфика и свои требования.
Но есть ли какие-то базовые (или классические решения), которые похожи для большинства типовых проектов?
Где про это можно почитать?
Например, для меня совсем непонятно, как происходит деплой на сервер, если на нем крутится 10 контейнеров.
Каким образом код попадает туда, чтобы все продолжало работать.
Что происходит, если поменялась конфигурация, например для Nginx?
Какие инструменты для этого нужно использоваться еще, если я пользуюсь GitLab CI?
1. Во время ci собираешь docker image и закидываешь в docker registry (как правило приватный)
2. Во время cd вызываешь API твоего оркестратора:
docker-compose/docker swarm/k8s и тд, чтобы он обновил запущенные сервисы
Оба этапа можно реализовать разными способами, хоть через гитлаб, хоть через кучу баш скриптов
PS: docker-compose не является оркестратором и не умеет на ходу обновлять образы
вот мне непонятен 2 пункт. как именно происходит обновление сервисов ?
можете пожалуйста привести пример например через docker-compose ?
я сейчас это вижу так: если поменялась версия nginx, то как-то нужно параллельно поднять новый контейнер, переключить на него трафик, а первый выключить. но в этом случае будут всякие конфликты, что первый контейнер с nginx работает уже на порту 80, а второй (новый) запустить не получится.
Общее в CI/CD - это идея, данный набор практик закрывает вопросы 2 и 3 из теста Спольски
То есть, в данном случае, важна идея, а не конкретный путь к ее реализации (делать это через Доскер или через развертываение VM, использовать для этого вязанку батников или монстра вроде TeamCity - это уже частности - важно, что нажатие одной кнопки приводит к появлению где-то полностью собранного с нуля и развернутого актуального билда Продукта)
Согласен с Армянское Радио - важна идея, точнее понимание процесса и умение сделать все вручную.
А автоматизировать с помощью тех или иных инструментов - дело второе.
Посмотрите пример в моем ответе https://qna.habr.com/q/1016852#answer_1981278