Sir*_*hau 7 development-environment production-environment node.js docker docker-compose
我正在寻找一种使用 docker、docker-compose 和 nodejs 在我的项目中同时拥有开发和生产环境的解决方案。
我该如何处理?
基本上我想要的是一个启动我的 docker 生产环境的命令,以及一个启动我的开发环境的命令(例如可以使用 nodemon)。
这是我的 Dockerfile
FROM 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
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: "3"
services:
findus:
build: .
ports:
- "1234:1234"
links:
- mongo
container_name: myapp
mongo:
image: mongo
restart: always
ports:
- "4444:4444"
Run Code Online (Sandbox Code Playgroud)
包.json
// ...
"scripts": {
"build": "tsc",
"dev": "nodemon source/index.ts",
"prod": "node build/index.js"
},
// ...
Run Code Online (Sandbox Code Playgroud)
mic*_*alk 13
您可以利用入口点并将命令传递给 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"]
Run Code Online (Sandbox Code Playgroud)
主要docker-compose.yml:
version: "3"
services:
findus:
build: .
ports:
- "1234:1234"
links:
- mongo
container_name: myapp
mongo:
image: mongo
restart: always
ports:
- "4444:4444"
Run Code Online (Sandbox Code Playgroud)
然后有两个 docker-compose 文件来附加传递到图像入口点的命令。用于开发 - docker-compose.dev.yml:
version: "3"
services:
findus:
command: dev
Run Code Online (Sandbox Code Playgroud)
和docker-compose.prod.yml:
version: "3"
services:
findus:
command: prod
Run Code Online (Sandbox Code Playgroud)
然后启动开发环境:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
Run Code Online (Sandbox Code Playgroud)
对于产品环境:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
Run Code Online (Sandbox Code Playgroud)
因此,command
将附加到ENTRYPOINT
指令中。
如果您想将命令作为环境变量传递,这种方法也可以使用环境变量。您可以在文档中找到更多信息。
归档时间: |
|
查看次数: |
3445 次 |
最近记录: |