Day119 docker+jenkins
1.Dockerfile
Dockerfile 可以用于項目部署。通過編寫 Dockerfile,可以將整個項目及其所需的依賴項打包到一個 Docker 鏡像中,然后在任何支持 Docker 的環境中部署和運行該鏡像
Dockerfile 是用于構建 Docker 鏡像的文本文件。它包含一系列的指令,用于描述如何從一個基礎鏡像構建一個新的鏡像,并在其中安裝和配置軟件環境
1.1 編寫Dockerfile
1.1.1 準備工作
1.idea中對springboot項目打包,生產一個jar文件
注意:先clean,再package
2.jar文件上傳到Linux
1.1.2 創建Dockerfile文件
vim dockerfile
編寫dockerfile ,保存
FROM openjdk:8
MAINTAINER pcb
ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar #前一個是打包之后的名字,后面一個是重命名的名字
EXPOSE 1002 #要和后端項目的一致
ENTRYPOINT ["java","-jar","/FrameworkLearn.jar"] #重命名的jar名字
1.1.3 構建鏡像 images
docker build -t demo1234:latest -f Dockerfile .
如果沒有安裝docker,就看Day95 docker安裝
1.1.4 查看創建的鏡像
docker images
1.1.5 創建容器
docker run -id --name demo1234 -p 1002:1002 demo:latest #:1002要和項目的端口一致,前面那個無所謂
docker ps
docker logs -f demo1234
1.2 文件詳解
1.2.1 Dockerfile 文件
FROM openjdk:8
MAINTAINER pcb
ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar #前一個是打包之后的名字,后面一個是重命名的名字
EXPOSE 1002 #要和后端項目的一致
ENTRYPOINT ["java","-jar","/FrameworkLearn.jar"] #重命名的jar名字
1.FROM openjdk:8 :指定基礎鏡像為 openjdk:8 ,表示該鏡像將以 OpenJDK 1.8 作為基礎環境
2.MAINTAINER pcb :設置鏡像的作者
3.ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar :將主機上的 FrameworkLearn-0.0.1-SNAPSHOT.jar 文件添加到鏡像中,并指定目標路徑為 FrameworkLearn.jar
4.EXPOSE 9999 :聲明容器將監聽的端口號為 9999,要和后端項目的一致
5.ENTRYPOINT [“java”,“-jar”,“/FrameworkLearn.jar”]:設置容器的入口點,指定在容器啟動時要運行的命令。這里的配置表示以 Java 命令執行 /FrameworkLearn.jar 文件,即運行主類為 /FrameworkLearn.jar 的 Java 應用程序
1.2.2 構建鏡像
docker build -t demo1234:latest -f Dockerfile .
-t 選項: 用于指定構建鏡像后的鏡像名稱和標簽,格式為 -t <鏡像名稱>:<標簽> ,可以自定義鏡像名稱和標簽
-f 選項: 用于指定要使用的 Dockerfile 文件
默認情況下, docker build 命令會在構建上下文中尋找名為 Dockerfile 的文件進行構建
使用 -f 選項可以指定其他名稱的 Dockerfile 文件,以便構建時使用不同的 Dockerfile
. 選項: 表示 Dockerfile 文件所在的路徑是當前路徑
2.Docker Compose
Docker Compose 是一個用于定義和管理多個 Docker 容器的工具。Docker Compose 提供了一種聲明性的方式來定義和管理多個 Docker 容器,從而實現服務編排。通過一個單獨的 YAML 文件,您可以定義各個服務的配置、依賴關系、網絡連接和卷掛載等信息
2.1 安裝
第一種:docker-compose離線安裝文件:docker-compose-linux-x86_64
下載地址:https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64
進入/usr/local/bin目錄,上傳文件,對文件重命名,然后賦予執行權限:
cd /usr/local/bin
mv docker-compose-linux-aarch64 docker-compose
sudo chmod +x docker-compose
查看docker-compose版本號:
docker-compose --version
第二種:sudo curl -L “https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-(uname?s)?(uname -s)-(uname?s)?(uname -m)” -o /usr/local/bin/docker-compose 安裝
設置權限 sudo chmod +x /usr/local/bin/docker-compose
2.2 創建MySQL與Redis服務
目標:通過docker-compose創建MySQL與Redis容器
它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML格式)來定義一組相關聯的應用容器為一個項目(project)
1.先創建文件:docker-compose.yml
vim docker-compose.yml
2.編寫文件(注意:格式縮進問題,yaml格式)
version: "3.0"services:mysqldb:image: mysql:8.0container_name: mysqlports:- "3306:3306"volumes:- /root/mysql/conf:/etc/mysql/conf.d- /root/mysql/logs:/logs- /root/mysql/data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: rootdepends_on:- redisredis:image: redis:6.2.7container_name: redis ports:- "6379:6379"volumes:- /root/redis/data:/datacommand: redis-server
3.運行文件
# 默認運行當前目錄下的 docker-compose.yml 文件;
# 如果 docker-compose.yml 文件不在當前目錄,可以使用 -f 選項指定文件路徑:
docker-compose up
# -d 將容器設置為在后臺運行
docker-compose up -d
# -f 指定文件名
docker-compose -f /path/to/docker-compose.yml up -d
2.3 測試項目
1.創建一個 init.sql 文件,放在項目目錄下
2.創建文件:vim docker-compose-project.yml
version: "3.0"
services:mysql:image: mysql:8.0restart: alwayscontainer_name: mysql8.0command: --default-authentication-plugin=mysql_native_password # 解決外部無法訪問volumes:- ./data:/var/lib/mysql #掛載目錄,持久化存儲- ./init.sql:/docker-entrypoint-initdb.d/init.sqlports:- "3306:3306" # 容器端口映射到宿主機的端口environment:MYSQL_ROOT_PASSWORD: 'root' #設置密碼是root,賬號是rootMYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'securityrabc'mydemo: # 自己單獨的springboot項目container_name: demohostname: jetbuild: ./ # 需要構建的Dockerfile文件ports:- "8080:8080"depends_on:- mysqlframeworklearn:image: openjdk:8-jdk-alpine # 使用Alpine版本的OpenJDK鏡像container_name: frameworklearnworking_dir: /root/pcb volumes:- ./FrameworkLearn-0.0.1-SNAPSHOT.jar:/root/pcb/FrameworkLearn-0.0.1-SNAPSHOT.jar command: ["java", "-jar", "/root/pcb/FrameworkLearn-0.0.1-SNAPSHOT.jar"] # 啟動命令ports:- "1002:1002" # 容器端口映射到宿主機的端口depends_on: # web服務依賴mysql服務,要等mysql服務先啟動- mysql
3.運行
docker-compose -f docker-compose-project.yml up -d
打印日志
docker-compose -f docker-compose-project.yml logs frameworklearn
注意: 服務器要開放1002端口
代碼里面的yaml文件
server:# 服務端口port: 1002# 應用上下文路徑servlet:context-path: /FrameworkLearntomcat:uri-encoding: UTF-8spring:# 數據源配置(Druid)datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverdruid:url: jdbc:mysql://mysql:3306/securityrabc?characterEncoding=utf-8 #修改為mysql:3306username: rootpassword: root
運行 http://47.108.146.63:1002/FrameworkLearn/test1
3.CICD
3.1 概念
CICD:持續集成/持續發布—開發(git) --> git主庫 –> jenkins(git+jdk+tomcat+maven打包+測試)–> 發布到tomcat服務器
Jenkins是一個功能強大的應用程序,允許持續集成和持續交付項目,無論用的是什么平臺。這是一個免費的源代碼,可以處理任何類型的構建或持續集成。集成Jenkins可以用于一些測試和部署技術,Jenkins是一種軟件
3.2 CI / CD 方法簡介
軟件開發的連續方法基于自動執行腳本,以最大限度地減少在開發應用程序時引入錯誤的可能性。從新代碼的開發到部署,它們需要較少的人為干預甚至根本不需要干預
它涉及在每次小迭代中不斷構建,測試和部署代碼更改,從而減少基于有缺陷或失敗的先前版本開發新代碼的機會
這種方法有三種主要方法,每種方法都根據最適合您的策略進行應用。
持續集成( CI):代碼合并,構建,部署,測試都在一起,不斷地執行這個過程,并對結果反饋
持續部署(CD):部署到測試環境、預生產環境/灰度環境、生產環境
持續交付(CD):將最終產品發布到生產環境、給用戶使用
4.Jenkins 姐肯死
概述
Jenkins是幫我們將代碼進行統一的編譯打包、還可以放到tomcat容器中進行發布
我們通過配置,將以前:編譯、打包、上傳、部署到Tomcat中的過程交由Jenkins,Jenkins通過給定的代碼地址URL(代碼倉庫地址),將代碼拉取到其“宿主服務器”(Jenkins的安裝位置),進行編譯、打包和發布到Tomcat容器中
Jenkins目標
1.持續、自動地構建/測試軟件項目
2.監控軟件開放流程,快速問題定位及處理,提高開發效率
Jenkins特性
1.開源的java語言開發持續集成工具,支持CICD
2.易于安裝部署配置:可通過yum安裝或下載war包以及通過docker容器等快速實現安裝部署,可方便web界面配置管理
3.消息通知及測試報告:集成RSS/E-mail通過RSS發布構建結果或當構建完成時通過e-mail通知,生成JUnit測試報告
4.分布式構建:支持Jenkins能夠讓多臺計算機一起構建/測試
工作流程:
1.首先,開發人員將代碼提交到 Git 倉庫
2.然后 Jenkins 使用 Git 插件來拉取 Git 倉庫的代碼,然后配合 JDK、Maven 等軟件完成代碼編譯, 測試、審查、測試和打包等工作
3.最后 Jenkins 將生成的 jar/war 推送到 測試/生產 服務器 ,供用戶訪問
4.整套步驟下來,作為開發人員我們只需要提交下代碼,剩下的工作都交給了 Jenkins
4.1 環境準備
安裝jdk、maven、git、docker、docker-compose
4.1.1 安裝jdk
yum install java-1.8.0-openjdk.x86_64
java -version
4.1.2 安裝maven
下載 maven linux版本
https://maven.apache.org/download.cgi
上傳到linux 下面的opt下面的soft ,解壓到/usr/local/
tar -xvf apache-maven-3.9.11-bin.tar.gz -C /usr/local
配置maven倉庫,設置阿里鏡像倉庫
cd /usr/local
cd apache-maven-3.9.11
mkdir ck #創建ck倉庫存儲目錄
進入cd conf目錄,編輯 vi settings.xml文件
配置maven的倉庫位置
cd conf # 進入conf目錄
vi settings.xml # settings.xm文件<localRepository>/usr/local/apache-maven-3.9.11/ck</localRepository><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
配置maven環境變量
vi /etc/profileexport MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/binsource /etc/profile #重新加載,使新增配置生效
mvn -v
4.1.3 安裝git
yum -y install git # 安裝
git version # 安裝是否成功
4.2 安裝Jenkins
1.下載rpm文件:Index of jenkins-local/redhat,選擇合適的版本。這里我選擇了jenkins-2.344-1.1.noarch.rpm,因為低版本很多插件不支持,要更新版本
2.新建目錄存放安裝包
cd /optmkdir jenkins # 新建目錄rpm -ivh jenkins-2.344-1.1.noarch.rpm # 上傳.rpm文件之后,安裝
3.查看Jenkins的相關目錄:rpm -ql jenkins
4.修改配置文件 vim /usr/lib/systemd/system/jenkins.service
# 修改用戶和權限
User=root
Group=root# 修改JDK路徑
Environment="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.462.b08-2.0.1.1.al8.x86_64/jre" # 修改啟動端口
Environment="JENKINS_PORT=36080"
5.刷新配置文件 systemctl daemon-reload
6.開啟防火墻和指定端口
# 開啟防火墻
systemctl start firewalld
# 開放指定端口
firewall-cmd --zone=public --add-port=36080/tcp --permanent
# 重啟防火墻
firewall-cmd --reload
# 查看所有端口使用情況
netstat -ntlp
7.服務器開放63080端口
8.啟動Jenkins,訪問
# 啟動
systemctl start jenkins
# 停止
systemctl stop jenkins
9.啟動完成后,輸入服務器ip+端口訪問,初次訪問會有一個初始密碼
cat /var/lib/jenkins/secrets/initialAdminPassword #查看初始密碼
注意:記得下載中文插件及設置密碼