在開發過程中,我們可以根據自身情況來定制自己的基礎鏡像,以便加快CI\CD構建速度以及提高開發體驗。這里我們就以ASP.NET Core的基礎鏡像為例來進行講解。
本次教程代碼見開源庫:https://github.com/xin-lai/aspnetcore-docker
說明
本庫用於構建項目中使用的aspnetcore的運行時公共基礎鏡像,同時提供了騰訊雲公共鏡像和Docker Hub公共鏡像以供國內外使用。
目的
加快鏡像構建和拉取速度,加速CI\CD構建以及提高開發體驗。
注意事項
- 時區默認設置為東八區,見“ENV TZ=Asia/Shanghai”
- 默認安裝了libgdiplus等庫,以便支持Excel導入導出
- 目前提供了騰訊雲的公共鏡像和hub.docker的公共鏡像,大家可以按需選擇
公共鏡像地址
目前已提供騰訊雲公共鏡像和DockerHub公共鏡像地址:
- ccr.ccs.tencentyun.com/magicodes/aspnetcore-runtime
- magicodes/aspnetcore-runtime
構建說明
使用Azure Pipeline構建和推送騰訊雲鏡像
Azure Pipeline是免費的,對於開源項目,構建沒有限制。我們可以按照以下步驟來完成Pipeline的創建:
-
在項目的設置(Project Settings)中,添加“Docker Registry”的服務連接(Service Connections)
添加好了之后如下所示:
-
創建Azure Pipeline
接下來我們就來創建Azure Pipeline。創建位置如圖所示:
接下來界面如下所示:
我們選擇方式一,這時需要確保你已經打開並登錄過了你的GitHub。接下來就可以選擇存儲庫了:

然后會根據存儲庫代碼提供推薦的模板,選擇之后我們就可以看到YAML的編輯界面了:

編輯過程中都有智能提示,並且右上角有個“Show assistant”按鈕可以打開窗口來添加任務:

我們可以使用此窗口來便捷添加任務:

了解了上述內容,我們編寫配置如下所示:
trigger: - latest - 2.* - 3.* resources: - repo: self variables: tag: '$(Build.BuildId)' stages: - stage: Build displayName: Build image jobs: - job: Build displayName: Build pool: vmImage: 'ubuntu-latest' steps: - task: Docker@2 inputs: containerRegistry: 'tecent-cloud-xinlai' repository: 'magicodes/aspnetcore-runtime' command: 'buildAndPush' Dockerfile: '**/Dockerfile' tags: '$(Build.SourceBranchName)'
配置起來非常簡單,大家可以參考以上配置。其中變量“$(Build.SourceBranchName)”輸出分支短名。
使用Docker Hub構建鏡像
Docker hub則使用其自帶的構建服務,使用起來就更為簡單了:
-
創建倉儲
-
設置構建規則
規則支持正則表達式。然后就配置完了,具體可以參考:https://hub.docker.com/repository/docker/magicodes/aspnetcore-runtime


是不是很Nice!
鏡像標簽說明
如上面所示,我們設置了根據代碼的分支來構建鏡像標簽,相關說明如下:
標簽名稱 | 說明 |
---|---|
latest | 最新鏡像,當前為3.1 |
2.2 | Asp.Net Core Runtime 2.2 |
3.0 | Asp.Net Core Runtime 3.0 |
3.1 | Asp.Net Core Runtime 3.1 |
公共鏡像地址
通過上面的自動構建,我們提供了騰訊雲公共鏡像和DockerHub公共鏡像地址:
- ccr.ccs.tencentyun.com/magicodes/aspnetcore-runtime
- magicodes/aspnetcore-runtime
接下來,大家就可以根據情況盡情使用了。在國內,我們推薦使用騰訊雲公共鏡像。