воркера. Сервис приложения в докер-композе:
php:
image: myImage:latest
container_name: php
restart: always
volumes:
- ./:/var/www/html/${APP_NAME}
depends_on:
- mysql
networks:
- net
Изменяю локально код приложения, пушу в гитхаб. В отдельном окружении(в CI клиенте) беру новый код с гитхаба и докерфайлом собираю образ(myImage:latest):
FROM php:7.4-fpm
ARG APP_NAME
ENV APP_NAME="App"
# Install php extensions
RUN apt-get update && apt-get install -y zip nano \
&& docker-php-ext-install pdo_mysql
COPY ./ /var/www/html/$APP_NAME
# Set work directory
WORKDIR /var/www/html/$APP_NAME
# Change user from root to 1000
USER 1000
Пересобираю контейнер приложения с новым образом и соответственно то, что было в волюмсе в ./ на хосте , после этого содержится теперь и в рабочей директории контейнера(т.е. мои изменения из гитхаба в новом образе перезатерлись тем, что было на хосте в ./ ). Если я не мапаю общую директорию на хосте и в контейнере приложения, то новый код попадает в контейнер - актуальный с нового образа, но в контейнере нет нужных данных из общей директории на хосте.
Как это все собрать в кучу? Чтобы при пересборке контейнера приложения в нем изменились данные на новые(измененные в гитхабе) и при этом остались доступными данные из других контейнеров в общей директории на хосте?
1. Монтируй отдельно папку с данными, а не весь корень проекта 2. Зачем приложениям вообще какие-то общие файлы? Я могу понять раздачу статики или простую реализацию механизма загрузки файлов на сайт, но ты перечислил как-то уж очень много контейнеров
а можно вопрос? у тебя в проекте лежат файлы от фронта? типо css, js ?
Много контейнеров, потому что говорят -плохо, что много всего в докерфайле. Поэтому сделал в отдельных контейнерах установку и запуск композера, пакетов ноды, воркер-очередь. Контейнеру приложения нужна папка композера и модулей ноды. Например, контейнер nginx. Сервису нужен явно корень проекта, у меня в контейнере это /var/www/html/App/public. Но в том же паблике находятся файлы, которые могут изменяться локально в ходе разработки.
да
Отдельный контейнер под композ, имхо, перебор, можно решить энтрипоинтом с выбором действия по переменной-флагу или просто по заданному cmd. Аналогично с артизаном (воркеры). Ноде (ешо-серверу) волюм с данными вообще не упал
Ну композер можно было бы запускать и в контейнере с приложением, правда я в CI перед тестами уже устанавливаю зависимости композера, т.к. они нужны для тестов.
Если речь про прод, то композера в боевых образах быть уже не должно, он там не нужен. Аналогично со стейджами, теститься должна конкретная сборка, а не "щас поправлю зависимость". В обоих случаях волюм должен содержать только storage, всё остальное должно быть запечено на стадии сборки контейнеров. А для локальной разработки да, придётся папку проекта целиком между контейнерами шарить.
Обсуждают сегодня