創建鏡像發佈到鏡像倉庫【不依賴docker環境】

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 技術專家,熱愛開源,關注並喜歡研究前沿技術,熱衷於技術和經驗分享,長期撰寫技術博客,活躍於開源社區。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章