Docker使用Maven插件構(gòu)建鏡像的方法

通過(guò) Maven 的 Docker 插件可以構(gòu)建 Docker 鏡像

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括大祥網(wǎng)站建設(shè)、大祥網(wǎng)站制作、大祥網(wǎng)頁(yè)制作以及大祥網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,大祥網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到大祥省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

快速入門(mén)

在 pom.xml 中添加 Docker 插件

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  <configuration>
    <imageName>linyuantongxue/docker-demo:0.0.1</imageName> // 指定鏡像名稱(chēng),linyuantongxue 是倉(cāng)庫(kù)名稱(chēng)(對(duì)應(yīng) DockerHub 用戶(hù)名),docker-demo 是鏡像名稱(chēng)(對(duì)應(yīng) DockerHub 倉(cāng)庫(kù)名),0.0.1 是標(biāo)簽名稱(chēng)(相當(dāng)于版本號(hào))
    <baseImage>java</baseImage>   // 指定基礎(chǔ)鏡像,等同 FROM 指令
    <entryPoint>["java","-jar","app.jar"]</entryPoint>    // 等同于 ENTRYPOINT 指令
    <resources>
      <resource>
        <targetPath>/</targetPath> 
        <directory>${project.build.directory}</directory>  // 指定要復(fù)制的根目錄,${project.build.directory} 表示 target 目錄
        <include>${project.build.finalName}.jar</include>  // 指定要復(fù)制的文件,${project.build.finalName}.jar 指打包后的 jar 文件
      </resource>
    </resources>
  </configuration>
</plugin>

執(zhí)行以下命令構(gòu)建 Docker 鏡像

mvn clean package docker:build

執(zhí)行 docker images 查看剛才構(gòu)建的鏡像

讀取 Dockerfile 文件

讀取 Dockerfile 文件就不必指定 baseImage 和 entrypoint

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  <configuration>
    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>   // 指定要讀取的 Dockerfile 文件
    <imageName>linyuantongxue/docker-demo:0.0.1</imageName> // 指定鏡像名稱(chēng),linyuantongxue 是倉(cāng)庫(kù)名稱(chēng)(對(duì)應(yīng) DockerHub 用戶(hù)名),docker-demo 是鏡像名稱(chēng)(對(duì)應(yīng) DockerHub 倉(cāng)庫(kù)名),0.0.1 是標(biāo)簽名稱(chēng)(相當(dāng)于版本號(hào))
    <resources>
      <resource>
        <targetPath>/</targetPath> 
        <directory>${project.build.directory}</directory>  // 指定要復(fù)制的根目錄,${project.build.directory} 表示 target 目錄
        <include>${project.build.finalName}.jar</include>  // 指定要復(fù)制的文件,${project.build.finalName}.jar 指打包后的 jar 文件
      </resource>
    </resources>
  </configuration>
</plugin>

將插件綁定在某個(gè) phase 執(zhí)行

很多場(chǎng)景下有這樣的需求,比如執(zhí)行 mvn clean package 時(shí)插件就自動(dòng)構(gòu)建 Docker 鏡像,要實(shí)現(xiàn)這點(diǎn)只需要將插件的 goal 綁定在某個(gè) phase 即可

maven 命令格式是:mvn phase:goal,phase 綁定了目標(biāo)的構(gòu)建生命周期階段,goal 配置的執(zhí)行目標(biāo)

只需添加如下配置:

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  // 在 maven 生命周期 package 中執(zhí)行 build 構(gòu)建目標(biāo)
  <executions>
    <execution>
      <id>build-image</id>
      <phase>package</phase>
      <goals>
        <goal>build</goal>
      </goals>
    </execution>
  </executions>
  // $$$$$$$$$$$$$$$$華麗的分割線$$$$$$$$$$$$$$$$
  <configuration>
    <imageName>linyuantongxue/docker-demo:0.0.1</imageName>
    <baseImage>java</baseImage>
    <entryPoint>["java","-jar","app.jar"]</entryPoint>
    <resources>
      <resource>
        <targetPath>/</targetPath>
        <directory>${project.build.directory}</directory>
        <include>${project.build.finalName}.jar</include>
      </resource>
    </resources>
  </configuration>
</plugin>

推送鏡像

使用 Maven 插件也可以推送鏡像到 Docker Hub

修改 Maven 全局配置信息文件 settings.xml,配置 Docker Hub 用戶(hù)信息

<servers>
  <server>
    <id>docker-hub</id>
    # DockerHub 該網(wǎng)站的用戶(hù)名必須全部為小寫(xiě)才正確
    <username>linyuantongxue</username>
    <password>765371578Ly</password>
    <configuration>
      <email>765371578@qq.com</email>
    </configuration>
  </server>
</servers>

修改 pom 文件

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  <configuration>
    <imageName>linyuantongxue/docker-demo:0.0.1</imageName>
    <baseImage>java</baseImage>
    <entryPoint>["java","-jar","app.jar"]</entryPoint>
    <resources>
      <resource>
        <targetPath>/</targetPath>
        <directory>${project.build.directory}</directory>
        <include>${project.build.finalName}.jar</include>
      </resource>
    </resources>
    <!--與配置文件 setting.xml 中的 server.id 一致,用于推送鏡像-->
    <serverId>docker-hub</serverId>
  </configuration>
</plugin>

執(zhí)行以下命令,添加 pushImage 標(biāo)識(shí),表示推送鏡像

mvn clean package docker:build -DpushImage

上面例子中通過(guò) imageName 指定鏡像名稱(chēng)和標(biāo)簽,也可以借助 imageTags 元素更為靈活的指定鏡像名稱(chēng)和標(biāo)簽,這樣就可以為同一個(gè)鏡像指定兩個(gè)標(biāo)簽

<configuration>
  <imageName>linyuantongxue/docker-demo</imageName>
  <imageTags>
    <imageTag>0.0.1</imageTag>
    <imageTag>latest</imageTag>
  </imageTags>
</configuration>

也可在構(gòu)建命令時(shí)使用 dockerImageTags 參數(shù)指定標(biāo)簽名稱(chēng)

復(fù)制代碼 代碼如下:

mvn clean package:build -DpushImageTags -DdockerImageTags=latest -DdockerImageTags=another-tag

若需要重復(fù)構(gòu)建相同標(biāo)簽名稱(chēng)的鏡像,可將 forceTags 設(shè)置為 true

<configuration>
  // .......
  <forceTags>true</forceTags>
</configuration>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)站欄目:Docker使用Maven插件構(gòu)建鏡像的方法
分享路徑:http://muchs.cn/article38/gdsjpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司、標(biāo)簽優(yōu)化網(wǎng)站導(dǎo)航、移動(dòng)網(wǎng)站建設(shè)網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站