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 ответов

25 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта