建立映象釋出到映象倉庫【不依賴docker環境】

2023-03-26 18:01:11
image
image

工具背景

如今,docker映象常用於工具的分發,demo的演示,第一步就是得建立docker映象。
一般入門都會安裝docker,然後用dockerFile來建立映象,除此以外你還想過有更高效的方式嗎?

image
image

Google開發的jib不依賴docker環境也能建立docker或者OCI型別的映象,但是可惜它只為java應用而生,其他型別的比如nodejs,.net應用都無法用,而且它是作為maven/gradle的外掛形式來工作的,而不是一個純粹獨立構建映象的工具。

介於上述原因,來介紹我開發的這款工具,名字也叫jib,只不過它是一個純粹構建映象工具,支援win,linux,osx三個平臺

我的口號是:

Build container images for your any applications.

功能包含:

  • 構建映象推播到映象倉庫(dockerhub/aliyun/tencent共有倉庫,harbor等私有倉庫)
  • 構建映象推播到本地docker環境
  • 構建映象生成tar格式映象檔案到本地

工具地址: https://github.com/yuzd/jib

image
image

工具使用

它是一個純粹構建映象命令列工具,根據不同的功能有不同的引數,如下圖

windows平臺
image
image
macos平臺
image
image

作為一個純粹的構建映象工具,它不需要依賴docker環境,只需要讀取一個json組態檔,根據設定生成映象

json組態檔

命令: jib.exe -push --configfile=demo.json

推播到映象倉庫的設定範例(從阿里雲映象倉庫拉取base映象+我要加的目錄=新的映象並推播到私有倉庫):


{
  "BaseHttpProxy": "",
  "BaseImage": "ccr.ccs.tencentyun.com/dotnet-core/aspnet:2.2",
  "BaseImageCredential": {
    "UserName": "aaaaaaaa",
    "Password": "xxxxx"
  },
  "TargetHttpProxy": "",
  "TargetImage": "http://127.0.0.1:5000/test1",
  "TargetTags": [
    "1.0.1"
  ],
  "TargetImageCredential": {
    "UserName": "aaaa",
    "Password": "xxxx"
  },
  "ImageFormat": "Docker",
  "ImageLayersFolder": "E:\\workspace\\demo\\publish",
  "ImageWorkingDirectory": "/publish",
  "Entrypoint": [
    "dotnet"
  ],
  "Cmd": [
    "/publish/RazorTestProject.dll"
  ],
  "ApplicationLayersCacheDirectory": "E:\\workspace\\cache",
  "SkipExistingImages":true,
  "IgnoreList":[
    "支援正則"
  ]
  "Env":{
      "env1":"value1"
  },
  "Ports":[
    {
        "port":8080,
        "protocol":"tcp"
    }
  ],
  "Volumes":[
    "/var/log",
    "/var/log2"
  ]
}
欄位名 含義 備註
BaseHttpProxy 代理 拉取基礎映象的時候看你需要,格式 ip:port
BaseImage 基礎映象地址 完整地址,包含了版本,如果倉庫地址沒有https,請在最前面加上http://
BaseImageCredential 拉取基礎映象如果要登入 賬戶名+密碼
TargetHttpProxy 代理 只有在推播到遠端映象且你有需要,才需要設定 格式ip:port
TargetImage 目標映象 要推播的目標映象倉庫地址,不包含版本,如果倉庫地址沒有https,請在最前面加上http://
TargetTags 映象標籤 可以理解為版本號
TargetImageCredential 如果目標映象倉庫要登入 賬戶名+密碼
ImageFormat 映象倉庫構建格式 Docker和OCI兩種
ImageLayersFolder 要打包進映象倉庫的目錄 通常這就是你的專案成果物
ImageWorkingDirectory 打包的目標倉庫的工作目錄 如果設定那你的檔案們都會在這個目錄下工作
Entrypoint 映象啟動的入口 比如dotnet
Cmd 映象啟動執行的引數 供Entrypoint使用
ApplicationLayersCacheDirectory 程式在執行時候會產生快取目錄來加快下次構建速度 可以不指定,會用temp目錄
Env 環境變數 可以不指定,容器啟動指定也行
Ports 可以不指定,容器啟動指定也行
Volumes 共用目錄 可以不指定,容器啟動指定也行
SkipExistingImages 如果目標倉庫有一模一樣的映象就不會上傳 比對的是映象sha256
IgnoreList 要打包的目錄裡面可以排除某些檔案 正規表示式

tar格式映象檔案本地生成

命令: jib.exe -tar --configfile=demo.json --outfile=demo.tar

範例


{
  "BaseHttpProxy": "",
  "BaseImage": "ccr.ccs.tencentyun.com/dotnet-core/aspnet:2.2",
  "BaseImageCredential": {
    "UserName": "aaaaaaaa",
    "Password": "xxxxx"
  },
  "ImageFormat": "Docker",
  "ImageLayersFolder": "E:\\workspace\\demo\\publish",
  "ImageWorkingDirectory": "/publish",
  "Entrypoint": [
    "dotnet"
  ],
  "Cmd": [
    "/publish/RazorTestProject.dll"
  ]
}

json設定引數就少了推播相關的引數

本地tar檔案的映象,可以通過docker load命令在裝載到docker環境中。

推播映象到本機的docker環境

命令: jib.exe -deamon --configfile=demo.json

json設定和tar差不多

寫到最後

該工具支援多平臺(linux、win、mac) 17M左右大小,不依賴docker環境,獨立構建映象速度很快,除了第一次基礎映象的拉取需要時間,有快取的話只需要幾秒搞定 適用於在CICD流水線中使用。

我也整合到了我的AntDeploy一鍵釋出工具中, 開源地址: https://github.com/yuzd/AntDeploy .net應用可以下載AntDeploy Vs外掛, 可以在vs中一鍵釋出映象推播到映象倉庫功能,還支援一鍵部署到iis,windows/linux服務 歡迎試用~

關於我

image
image

微軟最有價值專家(MVP),.NET 技術專家,熱愛開源,關注並喜歡研究前沿技術,熱衷於技術和經驗分享,長期撰寫技術部落格,活躍於開源社群。