我是否滥用Docker(nodejs应用部署)?

时间:2019-05-01 10:31:32

标签: node.js docker

Docker文件(.dockerignore虽然显示在同一目录中,但未在此处显示):

FROM node:8 
WORKDIR /usr/src/myapplication
COPY package*.json ./
RUN npm install
RUN npm ci --only=production
COPY . .
EXPOSE 8080
CMD [ "npm", "start" ]

......其中npm start可以运行tslint来解决代码问题,tsc可以编译TypeScript源代码,最后node可以在已编译的index.js文件上运行启动express服务器。相当标准的配置,但工作正常。

但是感觉就像我在滥用Docker:为什么我要移动尚未编译的代码并在以后进行编译,而我可以事先对其进行编译?除此之外,我还必须保持:

  "dependencies": {
    "express": "^4.16.4",
    "typescript": "^3.4.5",
    "@types/express": "^4.16.1",
    "@types/node": "^11.13.8",
    "tslint": "^5.16.0"
  }

... devDependencisesdependencies的依赖关系以及编译器都会警告我。

我不是Docker人,一点也不,所以有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

确实有更好的方法! Docker现在具有称为“多阶段映像”的功能。借助此功能,您现在可以将整个项目复制到Docker构建上下文中,构建项目,然后“重置”容器映像以构建“准备运行”的生产Docker映像。

这有很多优点:

  1. 可以将构建环境配置为匹配执行 环境...还是根本没有。通常,它是 功能,很多项目需要大量依赖项来构建。 但是在生产中,几乎不需要运行。
  2. 减少部署的docker映像。无需在所有这些开发依赖 部署的映像。
  3. 消除了Dockerfile中“ RUN安装软件包A”然后又是“ RUN”的复杂性 符合应用程序后,卸载软件包A'。

这里是开始使用多阶段图像的最佳位置:https://docs.docker.com/develop/develop-images/multistage-build/

希望这会有所帮助!让我知道结果如何。