有了前几篇的基础后,咱们如今已经能node
docker 篇:mysql
jenkins 篇:redis
接下来就能够结合二者,用 jenkins + docker 来自动化部署咱们的项目。sql
jenkins 的配置思路为docker
对应 pipeline 配置以下npm
pipeline { agent any stages { stage('Update') { steps { sh """ npm install """ } } stage('Test') { steps { sh "npm test" } } stage('Build') { steps { sh """ docker build -t localhost:5000/wool-digger-api:$BUILD_NUMBER . docker push localhost:5000/wool-digger-api:$BUILD_NUMBER """ } } stage('Deploy') { steps { sh """ ssh -o stricthostkeychecking=no root@xx.xx.xx.xx " source /etc/profile docker pull yy.yy.yy.yy:5000/wool-digger-api:$BUILD_NUMBER docker rm -f wool-digger-api docker run -d --name=wool-digger-api --network host yy.yy.yy.yy:5000/wool-digger-api:$BUILD_NUMBER " """ } } } }
在 Build
和 Deploy
环节里,使用了 $BUILD_NUMBER
这个变量来做为镜像的 tag,这个变量是 jenkins 的系统变量之一,表明当前的构建号,每次构建这个号会加一,因此能够做为咱们镜像的 tag。其余系统变量可 在此查看。json
这里使用 docker run
命令的时候,加入了 --network
参数,这个参数用来指定 Docker 容器运行的网络,默认为 bridge
,即桥接模式。这种模式下在容器内经过 localhost
是访问不到宿主机的。segmentfault
若是指定为 host
则容器与宿主机共用网络,就无需使用 -p
命令映射端口了。这种模式下会破话隔离性,这里是为了在容器内方便地链接宿主机的 mysql
和 redis
,推荐将 mysql
和 redis
也使用 docker 运行,host
值可做为一种临时解决方案。api
docker 的配置无需作太多修改安全
FROM node:10.15.0-alpine MAINTAINER sunhengzhe@foxmail.com COPY . /app/ WORKDIR /app RUN npm install pm2 -g EXPOSE 1337 CMD ["pm2-runtime", "pm2/production.json"]
这里的基本镜像使用了 node 的 alpine 版本,alpine 是面向安全的轻型 Linux 发行版,它的体积很是小。目前 Docker 官方已开始推荐使用 Alpine 替代以前的 Ubuntu 作为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提升,主机之间的切换更方便,占用更少磁盘空间等。
若是须要批量删除镜像,可使用
docker rmi $(docker images | grep '镜像名' | awk '{print $3}')
如上篇提到的,能够经过 -v
挂载容器内日志目录到宿主机。