172 похожих чатов

На сервер склонировал с гитхаба проект(Там же в корне проекта

папка докера, а также лежит ямл файл, папка с докерфайлами, конфигами. Наверное это не очень правильно) В докер-композе поднял контейнеры: приложение, веб-сервер и БД.

Докерфайл приложения, как он работает сейчас:
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 изменить версию приложения. А потом рестартовать только этот контейнер? Это может быть полностью автоматизировано? Как тогда при этом получить изначальный образ для приложения? Руками создавать и пушить в докерхаб? Как при этом изначально в образ получить код проекта?

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

8 ответов

7 просмотров

Использовать раннер вида dind, описать стейдж типа pull, который будет пуллить образ с хаба, и делать сборку. В запущенном контейнере, если я не ошибаюсь, такого сделать нельзя.

EN- Автор вопроса
Dan Zadiran
Использовать раннер вида dind, описать стейдж типа...

инициализация начинается с того, что вручную создается образ приложения и отправляется в докерхаб и в дальнейшем докерфайл для приложения не используется? При создании первоначального образа, откуда в образ получить код приложения? Или и первоначальный образ приложения создается в ci/cd клиенте? Когда и как тогда остальные сервисы поднимать в докер композе? Откуда начинается процесс?

EN
инициализация начинается с того, что вручную созда...

Пушишь коммит, CI/CD собирает образ и пушит его в docker registry (например, dockerhub). Затем при запуске контейнера docker его скачивает. Образ можно собрать и запушить в registry вручную

EN- Автор вопроса
Максим Мартынов
Пушишь коммит, CI/CD собирает образ и пушит его в ...

В ручном режиме пробовал новый образ подсовывать в докер композ, вроде все работает. Осталось это все автоматизировать. С созданием нового образа в контексте ci/cd понятно- это область ответственности ci/cd клиента. А с помощью чего можно автоматизировать работу с файлом docker-compose. yml на сервере? Я имею в виду- замену названия образа у сервиса приложения и перезапуск контейнера. Ну и сам образ- должен создаваться новый образ, или пулиться с докерхаба, изменяться и пушиться с новым тэгом? Как автоматизированно связать события появления нового образ(обновления) в докерхабе и заменой названия образа в ямл файле? Какие для этого есть инструменты? Или это также область ответственности ci/cd клиента?

EN
В ручном режиме пробовал новый образ подсовывать ...

вариантов запуска контейнеров миллион - от docker-compose до Kubernetes, от push модели, когда CI/CD сам лезет на нужный сервер и поднимает там контейнер, до pull, когда Flux/ArgoCD/Tekton получает информацию о выходе нового тега и поднимает новый контейнер на его основе. У каждого способа есть своя сфера применения, свои достоинства и недостатки

EN
инициализация начинается с того, что вручную созда...

Докерфайл нужен, потому что ты его в CI/CD пихаешь, там же, если нужно меняешь, а затем пушишь, точно также, как бы ты это делал с локальной машины, только делает это виртуалка в виде раннера гитлаба. Обзываешь это стейджом Dockerize в CI. Не совсем понял, что ты имел в виду словами: «при создании первоначального образа, откуда в образ получить код приложения». Лучше пояснить. Сервисы поднимаются в порядке приоритета, указанного в директиве services: Если у тебя зависимые сервисы, то можно использовать -depends-on: К слову, всю эту информацию можно найти на сайте Докера, чтобы лучше запомнить эту информацию и получить скилл самообразования.

EN- Автор вопроса
Dan Zadiran
Докерфайл нужен, потому что ты его в CI/CD пихаешь...

Почему раннер гитлаба? Я хочу использовать тимсити. Настроил подключение к гитхабу. В сборке все шаги делал через command line раннер. Установил зависимости, прогнал тесты. Разбираюсь, как образ создать. При создании первоначального образа- имел в виду можно - локально в среде разработки сделать образ и запушить в докерхаб?

EN
Почему раннер гитлаба? Я хочу использовать тимсити...

Можно любой раннер, в любой CI, просто, как пример дал. Все равно не понял сути твоего вопроса. Если ты про то, можно ли базовый образ пушить в хаб - да. Ты же его тоже пишешь в Докерфайле, который после сборки можно залить в регистри.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Всем привет! Использую gitlab-ci. Настроил gitlab-agent для деплоя в куб. При деплое проекта в логах такая ошибка: Executing deploy plan failed to watch "ns:my-project/Ingress...
Konstantin Moiseev
4
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Привет! Подскажите, а как создать ярлыки программ на рабочем столе и в меню "Пуск" для всех пользователей сразу? Точнее, интересует вопрос: в каких системных переменных лежат...
Моринаро
6
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
а не подскажете вот это скрин из какой IDE ?
Iluha Companets
14
Карта сайта