背景
最近群友們經常反饋docker鏡像制作起來有點麻煩,我開源的antdeploy工具雖然可以制作鏡像但是必須有一個提前:有一台安裝好docker的linux服務器。因為大家開發環境基本上都是windows。為了制作鏡像專門搞一台linux服務器有點浪費,也很麻煩。需要一種技術能制作docker鏡像不依賴linux環境且脫離於docker環境
技術調研
谷歌有一個開源項目 https://github.com/GoogleContainerTools/jib
這個應該就是我想要的了,但是這個開源項目主要是提供 maven插件 和 gradle插件來 快速制作鏡像
如何讓它脫離maven或者gradle環境的束縛來提供服務呢。
只能參考谷歌的java代碼自己實現一個能夠跨平台的解決方案
技術成果
這里我采用了微軟的asp5.0技術一比一仿寫了google的jib項目。
目前我已經集成到我的開源項目AntDeploy(一鍵部署發布工具)里面
支持功能如下:
-
一鍵制作鏡像並發布到dockerhub倉庫
-
一鍵制作鏡像並發布到阿里雲鏡像倉庫
-
一鍵制作鏡像並發布到騰訊雲鏡像倉庫
注意:采用標准的auth協議的鏡像倉庫都支持一鍵推送
如何使用
支持下面2種方式使用
-
vs插件方式(可以直接項目右鍵,一鍵搞定)
-
獨立軟件方式(可以發布java等其他語言)
這里以vs插件方式示例
下面演示創建一個aspnet5.0的web項目並采用antdeploy插件一鍵創建docker鏡像發布到阿里雲鏡像倉庫,然后在linux服務器上跑起來這個web項目
使用的環境:
-
Visualstuido 2019
-
已安裝AntDeploy插件最新版
創建工程(testimagepush)如下圖:步驟(略)
在工程文件點擊鼠標右鍵,找到AntDeploy
打開AntDeploy如下圖:
配置參數
From里面要填參數的意思:
名稱 | 含義 |
---|---|
基礎鏡像 | 等同於DockerFile里面的from |
UserName | 如果你用的基礎鏡像是私有的話就需要,阿里雲或騰訊雲也需要 |
Pwd | 如果你用的基礎鏡像是私有的話就需要,阿里雲或騰訊雲也需要 |
Http代理 | 在拉取這個基礎鏡像的時候如果是需要科學訪問(特別是dockerhub)的話就需要用這個了 |
To里面要填參數的意思:
名稱 | 含義 |
---|---|
目標鏡像 | 這個是你要推送到的鏡像倉庫地址(下面會舉例阿里雲,騰訊雲,dockerhub,詳細看下面解說的例子) |
UserName | 如果你推送的鏡像倉庫是私有的話就需要,阿里雲或騰訊雲也需要 |
Pwd | 如果你推送的鏡像倉庫是私有的話就需要,阿里雲或騰訊雲也需要 |
Http代理 | 在推送生創建好的鏡像的時候如果是需要科學訪問(特別是dockerhub)的話就需要用這個了 |
EntryPoint | 你的鏡像的運行入口點 |
CMD | 入口點要帶的一些參數 多個用->隔開 |
玩過docker的人上面的參數應該比較熟悉,因為創建一個docker鏡像至少需要這么些配置
如上圖:
-
因為我是5.0項目所以我用的是官方的5.0鏡像
-
因為基礎鏡像在國外我配置了代理加速pull
-
目標鏡像是配置的阿里雲鏡像倉庫的地址(你開通了阿里雲鏡像倉庫功能注意得開啟自動創建的功能)
-
因為阿里雲的鏡像倉庫需要賬戶名和密碼所以得配置上
-
EntryPoint程序入口點為dotnet
-
參數寫的是當前項目dll(這么配的意思就是如果你跑這個鏡像生成的容器就會默認啟動你的應用)
如果你需要將某些文件排除打包的話可以在【其他配置】進行配置
點擊發布按鈕
可以查看詳細日志:
16:26:52|INFO|-----------------Start publish[Ver:7.30]-----------------
16:26:52|INFO|Visual Studio Version : 16.0
16:26:52|INFO|CurrentProjectFolder: file://C:\Users\Administrator\source\repos\testimagepush\testimagepush#link3
16:26:52|INFO|cur