Maven一鍵部署Springboot到Docker倉庫為自動化做準備(推薦)
1 前言
前面《Springboot整合MongoDB的Docker開發,其它應用也類似》講解了如何做Docker
開發、如何把Springboot
應用打包成一個映象,但它是手動的,本文將講解如何通過maven
一鍵打包部署。
2 兩個maven外掛搞定
可以使用maven
外掛實現一鍵部署,這兩個外掛還是同一個公司的產品,就是著名的音樂流服務平臺Spotify
。
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
。
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倉庫內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!