Node.js Dockerfile环境相关起始点
去接docker,有点晚了,但晚了总比不来好 在一些在线教程之后,我找到了docker文件,并为我的第一个microservice node+mongo编写了docker compose dev的设置非常糟糕,因此现在将实施可靠的pm2: 生产部门可能需要以下命令,但开发人员i希望pm2实例管理器在文件更改时重新启动 但我现在面临的一个明显的问题是如何在Dockerfile中区分dev和prod DockerfileNode.js Dockerfile环境相关起始点,node.js,docker,docker-compose,dockerfile,Node.js,Docker,Docker Compose,Dockerfile,去接docker,有点晚了,但晚了总比不来好 在一些在线教程之后,我找到了docker文件,并为我的第一个microservice node+mongo编写了docker compose dev的设置非常糟糕,因此现在将实施可靠的pm2: 生产部门可能需要以下命令,但开发人员i希望pm2实例管理器在文件更改时重新启动 但我现在面临的一个明显的问题是如何在Dockerfile中区分dev和prod Dockerfile FROM node:12-alpine RUN mkdir -p /usr/s
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
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 compose
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和production
。原因有很多,其中一个原因是在开发环境中装载代码是可以的,但不建议在生产环境中使用
构建图像时,始终使用有用的标记对其进行编码
版本信息,预期目标<代码>(产品或测试,用于
实例)
、稳定性或其他在以下情况下有用的信息:
在不同的环境中部署应用程序不要依赖于
自动创建的最新标记
但如果仍然希望使用ENV方法,那么可以使用docker入口点脚本
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
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入口点
#!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
或
对于环境变量,为什么要更改容器中的文件以进行开发?您正在容器中开发此应用程序吗?我不了解您的用例。在开发过程中,我希望运行我的
pm2.dev.config.js
,它监视生成的文件,允许在不重新启动docker的情况下进行开发。在prod中,我只想运行节点。/build/server.js
@lawrencerone,这难道不要求我也必须在生产中使用docker compose吗?我不需要这样做,因为在生产环境中,mongodb是其他地方的服务,而不是容器中的服务,因此我不想运行docker compose。或者我应该在compose中设置1个,在dockerfile中设置1个?