前言
??Docker部署項(xiàng)目是指使用Docker容器化技術(shù)將應(yīng)用程序及其依賴項(xiàng)打包成一個(gè)獨(dú)立的、可移植的運(yùn)行環(huán)境,并在各種操作系統(tǒng)和平臺上進(jìn)行部署和運(yùn)行。
??使用Docker的主要原因是解決了應(yīng)用程序在不同環(huán)境中部署和運(yùn)行的問題。傳統(tǒng)上,應(yīng)用程序在部署時(shí)需要考慮操作系統(tǒng)、軟件版本、依賴項(xiàng)等因素,不同環(huán)境之間存在差異,導(dǎo)致部署和運(yùn)維變得復(fù)雜。
??Docker可以將應(yīng)用程序及其所有依賴項(xiàng)打包成一個(gè)獨(dú)立的容器,該容器包含了應(yīng)用程序運(yùn)行所需的所有組件,如操作系統(tǒng)、庫、運(yùn)行時(shí)環(huán)境等。這樣,無論在哪個(gè)環(huán)境中部署,只需要安裝Docker并運(yùn)行容器,就可以保證應(yīng)用程序在各個(gè)環(huán)境中的一致性和可移植性。
準(zhǔn)備
- maven項(xiàng)目(java)
- nexus(鏡像倉庫)
- gitLab(代碼倉庫)
- jenkins構(gòu)建工具
- 安裝了docker的服務(wù)器
實(shí)操
1、打開docker的遠(yuǎn)程訪問
??Docker 安裝成功之后,首先需要修改 Docker 配置來開啟允許遠(yuǎn)程訪問 Docker 的功能。
文件位置:/lib/systemd/system/docker.service
??修改內(nèi)容: 加入如下內(nèi)容:
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
??服務(wù)器開放2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
systemctl restart firewalld
??重啟docker
systemctl daemon-reload
systemctl restart docker
2、編寫dockerfile文件
??dockerfile文件用來生成docker鏡像,鏡像就像安裝包,可以運(yùn)行為一個(gè)個(gè)的容器。
??將dockerfile文件放到resource文件夾下。
FROM openjdk:11
# 將jar包添加到容器中,并命名為 demo.jar
COPY merit-excitation-*.jar /home/admin/merit-backend/merit-excitation-*.jar
#COPY agent /home/admin/agent
# 設(shè)置環(huán)境變量
ENV SPRING_NACOS_SERVERADDRESS='nacos.tfjy.tech:8848'
ENV SPRING_NACOS_NAMESPACE='merit-test'
# 設(shè)置時(shí)區(qū)
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 啟動jar包命令
#CMD java -javaagent:/home/admin/agent/skywalking-agent.jar -DSW_AGENT_NAME=merit-excitation -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking.tfjy.tech:11800 -Xms228m -Xmx228m -Dspring.cloud.nacos.config.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.config.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.config.username=merit -Dspring.cloud.nacos.config.password=merit -Dspring.cloud.nacos.discovery.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.discovery.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.discovery.username=merit -Dspring.cloud.nacos.discovery.password=merit -jar /home/admin/merit-backend/merit-excitation-*.jar
CMD java -Xms228m -Xmx228m -Dspring.cloud.nacos.config.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.config.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.config.username=merit -Dspring.cloud.nacos.config.password=merit -Dspring.cloud.nacos.discovery.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.discovery.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.discovery.username=merit -Dspring.cloud.nacos.discovery.password=merit -jar /home/admin/merit-backend/merit-excitation-*.jar
# SpringBoot項(xiàng)目配置的端口號為9001,需要將9001暴露出去
EXPOSE 9071
3、指定nexus環(huán)境
??父pom:
<profiles>
<profile>
<!--不同環(huán)境Profile的唯一id-->
<id>dev</id>
<properties>
<!--profiles.active是自定義的字段(名字隨便起),自定義字段可以有多個(gè)-->
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<docker-url>http://192.168.0.100:2375</docker-url>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
<docker-url>http://192.168.0.200:2375</docker-url>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
??子pom
<parent>
<artifactId>merit-backend</artifactId>
<groupId>com.xxx</groupId>
<version>1.0.15</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>merit-template</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<registry-url>192.168.0.xxx:8083</registry-url>
<skipTests>true</skipTests><!--編譯打包跳過測試類-->
</properties>
<build>
<finalName>${project.artifactId}-${project.parent.version}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<serverId>docker-local</serverId>
<dockerHost>${docker-url}</dockerHost>
<imageName>${registry-url}/${project.artifactId}-${profiles.active}:${project.parent.version}</imageName>
<!--nexus3 hosted 倉庫地址-->
<registryUrl>${registry-url}</registryUrl>
<!-- 在生成圖像后將其推入的標(biāo)志。默認(rèn)為false -->
<pushImage>true</pushImage>
<imageTags>
<!-- 指定鏡像標(biāo)簽,可以排至多個(gè)標(biāo)簽 -->
<imageTag>${project.version}</imageTag>
</imageTags>
<!--是否強(qiáng)制覆蓋已有鏡像-->
<forceTags>true</forceTags>
<!--方式一:1、指定Dockerfile文件所在目錄,通過文件執(zhí)行打包上傳nexus私服-->
<dockerDirectory>src/main/resources</dockerDirectory>
<!-- 指定docker鏡像打包參數(shù),即dockerfile中使用的參數(shù),通過${參數(shù)名}取值 -->
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<resources>
<resource>
<targetPath>/</targetPath>
<!--指定需要復(fù)制的根目錄,${project.build.directory}表示target目錄-->
<directory>${project.build.directory}</directory>
<!--用于指定需要復(fù)制的文件,${project.build.finalName}.jar表示打包后的jar包文件-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
4、配置jenkins
??新建一個(gè)maven項(xiàng)目的任務(wù)
??舊版本管理
??設(shè)置參數(shù)
??設(shè)置git,指定代碼分支
??打包鏡像的命令
#!/bin/bash
echo admin | sudo -S docker stop merit-excitation
# 刪除舊的容器
echo admin | sudo -S docker rm -f merit-excitation
# 刪除舊版鏡像
echo admin | sudo -S docker rmi 192.168.0.xxx:8083/merit-excitation-prod:${old_version}
#刪除所有懸空鏡像
echo admin | sudo -S docker rmi $(echo admin | sudo -S docker images -f "dangling=true" -q)
# 啟動鏡像
echo admin | sudo -S docker run --net=host --restart=always -d --name merit-excitation -p 9071:9071 -e SPRING_NACOS_NAMESPACE=merit-prod -v /home/admin/logs:/logs 192.168.0.xxx:8083/merit-excitation-prod:${new_version}
exit
5、使用jenkins構(gòu)建
??構(gòu)建時(shí)要?jiǎng)h除舊版鏡像,根據(jù)版本號刪除鏡像,防止占用服務(wù)器空間。
文章來源:http://www.zghlxwxcb.cn/news/detail-706621.html
總結(jié)
??配置好以后把鏡像推到服務(wù)器上運(yùn)行就很簡單了。文章來源地址http://www.zghlxwxcb.cn/news/detail-706621.html
到了這里,關(guān)于項(xiàng)目打包docker鏡像 | 上傳nexus | jenkins一鍵構(gòu)建的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!