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

В докер-композе общий волюм используют контейнеры приложения, веб-сервера, ноды, композера,

воркера. Сервис приложения в докер-композе:

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
Пересобираю контейнер приложения с новым образом и соответственно то, что было в волюмсе в ./ на хосте , после этого содержится теперь и в рабочей директории контейнера(т.е. мои изменения из гитхаба в новом образе перезатерлись тем, что было на хосте в ./ ). Если я не мапаю общую директорию на хосте и в контейнере приложения, то новый код попадает в контейнер - актуальный с нового образа, но в контейнере нет нужных данных из общей директории на хосте.

Как это все собрать в кучу? Чтобы при пересборке контейнера приложения в нем изменились данные на новые(измененные в гитхабе) и при этом остались доступными данные из других контейнеров в общей директории на хосте?

9 ответов

19 просмотров

1. Монтируй отдельно папку с данными, а не весь корень проекта 2. Зачем приложениям вообще какие-то общие файлы? Я могу понять раздачу статики или простую реализацию механизма загрузки файлов на сайт, но ты перечислил как-то уж очень много контейнеров

а можно вопрос? у тебя в проекте лежат файлы от фронта? типо css, js ?

EN- Автор вопроса
Максим Мартынов
1. Монтируй отдельно папку с данными, а не весь ко...

Много контейнеров, потому что говорят -плохо, что много всего в докерфайле. Поэтому сделал в отдельных контейнерах установку и запуск композера, пакетов ноды, воркер-очередь. Контейнеру приложения нужна папка композера и модулей ноды. Например, контейнер nginx. Сервису нужен явно корень проекта, у меня в контейнере это /var/www/html/App/public. Но в том же паблике находятся файлы, которые могут изменяться локально в ходе разработки.

EN- Автор вопроса
EN
да

Отдельный контейнер под композ, имхо, перебор, можно решить энтрипоинтом с выбором действия по переменной-флагу или просто по заданному cmd. Аналогично с артизаном (воркеры). Ноде (ешо-серверу) волюм с данными вообще не упал

EN- Автор вопроса
Oberon
Отдельный контейнер под композ, имхо, перебор, мож...

Ну композер можно было бы запускать и в контейнере с приложением, правда я в CI перед тестами уже устанавливаю зависимости композера, т.к. они нужны для тестов.

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

Если речь про прод, то композера в боевых образах быть уже не должно, он там не нужен. Аналогично со стейджами, теститься должна конкретная сборка, а не "щас поправлю зависимость". В обоих случаях волюм должен содержать только storage, всё остальное должно быть запечено на стадии сборки контейнеров. А для локальной разработки да, придётся папку проекта целиком между контейнерами шарить.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта