在使用typescript编写基于node.js的微服务项目时,需要将服务以docker形式进行发布,遇到了一些问题,现在记录一下。
docker镜像使用的node版本与开发版本不一致,会导致很多问题。在开发时,使用的是完整版本,而在部署时,希望使用简化版本以减小尺寸。版本不一致会使开发过程中npm module与创建容器时的版本不同,从而导致错误。有几点需要注意:
1、需要使用npm install 而不是npm ci,并且只复制package.json到容器。
这是因为npm ci会严格按照package-lock.json进行部署,而这是获取的npm modules是与开发环境相匹配的,不一定适合创建容器的简化版本。
2、使用相近的node简化版本,尽量减少开发与部署的版本差别。
3、可能需要在docker部署时安装python和其它辅助程序包。
简单部署时,可以将源代码拷入,直接生成,比如:
1 | # 使用 Node.js 官方镜像作为基础镜像 |
复杂情况下,可以先进行编译,然后创建部署容器。下面是复杂情况下的Dockerfile:
1 | # 构建阶段:安装依赖并编译 |