папка докера, а также лежит ямл файл, папка с докерфайлами, конфигами. Наверное это не очень правильно) В докер-композе поднял контейнеры: приложение, веб-сервер и БД.
Докерфайл приложения, как он работает сейчас:
FROM php:7.4-fpm
# Install php extensions
RUN apt-get update && apt-get install -y zip \
&& docker-php-ext-install pdo_mysql
# Set work directory
WORKDIR /var/www/html/app
# Change user from root to 1000
USER 1000
сервис в yml. файле:
php:
build:
context: .
dockerfile: docker/php/Dockerfile
container_name: php
restart: always
depends_on:
- mysql
networks:
- net
Все хорошо, все работает. Если все это сделать руками. Один-два раза. Я хочу подключить CI/CD. С CI особых вопросов нет. Но как теперь можно организовать постоянное разворачивание в контексте докер сборки? По сути, мне по хуку с гитхаба нужно менять код, который лежит в контейнере приложения. Как это можно/правильно делать? Каким-то образом делать git pull на сервере? Папка с докером тогда будет возвращаться к исходному состоянию и все текущие данные я потеряю, или убрать ее вообще с репозитория?
Другой вариант, как пишут в документации CI клиента - полученный артефакт, как образ приложения, пушить в регистр и потом использовать новый образ уже в деплое. По второй части вообще непонятно - как это делать. Нужно же как минимум в docker-compose.yml изменить версию приложения. А потом рестартовать только этот контейнер? Это может быть полностью автоматизировано? Как тогда при этом получить изначальный образ для приложения? Руками создавать и пушить в докерхаб? Как при этом изначально в образ получить код проекта?
Подскажите пожалуйста алгоритм, как это все вместе должно работать?
Использовать раннер вида dind, описать стейдж типа pull, который будет пуллить образ с хаба, и делать сборку. В запущенном контейнере, если я не ошибаюсь, такого сделать нельзя.
инициализация начинается с того, что вручную создается образ приложения и отправляется в докерхаб и в дальнейшем докерфайл для приложения не используется? При создании первоначального образа, откуда в образ получить код приложения? Или и первоначальный образ приложения создается в ci/cd клиенте? Когда и как тогда остальные сервисы поднимать в докер композе? Откуда начинается процесс?
Пушишь коммит, CI/CD собирает образ и пушит его в docker registry (например, dockerhub). Затем при запуске контейнера docker его скачивает. Образ можно собрать и запушить в registry вручную
В ручном режиме пробовал новый образ подсовывать в докер композ, вроде все работает. Осталось это все автоматизировать. С созданием нового образа в контексте ci/cd понятно- это область ответственности ci/cd клиента. А с помощью чего можно автоматизировать работу с файлом docker-compose. yml на сервере? Я имею в виду- замену названия образа у сервиса приложения и перезапуск контейнера. Ну и сам образ- должен создаваться новый образ, или пулиться с докерхаба, изменяться и пушиться с новым тэгом? Как автоматизированно связать события появления нового образ(обновления) в докерхабе и заменой названия образа в ямл файле? Какие для этого есть инструменты? Или это также область ответственности ci/cd клиента?
вариантов запуска контейнеров миллион - от docker-compose до Kubernetes, от push модели, когда CI/CD сам лезет на нужный сервер и поднимает там контейнер, до pull, когда Flux/ArgoCD/Tekton получает информацию о выходе нового тега и поднимает новый контейнер на его основе. У каждого способа есть своя сфера применения, свои достоинства и недостатки
Докерфайл нужен, потому что ты его в CI/CD пихаешь, там же, если нужно меняешь, а затем пушишь, точно также, как бы ты это делал с локальной машины, только делает это виртуалка в виде раннера гитлаба. Обзываешь это стейджом Dockerize в CI. Не совсем понял, что ты имел в виду словами: «при создании первоначального образа, откуда в образ получить код приложения». Лучше пояснить. Сервисы поднимаются в порядке приоритета, указанного в директиве services: Если у тебя зависимые сервисы, то можно использовать -depends-on: К слову, всю эту информацию можно найти на сайте Докера, чтобы лучше запомнить эту информацию и получить скилл самообразования.
Почему раннер гитлаба? Я хочу использовать тимсити. Настроил подключение к гитхабу. В сборке все шаги делал через command line раннер. Установил зависимости, прогнал тесты. Разбираюсь, как образ создать. При создании первоначального образа- имел в виду можно - локально в среде разработки сделать образ и запушить в докерхаб?
Можно любой раннер, в любой CI, просто, как пример дал. Все равно не понял сути твоего вопроса. Если ты про то, можно ли базовый образ пушить в хаб - да. Ты же его тоже пишешь в Докерфайле, который после сборки можно залить в регистри.
Обсуждают сегодня