1. 程式人生 > 程式設計 >Maven一鍵部署Springboot到Docker倉庫為自動化做準備(推薦)

Maven一鍵部署Springboot到Docker倉庫為自動化做準備(推薦)

1 前言

前面《Springboot整合MongoDB的Docker開發,其它應用也類似》講解了如何做Docker開發、如何把Springboot應用打包成一個映象,但它是手動的,本文將講解如何通過maven一鍵打包部署。

2 兩個maven外掛搞定

可以使用maven外掛實現一鍵部署,這兩個外掛還是同一個公司的產品,就是著名的音樂流服務平臺Spotify

Maven一鍵部署Springboot到Docker倉庫為自動化做準備(推薦)

2.1 spotify/docker-maven-plugin

2.1.1 基礎用法

該外掛可以實現映象打包和push到倉庫,無Dockerfile和有Dockerfile兩種方式都可以,建議使用Dockerfile,更靈活。在maven

pom.xml檔案加入以下外掛配置:

<plugin>
 <groupId>com.spotify</groupId>
 <artifactId>docker-maven-plugin</artifactId>
 <version>1.2.2</version>
 <configuration>
 <imageName>pkslow/springboot-mongo</imageName>
 <imageTags>
  <imageTag>${imageVersion}</imageTag>
  <imageTag>latest</imageTag>
 </imageTags>
 <!-- optionally overwrite tags every time image is built with docker:build -->
 <forceTags>true</forceTags>
 <dockerDirectory>${project.basedir}</dockerDirectory>
 <resources>
  <resource>
  <targetPath>/</targetPath>
  <directory>${project.build.directory}</directory>
  <include>${project.build.finalName}.jar</include>
  </resource>
 </resources>
 </configuration>
</plugin>
  • imageName:這是映象名稱;
  • imageTags:標籤,支援多標籤,即同一個映象檔案多個標籤;我指定了一個引數imageVersion,可以命令列傳入,方便後續整合Jenkins
  • forceTags:是否覆蓋原有標籤;
  • dockerDirectory:Dockerfile檔案所在的位置;而且該目錄下的所有檔案都會被複制到${project.build.directory}/docker。因為我的Dockerfile放在專案根目錄,所以整個專案的檔案都複製過去了,包括原始碼等。不得不吐槽一下這個設計,這是在強迫大家換個位置放Dockerfile嗎?
  • resources
    :用來新增dockerDirectory外的其它資原始檔。

新增後,通過以下命令執行:

$ mvn clean package docker:build -DimageVersion=0.0.4

通過命令docker images檢視成功,執行也正常。

通過下面命令可以push到registry

mvn clean package docker:build -DpushImage

mvn clean package docker:build -DpushImageTag

2.1.2 與maven生命週期繫結

可以通過新增executions配置實現與maven生命週期的繫結。

<plugin>
 <groupId>com.spotify</groupId>
 <artifactId>docker-maven-plugin</artifactId>
 <version>VERSION GOES HERE</version>
 <executions>
 <execution>
  <id>build-image</id>
  <phase>package</phase>
  <goals>
  <goal>build</goal>
  </goals>
 </execution>
 <execution>
  <id>tag-image</id>
  <phase>package</phase>
  <goals>
  <goal>tag</goal>
  </goals>
  <configuration>
  <image>my-image:${project.version}</image>
  <newName>registry.example.com/my-image:${project.version}</newName>
  </configuration>
 </execution>
 <execution>
  <id>push-image</id>
  <phase>deploy</phase>
  <goals>
  <goal>push</goal>
  </goals>
  <configuration>
  <imageName>registry.example.com/my-image:${project.version}</imageName>
  </configuration>
 </execution>  
 </executions>
</plugin>

有了這些繫結配置後,要打包映象,直接mvn clean package即可。

2.1.3 倉庫登陸資訊配置

首先,外掛可以使用配置在本地 ~/.dockercfg~/.docker/config.json的驗證資訊,或者可以顯式地配置在maven上。

如配置在settings.xml檔案:

<servers>
 <server>
 <id>docker-hub</id>
 <username>foo</username>
 <password>secret-password</password>
 <configuration>
  <email>[email protected]</email>
 </configuration>
 </server>
</servers>

密碼是可以加密的,詳情請檢視: Maven's built in encryption function 。

在專案的pom.xml中使用:

<plugins>
 <plugin>
 <groupId>com.spotify</groupId>
 <artifactId>docker-maven-plugin</artifactId>
 <version>VERSION GOES HERE</version>
 <configuration>
  [...]
  <serverId>docker-hub</serverId>
  <registryUrl>https://index.docker.io/v1/</registryUrl>
 </configuration>
 </plugin>
</plugins>

2.2 spotify/dockerfile-maven

2.2.1 更簡潔的外掛

因為docker-maven-plugin有一些Bugs,所以Spotify開發了更方便簡潔的外掛dockerfile-maven

Maven一鍵部署Springboot到Docker倉庫為自動化做準備(推薦)

dockerfile-maven-plugin的配置更簡單:

<plugin>
 <groupId>com.spotify</groupId>
 <artifactId>dockerfile-maven-plugin</artifactId>
 <version>${dockerfile-maven-version}</version>
 <executions>
 <execution>
  <id>default</id>
  <goals>
  <goal>build</goal>
  <goal>push</goal>
  </goals>
 </execution>
 </executions>
 <configuration>
 <repository>spotify/foobar</repository>
 <tag>${project.version}</tag>
 <buildArgs>
  <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
 </buildArgs>
 </configuration>
</plugin>

配置好後,執行以下maven命令即可打包成映象並推送到倉庫:

mvn deploy

2.2.2 倉庫驗證

賬號可以配置在pom.xml中,如下:

<plugin>
 <groupId>com.spotify</groupId>
 <artifactId>dockerfile-maven-plugin</artifactId>
 <version>${version}</version>
 <configuration>
  <username>repoUserName</username>
  <password>repoPassword</password>
  <repository>${docker.image.prefix}/${project.artifactId}</repository>
  <buildArgs>
   <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
  </buildArgs>
 </configuration>
</plugin>

當然,也可以配置在maven的配置檔案settings.xml中,這樣更安全,請參考:https://github.com/spotify/dockerfile-maven/blob/master/docs/authentication.md

3 總結

通過maven外掛,可以快速方便地一鍵打包、部署,非常方便,對後續的整個DevOps整合也是很有益的。

參考資料:

docker-maven-plugin:https://github.com/spotify/docker-maven-plugin

到此這篇關於Maven一鍵部署Springboot到Docker倉庫為自動化做準備的文章就介紹到這了,更多相關Maven一鍵部署Springboot到Docker倉庫內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!