Я новичок в докере, я сделал их урок и некоторые другие вещи в Интернете, но это все .. Так что я думаю, что я делаю это очень неправильно ..
Прошёл один день с тех пор, как я искал способ опубликовать Dockerfile, который будет запускать npm run dev
или npm start
, в зависимости от среды prod или dev.
Playground
То, что я получил до сих пор:
# Specify the node base image version such as node:<version>
FROM node:10
# Define environment variable, can be overight by runinng docker run with -e "NODE_ENV=prod"
ENV NODE_ENV dev
# Set the working directory to /usr/src/app
WORKDIR /usr/src/app
# Install nodemon for hot reload
RUN npm install -g nodemon
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install && \
npm cache clean --force
# Set the port used by the app
EXPOSE 8080
# Bundle app source
COPY . .
# Launch the app
CMD [ "nodemon", "server.js" ]
Из того, что я видел на www, является то, что люди склонны использовать bash для выполнения таких операций или монтировать том в docker-compose, однако этовыглядит настолько многословно, что просто выполняет условие if else внутри Dockerfile.
Цель
Без использования какого-либо другого файла (не усложняйте ситуацию)
Я ищу что-то вроде:
if [ "$NODE_ENV" = "dev" ]; then
CMD ["nodemon", "server.js"] // dev env
else
CMD ["node", "server.js"] // prod env
fi
Может быть, яЯ ошибаюсь, любой хороший совет о том, как делать такие вещи в докере, был бы хорош.
Кроме того, отметьте, что я не уверен, как разрешить перезагрузку в моем контейнере при изменении файла на моем хосте, ядумаю, все дело в громкости, но опять же не знаю, как это сделать ..