天天看點

Maven 插件之 docker-maven-plugin 的使用

目錄

docker-maven-plugin 介紹

環境、軟體準備

Demo 示例

配置 DOCKER_HOST

示例建構鏡像

指定建構資訊到 POM 中建構

使用 Dockerfile 建構

使用指令

綁定 Docker 指令到 Maven各個階段

使用私有Docker倉庫位址

安全認證配置

FAQ

1、docker-maven-plugin 介紹

在我們持續內建過程中,項目工程一般使用 Maven 編譯打包,然後生成鏡像,通過鏡像上線,能夠大大提供上線效率,同時能夠快速動态擴容,快速復原,着實很友善。docker-maven-plugin 插件就是為了幫助我們在Maven工程中,通過簡單的配置,自動生成鏡像并推送到倉庫中。

2、環境、軟體準備

本次示範環境,我是在本機 Mac OX 上操作,以下是安裝的軟體及版本:

Docker:version 17.03.1-ce

Maven:version 3.3.9

Java: version 1.8.0_91

docker-maven-plugin:1.0.0

注意:這裡我們要測試 Java Maven 項目用 docker-maven 插件打鏡像,上傳鏡像等操作,是以需要先安裝一下 Docker、Maven、Java,這裡忽略安裝過程。

3、Demo 示例

3.1 配置 DOCKER_HOST

docker-maven-plugin 插件預設連接配接本地 Docker 位址為:localhost:2375,是以我們需要先設定下環境變量。

注意:如果沒有設定 <code>DOCKER_HOST</code> 環境變量,可以指令行顯示指定 <code>DOCKER_HOST</code> 來執行,如我本機指定 DOCKER_HOST:<code>DOCKER_HOST=unix:///var/run/docker.sock mvn clean install docker:build</code>。

3.2 示例建構鏡像

建構鏡像可以使用一下兩種方式,第一種是将建構資訊指定到 POM 中,第二種是使用已存在的 Dockerfile 建構。

第一種方式,支援将 <code>FROM</code>, <code>ENTRYPOINT</code>, <code>CMD</code>, <code>MAINTAINER</code> 以及 <code>ADD</code> 資訊配置在 POM 中,不需要使用 Dockerfile 配置。但是如果使用 <code>VOLUME</code> 或其他 Dockerfile 中的指令的時候,需要使用第二種方式,建立一個 Dockerfile,并在 POM 中配置 <code>dockerDirectory</code> 來指定路徑即可。

這裡我們以一個 Java Maven 項目 mavendemo 作為示例示範一下。

3.2.1 指定建構資訊到 POM 中建構

3.2.2 使用 Dockerfile 建構

以上兩種方式執行<code>docker:build</code>效果是一樣的,執行輸出過程大緻如下:

執行完成後,使用<code>docker images</code>檢視生成的鏡像:

3.3 執行指令

<code>mvn clean package docker:build</code> 隻執行 build 操作

<code>mvn clean package docker:build -DpushImage</code> 執行 build 完成後 push 鏡像

<code>mvn clean package docker:build -DpushImageTag</code> 執行 build 并 push 指定 tag 的鏡像

注意:這裡必須指定至少一個 imageTag,它可以配置到 POM 中,也可以在指令行指定。指令行指定如下:<code>mvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2</code>,POM 檔案中指定配置如下:

3.4 綁定Docker 指令到 Maven 各個階段

我們可以綁定 Docker 指令到 Maven 各個階段,我們可以把 Docker 分為 build、tag、push,然後分别綁定 Maven 的 package、deploy 階段,此時,我們隻需要執行<code>mvn deploy</code>就可以完成整個 build、tag、push操作了,當我們執行<code>mvn build</code>就隻完成 build、tag 操作。除此此外,當我們想跳過某些步驟或者隻執行某個步驟時,不需要修改 POM 檔案,隻需要指定跳過 docker 某個步驟即可。比如當我們工程已經配置好了自動化模闆了,但是這次我們隻需要打鏡像到本地自測,不想執行 push 階段,那麼此時執行要指定參數<code>-DskipDockerPush</code>就可跳過 push 操作了。