工具背景
如今,docker鏡像常用於工具的分發,demo的演示,第一步就是得創建docker鏡像。
一般入門都會安裝docker,然後用dockerFile來創建鏡像,除此以外你還想過有更高效的方式嗎?
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
工具使用
它是一個純粹構建鏡像命令行工具,根據不同的功能有不同的參數,如下圖
windows平臺
macos平臺
作爲一個純粹的構建鏡像工具,它不需要依賴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服務 歡迎試用~
關於我
微軟最有價值專家(MVP),.NET 技術專家,熱愛開源,關注並喜歡研究前沿技術,熱衷於技術和經驗分享,長期撰寫技術博客,活躍於開源社區。