視頻參考:https://www.bilibili.com/video/BV1Vp4y1b7ZN?p=51
1. Jenkins+Docker+SpringCloud持續集成流程說明

大致流程說明:
1)開發人員每天把代碼提交到Gitlab代碼倉庫
2)Jenkins從Gitlab中拉取專案原始碼,編譯并打成jar包,然后構建成Docker鏡像,將鏡像上傳到Harbor私有倉庫,
3)Jenkins發送SSH遠程命令,讓生產部署服務器到Harbor私有倉庫拉取鏡像到本地,然后創建容器,
4)最后,用戶可以訪問到容器
服務串列

2.環境準備
2.1 SpringCloud微服務原始碼概述
專案架構: 前后端分離
后端技術堆疊: SpringBoot+SpringCloud+SpringDataJpa(Spring全家桶)
微服務專案結構:

tensquare_parent:父工程,存放基礎配置
tensquare_common:通用工程,存放工具類
tensquare_eureka_server:SpringCloud的Eureka注冊中心
tensquare_zuul:SpringCloud的網關服務
tensquare_admin_service:基礎權限認證中心,負責用戶認證(使用JWT認證)
tensquare_gathering:一個簡單的業務模塊,活動微服務相關邏輯
資料庫結構:

(1)本地部署微服務
SpringBoot微服務專案打包,必須在pom中匯入該插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
打包后在target下產生jar包
前端靜態web網站
前端技術堆疊: NodeJS+VueJS+ElementUI
使用Visual Studio Code打開原始碼
1)本地運行
npm run dev
打包靜態web網站
npm run build
打包后,產生dist目錄的靜態檔案
3)部署到nginx服務器
把dist目錄的靜態檔案拷貝到nginx的html目錄,啟動nginx
4)啟動nginx,并訪問
http://localhost:82
2.2 Docker安裝和配置
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實作虛擬化,
容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器性能開銷極低,
Docker容器技術 vs 傳統虛擬機技術


Docker技術就是讓我們更加高效輕松地將任何應用在Linux服務器部署和使用
2.2.1 Docker安裝
(1)卸載舊版本
yum list installed | grep docker 列出當前所有docker的包
yum -y remove docker的包名稱 卸載docker包
rm -rf /var/lib/docker 洗掉docker的所有鏡像和容器
(2)安裝必要的軟體包
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
(3)設定下載的鏡像倉庫
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/dockerce.repo
(4)列出需要安裝的版本串列
yum list docker-ce --showduplicates | sort -r
5)安裝指定版本
sudo yum install docker-ce-18.06.1.ce
6)查看版本
docker -v
7)啟動Docker
sudo systemctl start docker 啟動
sudo systemctl enable docker 設定開機啟動
8)添加阿里云鏡像下載地址
vi /etc/docker/daemon.json
內容如下
{
"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"]
}
9)重啟Docker
sudo systemctl restart docker
Docker基本命令快速入門
1)鏡像命令
鏡像:相當于應用的安裝包,在Docker部署的任何應用都需要先構建成為鏡像
docker search 鏡像名稱 搜索鏡像
docker pull 鏡像名稱 拉取鏡像
docker images 查看本地所有鏡像
docker rmi -f 鏡像名稱 洗掉鏡像
docker pull openjdk:8-jdk-alpine
2)容器命令
容器:容器是由鏡像創建而來,容器是Docker運行應用的載體,每個應用都分別運行在Docker的每個容器中
docker run -i 鏡像名稱:標簽 運行容器(默認是前臺運行)
docker ps 查看運行的容器
docker ps -a 查詢所有容器
常用的引數:
-i:運行容器
-d:后臺守方式運行(守護式)
–name:給容器添加名稱
-p:公開容器埠給當前宿主機
-v:掛載目錄
docker exec -it 容器ID/容器名稱 /bin/bash 進入容器內部
docker start/stop/restart 容器名稱/ID 啟動/停止/重啟容器
docker rm -f 容器名稱/ID 洗掉容器
2.3 Dockerfile鏡像腳本快速入門
Dockerfile其實就是我們用來構建Docker鏡像的原始碼,當然這不是所謂的編程原始碼,而是一些命令的組合,只要理解它的邏輯和語法格式,就可以撰寫Dockerfile了,
簡單點說,Dockerfile的作用:它可以讓用戶個性化定制Docker鏡像,因為作業環境中的需求各式各樣,網路上的鏡像很難滿足實際的需求,
dockerfile常見命令

鏡像構建示意圖:

可以看到,新鏡像是從基礎鏡像一層一層疊加生成的,每安裝一個軟體,就在現有鏡像的基礎上增加一層,
RUN、CMD、ENTRYPOINT的區別?
RUN:用于指定 docker build 程序中要運行的命令,即是創建 Docker 鏡像(image)的步驟
CMD:設定容器的啟動命令, Dockerfile 中只能有一條 CMD 命令,如果寫了多條則最后一條生效,CMD不支持接收docker run的引數,
ENTRYPOINT:入口程式是容器啟動時執行的程式, docker run 中最后的命令將作為引數傳遞給入口程式 ,ENTRYPOINY類似于 CMD 指令,但可以接收docker run的引數 ,
以下是mysql官方鏡像的Dockerfile示例:
FROM oraclelinux: 7 - slim
ARG MYSQL_SERVER_PACKAGE = mysql - community - server - minimal - 5.7.28
ARG MYSQL_SHELL_PACKAGE = mysql - shell - 8.0.18
# Install server
RUN yum install -y https://repo.mysql.com/mysql-community-minimal-release- el7.rpm \
https://repo.mysql.com/mysql-community-release-el7.rpm \
&& yum-config-manager --enable mysql57-server-minimal \
&& yum install -y \
$MYSQL_SERVER_PACKAGE \
$MYSQL_SHELL_PACKAGE \
libpwquality \
&& yum clean all \
&& mkdir /docker-entrypoint-initdb.d
VOLUME /var/lib/mysql COPY docker-entrypoint.sh /entrypoint.sh
COPY healthcheck.sh /healthcheck.sh
ENTRYPOINT ["/entrypoint.sh"]
HEALTHCHECK CMD /healthcheck.sh
EXPOSE 3306 33060
CMD ["mysqld"]
使用Dockerfile制作微服務鏡像
我們利用Dockerfile制作一個Eureka注冊中心的鏡像
1)上傳Eureka的微服務jar包到linux的某個目錄下
2)在撰寫Dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 10086
ENTRYPOINT ["java","-jar","/app.jar"]
3)構建鏡像
docker build --build-arg JAR_FILE=tensquare_eureka_server-1.0-SNAPSHOT.jar -t eureka:v1 .
注意最后有一個.表示當前路徑
4)查看鏡像是否創建成功
docker images
5)創建容器
docker run -i --name=eureka -p 10086:10086 eureka:V1
6)訪問容器
http://192.168.66.101:10086
2.4.Harbor鏡像倉庫安裝及使用
Harbor(港口,港灣)是一個用于存盤和分發Docker鏡像的企業級Registry服務器,
除了Harbor這個私有鏡像倉庫之外,還有Docker官方提供的Registry,相對Registry,Harbor具有很多優勢:
- 提供分層傳輸機制,優化網路傳輸 Docker鏡像是是分層的,而如果每次傳輸都使用全量檔案(所以用FTP的方式并不適合),顯然不經濟,必須提供識別分層傳輸的機制,以層的UUID為標識,確定傳輸的物件,
- 提供WEB界面,優化用戶體驗 只用鏡像的名字來進行上傳下載顯然很不方便,需要有一個用戶界面可以支持登陸、搜索功能,包括區分公有、私有鏡像,
- 支持水平擴展集群 當有用戶對鏡像的上傳下載操作集中在某服務器,需要對相應的訪問壓力作分解,
- 良好的安全機制 企業中的開發團隊有很多不同的職位,對于不同的職位人員,分配不同的權限,具有更好的安全性,
2.4.1 HarBor安裝
需要安裝在92.168.66.102上面
1)先安裝Docker并啟動Docker(參考以前的)
2)安裝docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker- compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
3)給docker-compose添加執行權限
sudo chmod +x /usr/local/bin/docker-compose
4)查看docker-compose是否安裝成功
docker-compose -version
5)下載Harbor的壓縮包(本課程版本為:v1.9.2)
https://github.com/goharbor/harbor/releases
6)上傳壓縮包到linux,并解壓
tar -xzf harbor-offline-installer-v1.9.2.tgz
mkdir /opt/harbor
mv harbor/* /opt/harbor
cd /opt/harbor
7)修改Harbor的配置
vi harbor.yml
修改hostname和port
hostname: 192.168.66.102
port: 85
8)安裝Harbor
./prepare
./install.sh
9)啟動harbor
docker-compose up -d 啟動
docker-compose stop 停止
docker-compose restart 重新啟動
10)訪問Harbor
http://192.168.66.102:85
默認賬戶密碼:admin/Harbor12345

2.4.2在Harbor創建用戶和專案
1)創建專案
Harbor的專案分為公開和私有的:
公開專案:所有用戶都可以訪問,通常存放公共的鏡像,默認有一個library公開專案,
私有專案:只有授權用戶才可以訪問,通常存放專案本身的鏡像,
我們可以為微服務專案創建一個新的專案:


2)創建用戶


創建的用戶為: itcast/Itcast123
3)給私有專案分配用戶
進入tensquare專案->成員




4)以新用戶登錄Harbor

2.4.3 把鏡像上傳到Harbor
1)給鏡像打上標簽
docker tag eureka:v1 192.168.66.102:85/tensquare/eureka:v1
2)推送鏡像
docker push 192.168.66.102:85/tensquare/eureka:v1
如果出現以下錯誤:
The push refers to repository [192.168.66.102:85/tensquare/eureka]
Get https://192.168.66.102:85/v2/: http: server gave HTTP response to HTTPS client
解決方法:把Harbor地址加入到Docker信任串列
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.66.102:85"]
}
需要重啟Docker
4)再次執行推送命令,會提示權限不足
denied: requested access to the resource is denied
需要先登錄Harbor,再推送鏡像
5)登錄Harbor
docker login -u 用戶名 -p 密碼 192.168.66.102:85

從Harbor下載鏡像(注意這個是在103機器上修改和前面的有區別)
需求:在192.168.66.103服務器完成從Harbor下載鏡像
1)安裝Docker,并啟動Docker(已經完成)
2)修改Docker配置
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.66.102:85"]
}
重啟docker
3)先登錄,再從Harbor下載鏡像
docker login -u 用戶名 -p 密碼 192.168.66.102:85
docker pull 192.168.66.102:85/tensquare/eureka:v1
3.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486531.html
標籤:Java
下一篇:URI和URL的區別說明
