如今,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.
功能包含:
工具地址: https://github.com/yuzd/jib
它是一個純粹構建映象命令列工具,根據不同的功能有不同的引數,如下圖
作為一個純粹的構建映象工具,它不需要依賴docker環境,只需要讀取一個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 | 要打包的目錄裡面可以排除某些檔案 | 正規表示式 |
命令: 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環境中。
命令: 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 技術專家,熱愛開源,關注並喜歡研究前沿技術,熱衷於技術和經驗分享,長期撰寫技術部落格,活躍於開源社群。