Приложение Webpack в Docker нуждается в переменных окружения, прежде чем его можно будет собрать - PullRequest
0 голосов
/ 21 февраля 2019

Впервые в докере, так что, может быть, я упускаю что-то очевидное ...

У меня есть приложение, разделенное на веб-клиент и внутренний сервер.Для внутреннего интерфейса довольно просто создать изображение с помощью Dockerfile:

  1. COPY source
  2. RUN npm install, npm run build
  3. CMD npm run start

После этого уже созданное внутреннее приложение получит доступ к переменным среды во время выполнения.

С веб-клиентом все не так просто, поскольку для веб-пакета требуетсяпеременные окружения до приложение построено.Это оставляет меня, насколько мне известно, только две опции:

  1. Требовать от пользователя создания собственного образа из источника приложения
  2. Сборка веб-клиента на container run с помощьюработает npm run build в CMD

В настоящее время я делаю # 2 , но оба варианта кажутся мне неправильными.Какое лучшее решение?

FROM node:latest
COPY ./server /app/server
COPY ./web /app/web
WORKDIR /app/web
CMD ["sh", "-c", "npm install && npm run build && cd ../server && npm install && npm run build && npm run start"]

1 Ответ

0 голосов
/ 21 февраля 2019

Во-первых, для внутреннего сервера и веб-клиента было бы неплохо иметь собственный Dockerfile / образ.Тогда было бы легко запустить их вместе, используя что-то вроде docker-compose.

. Вы захотите предоставить переменные окружения для веб-Dockerfile, используя аргументы сборки.Аргументы сборки Docker доступны при создании образа Docker.Вы можете использовать их, указав ключ ARG в Dockerfile или передав флаг --build-arg docker build.

Вот пример Dockerfile для вашего веб-клиента на основе предоставленных вами данных:

FROM node:latest

ARG NODE_ENV=dev

COPY ./web /app/web
WORKDIR /app/web

RUN npm install \
    && npm run build

CMD ["npm", "run", "start"]

В следующем Dockerfile используется директива ARG для создания переменной со значением по умолчанию dev.

Значение NODE_ENV может быть переопределено при запуске docker build.

Примерно так:

docker build -t <myimage> --build-arg NODE_ENV=production .

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

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...