l3ftoverz
@l3ftoverz
Rings of Saturn - The Husk

Как делается «production» среда при использовании докера?

Взял я например docker-compose, поднял всё, что мне нужно и всё работает, но по-сути я создал среду для разработки, она не подходит для продашкна. Логично что на продакшне мне нужен автобилд файлов при изменении, лайв релоад и ещё мелочи всякие. (Да и вообще, мне не нужна нода на продакшне)

Для боя я должен описать другой docker-compose.yml? На какой стадии должен происходить билд проекта? (npm install, npm run build, composer install). Я наверное сейчас уже перехожу к вопросам про CI\CD и оно мне тоже интересно.

Я вижу всё примерно так:
Написать простой баш скриптик, который буду запускать на сервере, он будет вытягивать с GIT код, далее он запустит контейнеры с node и composer, которые соберут все зависимости, а далее уже поднимаю контейнеры с nginx, php, mysql, которые монтируют собранный проект.

Верны ли мои мысли?
  • Вопрос задан
  • 1940 просмотров
Решения вопроса 5
qlkvg
@qlkvg
python backend developer
Не совсем по теме, но близко. Если есть желание влезть в ci/cd, то посмотрите в сторону gitlab. Там для старта есть все необходимое. Вместо баш скриптов - gitlab runner на сервере, который триггерится либо вручную, либо по пушам/мержам. Вместо сборки образов на сервере - гитлабовский registry. Сам не так давно обратил внимание на него, в ближайшее время планировал попробовать.
Ответ написан
@metajiji
Задача простая, использовать в dev, stage и prod один и тот же код. Докер это инструмент, который позволит этого достичь.
При комите собирается образ с кодом, проходит тестирование на всех стадиях, после чего попадает в продакшн в том виде в котором собрался изначально это гарантирует одинаковое поведение кода во всех окружениях.
Если в образе stateful приложение, то через env переменные необходимо передать необходимые настройки, а данные, которые генерирует приложение внутри контейнера аккуратно уложить в volume.
Ответ написан
inf
@inf
DevOps Engineer
От оркестратора зависит, чем вы будете крутить докеры? Compose, Swarm, Kubernetes...
Если у вас docker-compose, то значит надо билдить приложение в докеры. Как минимум так https://docs.gitlab.com/ee/ci/docker/using_docker_...
Следующим этапом говорить оркестратору "обнови докеры". Если композ то пинать по ssh файл docker-compose.yml Так же выполняется в gitlab ci например.

ps лучше сразу юзать более приспособленный swarm для production. Он умеет скалировать и другие фишки.
Ответ написан
@vanillathunder
Отдельный docker-compose.dev.yml и для прода docker-compose.yml, когда код вытягивается из git делается сборка контейнера и compose прописаны команды необходимые, типа npm install
Ответ написан
@alex005
Используйте семантическое версионирование (SemVer) для придания смысла нумерации в вашей разработке, минимально создайте две ветки в git (например dev и prod) и два окружения с такими же именами, используйте теги в git чтобы вести нумерацию версий (согласно semver): если среда исполнения это кубернетес, то это может быть отдельное пространство имён со своей инфраструктурой вспомогательных приложений, типа БД, кэша и т.п. На push в dev можно сделать вебхук, который будет дергать например drone и он в свою очередь будет собирать для вас образ вашего приложения и помещать в приватный docker registry. Дальше на следующем шаге pipeline можно например через плагин drone вызвать kubectl и через загрузку манифеста yaml разворачивать в dev ваше приложение, чтобы вы могли убедиться, что у вас всё корректно работает - ведите всю разработку в dev, а изменения prod делайте через pull (также на pull настройте реакцию CICD. Для dev и prod у вас будут различаться настройки БД, кэша и т.п. соответственно их можно передавать в docker образ через переменные окружения и использовать разные файлы манифестов yaml для dev и prod. Вообще инфраструктурная хорошая связка для начала работы такая: Rancher, Docker Registry, Gogs, Drone и его плагины (в частности плагин kubectl) - этого вполне достаточно, чтобы вести простые проекты, где задействованы небольшие команды разработчиков. Через Rancher вы сможете за 5 минут установить Kubernetes и через меню Apps установить очень многие распространенные приложения (в том числе, которые я перечислил) Docker Registry - для хранения образов, Gogs - легковесный аналог github, Drone и его плагины - сборка образов, управление деплоем. Всё отличие dev от prod в том что у вас разные конфиги и в dev вы можете экспериментировать, а в prod это лучше не делать и выкатывать туда только то, что вы проверили в dev.

Если хотите вообще "простоты" (оставляю за кадром Istio, Envoy) - используйте Rancher Rio и вам не нужно будет ничего для деплоя, кроме Dockerfile - всё остальное, включая stage и канареечный деплой, автоскалинг и ещё много чего там уже есть. Ну и конечно разобраться...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы