天天看點

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署

作者:程式員浩浩
在上一篇文章《從零實作DevOps(七):Jenkins+GitLab+Docker部署SpringBoot項目》的總結部分,我們提出了一個疑問,就是項目的安全性和可擴充性!如果使用Dockerfile來打包建構,那麼建構出來的鏡像如果想要儲存的話,就隻能儲存到雲端。這個雲端如果是Docker Hub的話,非開源的項目就十分不安全,那麼怎麼做到Docker鏡像安全存放呢?我們可以去搭建一個Docker私服倉庫,将建構好的鏡像推送到我們的私服倉庫上,就可以保證這個鏡像的安全性。再結合一下Jenkins來說,從主伺服器建構鏡像并上傳,然後在其他伺服器去拉取鏡像再運作,豈不是非常完美。理論到此結束,我們一起去試一下吧!

一、Docker私服搭建

1、前置條件

  1. 兩台Centos7作業系統(虛拟機或主機均可)

VMware建立虛拟機教程:VMware建立虛拟機教程

  1. 兩台虛拟機分别安裝Docker

Centos7安裝Docker流程:Centos7安裝Docker流程

  1. 假設已經安裝并配置好,現在我有兩台伺服器,如下

(1)主伺服器:192.168.1.11

(2)項目伺服器:192.168.1.12

我們所做的就是要在主伺服器上去搭建Docker私服倉庫,然後在項目伺服器上去拉取或送出鏡像!!!

2、主伺服器啟動私服倉庫容器

  1. 拉取私服倉庫最新版本的鏡像(registry)
docker pull registry

# 拉取成功後檢視是否存在
docker images           
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 建立私服鏡像容器并啟動

設定一下自動啟動,這樣重新開機docker後就不用再次啟動容器了!

docker run --restart=always \
--name myregistry -d \
-p 5000:5000 registry           
# 啟動成功後檢視啟動狀态
docker ps           
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 用浏覽器通路私服倉庫位址

位址:http://192.168.1.11:5000/v2/_catalog

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署

如圖,可以看到在主伺服器上的私服容器已經成功啟動,但是裡邊還沒有任何上傳的鏡像。

  1. 建立并修改docker源檔案“daemon.json”
vim /etc/docker/daemon.json           
{
 		"registry-mirrors": ["https://yy28v837.mirror.aliyuncs.com"],
 		"insecure-registries":["192.168.1.11:5000"]
}           

這裡解釋一下:

“registry-mirrors”是咱們配置的國内阿裡雲鏡像加速下載下傳的位址,從網上可以随便找一個或者可以自己建立一個,建立方法借鑒一個CSDN部落客的部落格,阿裡雲建立docker免費個人容器鏡像托管(私服)服務_阿裡雲容器鏡像服務個人版_金陵搬磚工的部落格-CSDN部落格。有興趣可以自己建立一個試試,如果不想建立的話,也可以跳過這步,直接用文中的即可。

“insecure-registries”就是私服倉庫的位址,也就是現在的本機。

  1. 重新啟動docker
systemctl restart docker           

3、測試私服倉庫是否可以成功上傳鏡像

  1. 标記鏡像為私服倉庫鏡像

随便找一個鏡像,給這個鏡像打個标簽,證明他是私服倉庫的鏡像

docker tag testproject 192.168.1.11:5000/testproject           

查詢一下,标簽是否成功标記

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 上傳标簽鏡像到私服倉庫

docker push 主控端IP:私服端口号/鏡像名稱

docker push 192.168.1.11:5000/testproject           
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 浏覽器測試是否上傳成功
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 如圖,可以看到之前打包好的鏡像已經上傳成功!

4、項目伺服器設定私服倉庫位址

  1. 進入項目伺服器(192.168.1.12)
  2. 建立并設定Docker配置檔案
vim /etc/docker/daemon.json           
{
	"insecure-registries":["192.168.1.11:5000"]
}           

“insecure-registries”就是私服倉庫的位址

  1. 重新開機docker
systemctl restart docker           
  1. 拉取剛才上傳的私服鏡像,并檢視是否成功
docker pull 192.168.1.11:5000/testproject           
docker images           
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署

至此,Docker私服搭建已經全部完成,讓我們把它結合到Jenkins裡試試吧!

二、Jenkins流水線配置

Docker私服搭建成功之後,我們需要把他結合到Jenkins中,那麼怎麼結合,流程又是怎樣呢?其實很簡單,就是兩步:

  1. Jenkins主伺服器打包鏡像并上傳到Docker私服倉庫
  2. SSH到項目伺服器,然後拉取鏡像并運作

試一下,搞起來!

1、準備工作

參考一下我之前寫的這篇文章:

Jenkins以傳統jar包方式部署SpringBoot項目教程:Jenkins以傳統jar包方式部署SpringBoot項目教程

從這一篇教程中,除了最後一步的”Execute shell”不需要跟着做,其他都可以進行配置,包括:

(1)Jenkins安裝Maven、GitLab插件并進行Maven的全局配置

(2)建立流水線,配置項目git位址和分支,與GitLab挂鈎配置Webhooks

(3)選擇Maven Shell并配置Maven指令打包

建立完成後的效果:

(1)源碼管理

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署

(2)建構觸發器

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署

(3)建構環境

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署

(4)編譯項目

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署

到此為止,所有的前置條件全部準備完畢,我們開始進行Docker私服的部署!!!

2、建構Docker鏡像并上傳私服倉庫

  1. Dockerfile編寫并放入項目根目錄

Dockerfile檔案的寫法可以參考這篇連結:Dockerfile檔案編寫

  1. “Build Steps”中,Maven打包之後,點選“增加建構操作”,選擇“Execute shell”
  2. 在已選擇的“Execute shell”中,填寫指定Dockerfile的指令
#!/bin/bash

# 删除已經建構好的鏡像
docker rmi hhproject:latest

# 使用Dockerfile來建構自己的鏡像(testProject就是鏡像名稱,latest是版本号)
# 最後的“.”千萬不要忘記加
docker build -t hhproject:latest .

# 給建立好的鏡像打标簽
docker tag hhproject 192.168.1.11:5000/hhproject

# 給打好标簽的鏡像上傳的私服倉庫
docker push 192.168.1.11:5000/hhproject           
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 點選應用、儲存,傳回到流水線首頁
  2. 點選“Build Now”或者送出一次代碼,看一下是否開始建構
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 建構成功後,檢視一下浏覽器裡的私服位址,看一下鏡像是否上傳成功
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 可以看到,剛才推送的鏡像已經推送成功!

3、遠端伺服器寫腳本(拉取鏡像+啟動容器)

建立檔案夾和腳本檔案

mkdir -p /data/registry

cd /data/registry

vim deploy.sh           

腳本内容deploy.sh為:

#!/bin/bash

# 強制删除正在運作的容器
docker rm -f hhproject

# 删除原有的私服鏡像
docker rmi 192.168.1.11:5000/hhproject

# 重新拉取私服倉庫的鏡像
docker pull 192.168.1.11:5000/hhproject

# 根據打包好的鏡像來建立容器并啟動
docker run --name hhproject -p 8087:8085 -d 192.168.1.11:5000/hhproject:latest           

4、Jenkins配置SSH遠端指令

Jenkins安裝“Publish Over SSH”插件教程:Jenkins安裝“Publish Over SSH”插件教程

  1. 在剛才的”Execute shell“,繼續”增加建構操作“,選擇”Send files or execute commands over SSH“
  2. 在”SSH Server Name“中選擇項目伺服器,之前的系列文章中以有過配置
  3. 在最後一項”Exec command“中,執行剛才配置的啟動腳本
sh /data/registry/deploy.sh           

配置完成後,如圖:

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
  1. 點選應用,儲存,回到首頁,點選”Build Now“,測試是否建構成功

5、測試結果

剛才建構成功後,進入項目伺服器(192.168.1.12)。我們可以發現,私服倉庫的鏡像已經拉取成功,并且容器已經啟動成功。

從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署
從零實作DevOps(八):Jenkins結合Docker私服實作遠端自動部署

三、總結

至此,搭建Docker私服以及将私服運用到Jenkins遠端部署文章已經全部完成。主要的技術點在于:私服的容器啟動、遠端伺服器的Docker配置、以及遠端伺服器執行腳本的編寫。流程非常明确:主伺服器建構鏡像并上傳到私服倉庫,然後項目伺服器拉取鏡像并啟動。其實,到此為止,《從零實作DevOps》系列已經進入尾聲,還差一篇自動化部署微服務的文章,最近項目忙,有時間我會繼續更新。感謝大家喜歡,一起努力!!!

所有你想象的一切,皆是現實!