我正在寻找一种在我的项目中使用docker,docker-compose和nodejs同时拥有开发和生产环境的解决方案。
我该如何处理?
基本上,我想要的是一个用于启动docker生产环境的命令和一个用于启动我的开发环境的命令(例如,可以使用nodemon)。
这是我的DockerfileFROM node:13-alpine
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
RUN npm run build
EXPOSE 1234
CMD ["npm", "run", "prod"] # <--- Have a possibility to run something like "npm run dev" here instead
docker-compose.ymlversion: "3"
services:
findus:
build: .
ports:
- "1234:1234"
links:
- mongo
container_name: myapp
mongo:
image: mongo
restart: always
ports:
- "4444:4444"
package.json// ...
"scripts": {
"build": "tsc",
"dev": "nodemon source/index.ts",
"prod": "node build/index.js"
},
// ...
最佳答案
您可以使用入口点并将命令传递给docker容器。然后,您可以使用docker-compose inharitance启动所需环境的compose并将命令附加到入口点。
Dockerfile :
FROM node:13-alpine
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
RUN npm run build
EXPOSE 1234
ENTRYPOINT ["npm", "run"]
主要 docker-compose.yml :
version: "3"
services:
findus:
build: .
ports:
- "1234:1234"
links:
- mongo
container_name: myapp
mongo:
image: mongo
restart: always
ports:
- "4444:4444"
然后有两个docker-compose文件将传递的命令附加到镜像入口点。开发- docker-compose.dev.yml :
version: "3"
services:
findus:
command: dev
和 docker-compose.prod.yml :
version: "3"
services:
findus:
command: prod
然后启动开发环境:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
对于产品环境:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
因此,
command
将被追加到ENTRYPOINT
指令中。如果您想将命令作为环境变量传递,那么这种方法也可以与环境变量一起使用。您可以在docs中找到更多信息。
关于node.js - Node + Docker撰写: Development and production setup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62122006/