部署过程中总是会碰到各种各样的问题,比如在本机能启动,放到docker
容器中就无法正常运行,对于这样的问题,既不好调试,也不好定位。
今天记录一个我遇到的问题:一个图片处理库,安装的时候需要下载一些二进制的文件,在jenkins
中安装非常慢,几乎装不上,这个问题困扰我了一天
于是求助了部门的架构师大佬,他告诉我,如果实在安装不上,可以使用本机打包一个基础镜像的方式来部署。
基础镜像方式指的是通过本机运行良好的环境下,把项目的package.json
单独提成一个项目,在项目中进行from node
基础镜像操作,npm install
操作,
安装完依赖,进行docker build
,把本机的镜像推送到 容器云 上面,这就是一个基础镜像。
FROM node:latest
LABEL liyonglong "liyong857637472@163.com"
COPY . /usr/src/webapp
WORKDIR /usr/src/webapp
CMD npm install
然后docker build
在推送到容器云
然后业务项目 from
的镜像是刚刚推上去的基础镜像
FROM nodeservice-basic:node-12.15.0-v1
LABEL liyonglong "liyong857637472@163.com"
COPY . /usr/src/webapp
WORKDIR /usr/src/webapp
EXPOSE 8082
CMD node .
这样依赖的问题就解决了
其实解决的不仅仅是依赖问题,采用这种方式可以规避80%docker起不来的问题,基本上能保证你的容器是能够被启动的,启动之后产生的问题多半就是代码和宿主机或配置的问题了
缺点
package.json
的三方包版本,需要更新基础镜像docker
容易产生安全问题:比如我一定需要在本机登录容器云,这样我本机能拉取镜像,也能推送镜像,只是有可能发生,当然也是可以规避的总的来说,这种方式是一种很好的放好,比起镜像在生产上起不来、依赖不一致、环境不一致 基本上都可以解决了!