不用安裝docker也能構(gòu)建docker鏡像

前提

  1. docker
  2. 容器鏡像倉庫

這里舉例可以公用的兩個
dockerhub
阿里云容器鏡像服務(wù)

前言

本文主要介紹的是google開源的一個java領(lǐng)域的docker構(gòu)建工具jib.

目前在github上的start有8.5k,fork有784,是一款非常方便的java領(lǐng)域docker構(gòu)建工具.

亮點是不需要Docker daemon,意味著即使本地沒有安裝docker也能通過jib構(gòu)建docker鏡像,并且可以構(gòu)建符合OCI規(guī)范的鏡像.

官方支持三種方式:

  1. maven插件
  2. grade插件
  3. jib代碼庫

本文使用的是springboot項目通過maven插件的方式進(jìn)行講述.

講一下第三種,jib代碼庫,這種方式可以用于自研平臺構(gòu)建java的docker服務(wù).

配置pom.xml

添加下面這段標(biāo)準(zhǔn)標(biāo)簽到文件中

<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>

上述內(nèi)容配置了一個結(jié)果鏡像名稱imageName,也就是最終構(gòu)建成的docker鏡像地址,包含容器倉庫地址/鏡像名稱:版本號例如registry.cn-beijing.aliyuncs.com/lyp/lanbox:v1.0,如果倉庫地址不填則默認(rèn)為dockerhub.

另外還配置了一個基礎(chǔ)鏡像registry.cn-hangzhou.aliyuncs.com/dragonwell/dragonwell8:8.1.1-GA_alpine_x86_64_8u222-b67,可以認(rèn)為等同于Dockerfile中的From語句.

如果基礎(chǔ)鏡像或目標(biāo)鏡像需要賬號密碼的話,在from標(biāo)簽或to標(biāo)簽添加一個認(rèn)證信息即可,有三種方式:

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

本文使用第三種,即在from標(biāo)簽或to標(biāo)簽下添加一個用于認(rèn)證信息的auth標(biāo)簽,例如:

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

也可以方便的通過環(huán)境變量的方式進(jìn)行配置:

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

其中${env.}這一部分是固定的,后面跟著實際環(huán)境變量.

還可以通過系統(tǒng)屬性的方式:

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

在進(jìn)行構(gòu)建時通過參數(shù)方式傳遞認(rèn)證信息,是不是很方便呢?

繼續(xù)看configuration下的標(biāo)簽有container配置:
這個標(biāo)簽主要配置目標(biāo)容器相關(guān)的內(nèi)容,比如:

  1. appRoot -> 放置應(yīng)用程序的根目錄,用于war包項目
  2. args -> 程序額外的啟動參數(shù).
  3. environment -> 用于容器的環(huán)境變量
  4. format -> 構(gòu)建OCI規(guī)范的鏡像
  5. jvmFlags -> JVM參數(shù)
  6. mainClass -> 程序啟動類
  7. ports -> 容器開放端口
    ...
    還有其他內(nèi)容具體可以參考https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#container-object.

有一個注意點是阿里的容器鏡像服務(wù)不支持OCI鏡像,所以如果選擇使用阿里的容器鏡像服務(wù)記得將OCI格式取消,默認(rèn)是取消的.

另外,JVM參數(shù)可以通過環(huán)境變量配置動態(tài)內(nèi)容,所以不需要計劃將所有啟動參數(shù)寫死在jvmFlags標(biāo)簽里面.

例如啟動容器時指定使用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 開始構(gòu)建docker鏡像.

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

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

完整的一個例子可以在github上查看并下載https://github.com/FISHStack/hello-spring-cloud,歡迎多多交流.

始發(fā)于 四顆咖啡豆 ,轉(zhuǎn)載請聲明出處.歡迎交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容