Dockerfile env依赖的起点
提起Docker,演出晚了一点,但总比没有好。
[跟随一些在线教程,我登陆了一个docker文件并为我的第一个微服务节点+ mongo docker-compose。
开发人员的糟糕设置,所以现在将实现可信任的pm2:
生产需要以下内容,但开发人员希望pm2实例mgr在文件更改时重新启动。。
但是我现在明显的问题是如何在Dockerfile中区分dev和prod?
Dockerfile
FROM node:12-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm i
COPY . /usr/src/app
EXPOSE 3000
CMD node ./build/server.js
搬运工-撰写
version: "3"
services:
ms-authentication-service:
image: "ms-authentication-image"
depends_on:
- mongodb
build:
dockerfile: Dockerfile
context: .
links:
- mongodb
networks:
- default
ports:
- "8080:8000"
restart: always
mongodb:
image: mongo:4.2
container_name: "ms-authentication-mongo-image"
environment:
MONGO_INITDB_ROOT_USERNAME: bob
MONGO_INITDB_ROOT_PASSWORD: bob
networks:
- default
ports:
- 27017:27017
回答如下:通常,基于ENV来管理诸如登台或生产之类的环境是一种常见的做法,但是在Docker的情况下,最佳方法是tag
。
对于Docker,最好将tag
用作dev, stage and production
。原因有很多,原因之一是开发环境中的mount code
很好,但在生产环境中不推荐使用。
[构建图像时,请始终
tag
使用有用的标签进行编码版本信息,预期目标(prod or test, for instance)
,稳定性或在以下情况下有用的其他信息在不同的环境中部署应用程序。 不要依赖自动创建的最新标签。
Docker App development best-practices
但是如果仍然想使用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"]
多克尔-入口点
#!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
Dockerfile env依赖的起点
提起Docker,演出晚了一点,但总比没有好。
[跟随一些在线教程,我登陆了一个docker文件并为我的第一个微服务节点+ mongo docker-compose。
开发人员的糟糕设置,所以现在将实现可信任的pm2:
生产需要以下内容,但开发人员希望pm2实例mgr在文件更改时重新启动。。
但是我现在明显的问题是如何在Dockerfile中区分dev和prod?
Dockerfile
FROM node:12-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm i
COPY . /usr/src/app
EXPOSE 3000
CMD node ./build/server.js
搬运工-撰写
version: "3"
services:
ms-authentication-service:
image: "ms-authentication-image"
depends_on:
- mongodb
build:
dockerfile: Dockerfile
context: .
links:
- mongodb
networks:
- default
ports:
- "8080:8000"
restart: always
mongodb:
image: mongo:4.2
container_name: "ms-authentication-mongo-image"
environment:
MONGO_INITDB_ROOT_USERNAME: bob
MONGO_INITDB_ROOT_PASSWORD: bob
networks:
- default
ports:
- 27017:27017
回答如下:通常,基于ENV来管理诸如登台或生产之类的环境是一种常见的做法,但是在Docker的情况下,最佳方法是tag
。
对于Docker,最好将tag
用作dev, stage and production
。原因有很多,原因之一是开发环境中的mount code
很好,但在生产环境中不推荐使用。
[构建图像时,请始终
tag
使用有用的标签进行编码版本信息,预期目标(prod or test, for instance)
,稳定性或在以下情况下有用的其他信息在不同的环境中部署应用程序。 不要依赖自动创建的最新标签。
Docker App development best-practices
但是如果仍然想使用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"]
多克尔-入口点
#!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