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"
}
... devDependencises
和dependencies
的依赖关系以及编译器都会警告我。
我不是Docker人,一点也不,所以有更好的方法吗?
答案 0 :(得分:2)
确实有更好的方法! Docker现在具有称为“多阶段映像”的功能。借助此功能,您现在可以将整个项目复制到Docker构建上下文中,构建项目,然后“重置”容器映像以构建“准备运行”的生产Docker映像。
这有很多优点:
这里是开始使用多阶段图像的最佳位置:https://docs.docker.com/develop/develop-images/multistage-build/
希望这会有所帮助!让我知道结果如何。