Pull to refresh

Comments 17

UFO just landed and posted this here

Это был сарказм. Статья ужасна.

UFO just landed and posted this here

Да там разница только в том что здесь multistage (в оф мануале этап сборки просто не нужен) и базовый образ на alpine

Dockerfile по мелочи косячные. Многословно COPY package.json. хватит точки или бесполезные команды CMD ["nginx", "-g", "daemon off;"] есть уже в родителе, build deps попадают в итоговый образ и тп.


Больше всего у меня притензий к docker-compose в production (!) с build (!!!). Для прода должны быть собраны уже готовые контейнеры (так правильно в принципе, а не собирать походу, увеличивая downtime) и docker-compose в принципе не лучший выбор + это от силы половина от нужного (еще нужен роутер на 80 порту, traefik проще всего) + НЕ НУЖНО светить портом mongo наружу + docker-compose только костылями можно сделать zero downtime и тп.


Не используйте docker-compose на проде. Если нет желания изучать доп тулы, то просто docker run -d --restart always --name… достаточно. Если хочется красоты и нет желания лезть в kubernetes/nomad, то https://docs.ansible.com/ansible/latest/modules/docker_container_module.html сделает тоже самое, только декларативно.

Про compose в проде поддержу, его авто-конфигурация сети при up может много ненужных нежданчиков преподнести.


Такой вопрос, есть т.н. 12 factor apps, которые в т.ч. говорят об идеальном мире "один и тот же заранее собранный контейнер используется в разных средах а параметризуется через env"
Если с бекендом все понятно, то как быть с фронтом, который обыкновенно статика в nginx, которому (nginx) обыкновенно плевать на env, а в саму статику пробросить env обыкновенно можно только через build фронта каким-нибудь вебпаком с параметрами.
Есть у вас опыт как жить с этим? :))

Получился туманный вопрос… опишите конкретный кейс, будет проще.


  • бекенд может делать windows.settings=… и после этого цеплять скрипты статики.
  • если статика имеется в виду условный index.html, то можно написать entrypoint с envsubt/sed и пробрасывать env, это пару строк на баше

Вообще фронт можно условно разделить на "там где есть SSR" и параметры отдаст бек или "SSR нет" и там можно хоть +1 запрос на конфигурацию делать, не страшно.

UFO just landed and posted this here

Что это за история такая с bcrypt и python?! Чушь какая-то, тащить за собой целый python только чтоб работала какая-то либа…

Он нужен не "чтоб работала какая-то либа", а чтобы сбилдить эту самую либу. После установки пакета python больше не нужен.

Так у автора в Dockerfile два контейнера: для сборки и для деплоя. В контейнер для деплоя питон не попадает.

Цитирую итоговый Dockerfile


FROM node:12-alpine as builder
WORKDIR /app
COPY package.json /app/package.json
RUN apk --no-cache add --virtual builds-deps build-base python
RUN npm install
COPY . /app
RUN npm run build
FROM node:12-alpine
WORKDIR /app
COPY --from=builder /app/dist /app
COPY package.json /app/package.json
RUN apk --no-cache add --virtual builds-deps build-base python
RUN npm install --only=prod
EXPOSE 8080 
USER node
CMD ["node", "index.js"]

Лично я здесь вижу установку python дважды.
По всей логике, этот python остается в production image. А это совсем не фонтан.

Да, пардон, взгляд к пятнице замылился. Кажется автору стоит либо просто копировать node_modules вместо
COPY package.json /app/package.json
RUN apk --no-cache add --virtual builds-deps build-base python
RUN npm install --only=prod

Либо добавить третий контейнер и копировать только серверную часть node_modules уже в него.

Опять npm install и build внутри докер файлов… Как вы энвы прокидывать будете? Через ARGs? Задолбаетесь писать все переменные. Для сборки JS проектов нужен multi stage pipeline с билдом JS вне докер файлов.
Как вы задолбали копипастить эти гайды джунов которые докер первый раз видят.

Спасибо за статью, помогло.
Как раз недавно столкнулся с очень похожей задачей, раньше не приходилось разворачивать react-приложения а тут почти один в один то что мне надо.

Да, я бы уточнил в статье что для продакшена это сыро. Лишние файлы и пакеты, совершенно лишний билд при разворачивании, да и компоуз для прода как-то не очень. Зато очень подходит для дев-среды разраба.

Но в целом, например для джуна/мидла реакт разработчика статья супер полезная, имхо, и намного лучше и целостней того что навскидку гуглиться по теме.
Sign up to leave a comment.