В целом, управление средой, такой как подготовка или производство, основанное на ENV, является обычной практикой, но в случае с Docker лучшим подходом является tag
.
Лучше использовать tag
для dev, stage and production
в случае с докером. Есть много причин, одна из которых - mount code
в среде разработки, это хорошо, но это не рекомендуется в производственной среде.
При построении изображений всегда tag
их с полезными тегами, которые кодируют версиюинформация, предполагаемое место назначения (prod or test, for
instance)
, стабильность или другая информация, которая полезна при развертывании приложения в различных средах. Не полагайтесь на автоматически созданный последний тег .
Рекомендации по разработке приложений Docker
Но если вы все еще хотите использовать подход ENV, вы можете использовать сценарий docker-entrypoint.
Dockerfile
FROM node:alpine
RUN npm install pm2 -g
COPY . /app
WORKDIR /app
ENV NODE_ENV=development
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT ["sh","docker-entrypoint.sh"]
Docker-entrypoint
#!bin/sh
if [ $NODE_ENV = development ]; then
pm2 start server.js
else
node server.js
fi
Так что вы готовы пойти и вы можете изменить это в Dockerfile или во время выполнения
docker run --env NODE_ENV=production -it --rm node:production
или
docker run --env NODE_ENV=development -it --rm dev