springboot項目打包鏡像方式以及區(qū)分環(huán)境打包的方法
方法一:將項目jar包手動推送到docker服務器上
1.用maven對項目進行打包,打包成功后會有一個target目錄,目錄下有打好的項目jar包


2.將jar包上傳到服務器上,我用的是finalshell工具,大家可以自己根據自己使用的工具將文件傳送到服務器上

3.在跟jar包同級目錄下寫Dockerfile文件

dockerfile文件具體內容
FROM openjdk:11 #基于哪些鏡像進行構建 MAINTAINER gpj #作者名稱 # # 將jar包添加到容器中,并命名為 springboot_docker.jar ADD demo-0.0.1-SNAPSHOT.jar /demo.jar # 運行jar包 RUN bash -c 'touch demo.jar' ENTRYPOINT ["java", "-jar", "demo.jar"] # 設置時區(qū) RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone # SpringBoot項目配置的端口號為9999,需要將9999暴露出去 EXPOSE 9999
4.執(zhí)行docker build命令
docker build -f Dockerfile -t demo:1.0 .

5.查看鏡像
docker images

可以看到剛剛打包的鏡像
6.運行容器
docker run -d --name dmeo -p 9999:9999 demo:1.0

查看容器是否在運行
docker ps

服務器開放9999端口
firewall-cmd --zone=public --add-port=9999/tcp --permanent systemctl restart firewalld
調用后端方法

方法二:在idea中安裝docker插件,通過插件部署
1.安裝docker插件
進入項目,點擊File->Settings->Plugins,docker插件是默認安裝上的,可以先去Installed中查看是否已經安裝

如果未安裝可以點擊Marketplace,在搜索框中搜索docker,點擊Installed進行安裝

2.打開docker遠程訪問
修改docker.service文件
Docker 安裝成功之后,首先需要修改 Docker 配置來開啟允許遠程訪問 Docker 的功能。
文件位置:/lib/systemd/system/docker.service
修改內容: 加入如下內容:
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

服務器開放2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent systemctl restart firewalld
重啟docker
systemctl daemon-reload systemctl restart docker
3.在idea的docker插件中配置docker遠程訪問的地址
在idea項目中點擊File->settings->Build->Docker

4.在項目根目錄和pom文件同級的地方寫Dockerfile文件
dockerfile文件的具體內容
FROM openjdk:11 MAINTAINER jyz # # 將jar包添加到容器中,并命名為 springboot_docker.jar ADD demo-0.0.1-SNAPSHOT.jar /demo.jar # 運行jar包 RUN bash -c 'touch demo.jar' ENTRYPOINT ["java", "-jar", "demo.jar"] # 設置時區(qū) RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone # SpringBoot項目配置的端口號為9999,需要將9999暴露出去 EXPOSE 9999
5.在啟動配置那里編輯docker配置


之后點擊執(zhí)行


可以根據方法一中的最后兩步進行驗證
方法三:用maven插件進行構建
開啟docker遠程訪問,詳細步驟見方法二
將dockerfile文件放到resource文件夾下
1.在pom文件中引入docker插件

pom文件詳細內容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<properties>
<java.version>11</java.version>
<docker-ip>服務器IP</docker-ip>
<docker-url>http://${docker-ip}:2375</docker-url>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.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>
<dockerHost>${docker-url}</dockerHost>
<imageName>${project.artifactId}:${project.version}</imageName>
<!-- 在生成圖像后將其推入的標志。默認為false -->
<pushImage>true</pushImage>
<imageTags>
<!-- 指定鏡像標簽,可以排至多個標簽 -->
<imageTag>${project.version}</imageTag>
</imageTags>
<!--是否強制覆蓋已有鏡像-->
<forceTags>true</forceTags>
<!--方式一:1、指定Dockerfile文件所在目錄,通過文件執(zhí)行打包上傳nexus私服-->
<dockerDirectory>src/main/resources</dockerDirectory>
<!-- 指定docker鏡像打包參數,即dockerfile中使用的參數,通過${參數名}取值 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--指定需要復制的根目錄,${project.build.directory}表示target目錄-->
<directory>${project.build.directory}</directory>
<!--用于指定需要復制的文件,${project.build.finalName}.jar表示打包后的jar包文件-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>2.運行mvn build命令
mvn docker:build

成功打包成鏡像
可以根據方法一中的最后兩步進行驗證
基于第三步的配置進行鏡像區(qū)分環(huán)境
以下文件需要配置到pom文件中,這里的配置每一個profile標簽都是獨立的,只有在打包的時候才會用到,也就是執(zhí)行 mvn命令時通過 -P這個指令指定profile標簽的id那么打包所用的一些參數配置會以你制定的profile為準。
<profiles>
<profile>
<!--不同環(huán)境Profile的唯一id-->
<id>dev</id>
<properties>
<!--profiles.active是自定義的字段(名字隨便起),自定義字段可以有多個-->
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<!--properties標簽下定義的標簽是個性化的,根據業(yè)務項目需要定制不同標簽,-->
<properties>
<profiles.active>prod</profiles.active>
<docker-url>服務器IP:2375</docker-url>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
<docker-url>服務器IP:2375</docker-url>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>此時把之前在pom中<properties>定義的docker-url刪除,在執(zhí)行mvn打包鏡像命令時添加 -P
<!--這里如果鏡像統(tǒng)一都是由一個docker服務器打包的話,在鏡像的名字中添加上test或者prod,再或者其他標識不同環(huán)境的信息即可,我這里是使用的profiles.active作區(qū)分,對應的是我上面聲明的環(huán)境信息-->
<imageName>${project.artifactId}-${profiles.active}:${project.version}</imageName>mvn -Ptest docker:build
到此這篇關于springboot項目打包鏡像方式以及區(qū)分環(huán)境打包的方法的文章就介紹到這了,更多相關springboot 打包鏡像內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java?Http請求方式之RestTemplate常用方法詳解
這篇文章主要為大家介紹了Java?Http請求方式之RestTemplate常用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09

