有了前幾篇的基礎後,咱們如今已經能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
掛載容器內日誌目錄到宿主機。