不用安裝docker也能構建docker鏡像

前提

  1. docker
  2. 容器鏡像倉庫

    這裏舉例能夠公用的兩個
    dockerhub
    阿里雲容器鏡像服務java

前言

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

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

亮點是不須要Docker daemon,意味着即便本地沒有安裝docker也能經過jib構建docker鏡像,而且能夠構建符合OCI規範的鏡像. spring

官方支持三種方式:docker

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

本文使用的是springboot項目經過maven插件的方式進行講述. segmentfault

講一下第三種,jib代碼庫,這種方式能夠用於自研平臺構建java的docker服務.springboot

配置pom.xml

添加下面這段標準標籤到文件中app

<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,若是倉庫地址不填則默認爲dockerhub. jvm

另外還配置了一個基礎鏡像registry.cn-hangzhou.aliyuncs.com/dragonwell/dragonwell8:8.1.1-GA_alpine_x86_64_8u222-b67,能夠認爲等同於Dockerfile中的From語句. maven

若是基礎鏡像或目標鏡像須要帳號密碼的話,在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 -> 容器開放端口

...
還有其餘內容具體能夠參考https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#container-object.

有一個注意點是阿里的容器鏡像服務不支持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上查看並下載https://github.com/FISHStack/hello-spring-cloud,歡迎多多交流.

始發於 四顆咖啡豆 ,轉載請聲明出處.
關注公糉號->[四顆咖啡豆] 獲取最新內容
四顆咖啡豆
相關文章
相關標籤/搜索