不用安裝docker也能構建docker映象

yifanwu發表於2021-09-09

前提

  1. 容器映象倉庫

這裡舉例可以公用的兩個

前言

本文主要介紹的是google開源的一個java領域的docker構建工具jib.

目前在上的start有8.5k,fork有784,是一款非常方便的java領域docker構建工具.

亮點是不需要Docker daemon,意味著即使本地沒有安裝docker也能透過jib構建docker映象,並且可以構建符合規範的映象.

官方支援三種方式:

本文使用的是springboot專案透過maven外掛的方式進行講述.

講一下第三種,jib程式碼庫,這種方式可以用於自研平臺構建java的docker服務.

配置pom.xml

新增下面這段標準標籤到檔案中

<build>
    <plugins>
      ...
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>2.0.0</version>
        <configuration>
          <from>
					  <image>registry.cn-hangzhou.aliyuncs.com/dragonwell/dragonwell8:8.1.1-GA_alpine_x86_64_8u222-b67</image>
					</from>
          <to>
            <image>imageName</image>
          </to>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>

上述內容配置了一個結果映象名稱imageName,也就是最終構建成的docker映象地址,包含容器倉庫地址/映象名稱:版本號例如registry.cn-beijing.aliyuncs.com/lyp/lanbox:v1.0,如果倉庫地址不填則預設為.

另外還配置了一個基礎映象registry.cn-hangzhou.aliyuncs.com/dragonwell/dragonwell8:8.1.1-GA_alpine_x86_64_8u222-b67,可以認為等同於Dockerfile中的From語句.

如果基礎映象或目標映象需要賬號密碼的話,在from標籤或to標籤新增一個認證資訊即可,有三種方式:

  1. 配置在docker的配置檔案中
  2. 配置在maven的setting.xml中
  3. 直接在pom.xml檔案配置

本文使用第三種,即在from標籤或to標籤下新增一個用於認證資訊的auth標籤,例如:

<from>
  ...
  <auth>
    <username>kafeidou</username>
    <password>kafeidou</password>
  <auth>
  ...
</from>  

也可以方便的透過環境變數的方式進行配置:

<from>
  ...
  <auth>
    <username>${env.REGISTRY_FROM_USERNAME}</username>
    <password>${env.REGISTRY_FROM_PASSWORD}</password>
  <auth>
  ...
</from> 

其中${env.}這一部分是固定的,後面跟著實際環境變數.

還可以透過系統屬性的方式:

mvn compile jib:build 
    -Djib.to.image=myregistry/myimage:latest 
    -Djib.to.auth.username=kafeidou 
    -Djib.to.auth.password=kafeidou

在進行構建時透過引數方式傳遞認證資訊,是不是很方便呢?

繼續看configuration下的標籤有container配置:
這個標籤主要配置目標容器相關的內容,比如:

  1. appRoot -> 放置應用程式的根目錄,用於war包專案
  2. args -> 程式額外的啟動引數.
  3. environment -> 用於容器的環境變數
  4. format -> 構建OCI規範的映象
  5. jvmFlags -> JVM引數
  6. mainClass -> 程式啟動類
  7. ports -> 容器開放埠

    還有其他內容具體可以參考.

有一個注意點是阿里的容器映象服務不支援OCI映象,所以如果選擇使用阿里的容器映象服務記得將OCI格式取消,預設是取消的.

另外,JVM引數可以透過環境變數配置動態內容,所以不需要計劃將所有啟動引數寫死在jvmFlags標籤裡面.

例如啟動容器時指定使用G1回收器,docker run -it -e JAVA_TOOL_OPTIONS="-XX:+UseG1GC" -d registry.cn-beijing.aliyuncs.com/lyp/lanbox:v1.0.

所有配置項完成後執行mvn命令mvn compile jib:build 開始構建docker映象.

如果看到類似這樣的資訊說明就成功了:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  42.598 s
[INFO] Finished at: 2020-02-18T23:30:53+08:00
[INFO] ------------------------------------------------------------------------

完整的一個例子可以在github上檢視並下載,歡迎多多交流.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2157/viewspace-2824898/,如需轉載,請註明出處,否則將追究法律責任。

相關文章