Springboot2.0學習11 使用maven插件打包docker部署應用

一、本文目標

  • 使用Maven插件構建SpringBoot應用的docker鏡像
  • 鏡像推送至Docker Registry
  • 啟動容器

本文開發環境 :

  • jdk1.8
  • maven
  • idea
  • SpringBoot2.2
  • 本文使用 com.spotify 的 docker-maven-plugin插件執行docker命令。據說官方不再推薦使用該插件,而是使用 dockerfile-maven-plugin 代替。
  • 本文需要提前搭建docker registry,並且設置允許 http 推送。

二、實現步驟

1. 創建SpringBoot項目

項目結構:

Springboot2.0學習11 使用maven插件打包docker部署應用

入口程序 HelloApplication

<code>

HelloController控制器

<code>

pom.xml設置打包插件

<code>
<project> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelversion>4.0.0/<modelversion>

<groupid>com.xundh.springboot/<groupid>
<artifactid>docker/<artifactid>
<version>1.0-SNAPSHOT/<version>
<properties>
<project.build.sourceencoding>UTF-8/<project.build.sourceencoding>
<maven.compiler.source>1.8/<maven.compiler.source>
<maven.compiler.target>1.8/<maven.compiler.target>
<project.reporting.outputencoding>UTF-8/<project.reporting.outputencoding>
<java.version>1.8/<java.version>
/<properties>
<parent>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-parent/<artifactid>
<version>2.2.2.RELEASE/<version>
<relativepath>
/<parent>
<dependencies>
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-web/<artifactid>
<version>2.2.2.RELEASE/<version>
/<dependency>

/<dependencies>
<build>
<finalname>hello/<finalname>
<resources>
<resource>
<directory>src/main/resources/<directory>
<filtering>true/<filtering>
/<resource>

/<resources>
<plugins>
<plugin>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-maven-plugin/<artifactid>
/<plugin>
/<plugins>
/<build>
/<project>/<code>

2. 打包並運行項目

<code>

訪問網址: http://localhost:8080/hello
看到界面輸出: hello world

3. 添加docker支持

在resources下新建Dockerfile,輸入內容:

<code>FROM java:8
MAINTAINER "xundh"<[email protected]>
ADD hello.jar app.jar
EXPOSE 8080
CMD java -jar app.jar/<code>

這裡,使用:

  • jdk1.8
  • add指令將hello.jar複製到docker容器中,重命名為app.jar
  • 開啟8080端口
  • 使用命令行 java -jar app.jar運行程序

4. 使用maven插件構建docker鏡像

<code>

插件配置說明:

  • imageName: 鏡像的完整名稱
  • dockerDirectory: 用於指定Dockerfile文件所在的目錄
  • resources.resource.directory: 用於指定需要複製的根目錄
  • resources.resource.include: 用於指定需要複製的文件
  • ${docker.registry} 註冊中心地址
  • ${project.groupId} 倉庫名稱
  • ${project.artifactId} 鏡像名稱
  • ${project.version} 鏡像標籤名
  • ${project.build.directory} 表示target目錄
  • ${project.build.finalName}.jar 生成的jar包

5. 構建鏡像

<code>mvn docker:build
# 查看鏡像
sudo docker images/<code>
Springboot2.0學習11 使用maven插件打包docker部署應用

  • 這裡構建鏡像,是直接使用服務器上的docker打包,所以打包以後使用docker images就可以直接看到鏡像。下一步推送可以不需要操作。
  • 打包出來的包比較大,因為java image本身就有6百多兆,加上自己的應用就不會少於600多兆。
  • 使用openjdk可以縮小體積。

6. 鏡像推送到Docker Registry

<code>mvn docker:push/<code>

7. 到服務器運行鏡像

<code>sudo docker run -d -p 80:8080 9512b0da843d/<code>

訪問網址:
http://服務器ip/hello
可以看到打印 hello world字樣


分享到:


相關文章: