自動構建自己的ASP.NET Core基礎鏡像

  • 2020 年 2 月 13 日
  • 筆記

在開發過程中,我們可以根據自身情況來定製自己的基礎鏡像,以便加快CICD構建速度以及提高開發體驗。這裡我們就以ASP.NET Core的基礎鏡像為例來進行講解。

本次教程代碼見開源庫:https://github.com/xin-lai/aspnetcore-docker

說明

本庫用於構建項目中使用的aspnetcore的運行時公共基礎鏡像,同時提供了騰訊雲公共鏡像和Docker Hub公共鏡像以供國內外使用。

目的

加快鏡像構建和拉取速度,加速CICD構建以及提高開發體驗。

注意事項

  • 時區默認設置為東八區,見「ENV TZ=Asia/Shanghai」
  • 默認安裝了libgdiplus等庫,以便支持Excel導入導出
  • 目前提供了騰訊雲的公共鏡像和hub.docker的公共鏡像,大家可以按需選擇

公共鏡像地址

目前已提供騰訊雲公共鏡像和DockerHub公共鏡像地址:

  • ccr.ccs.tencentyun.com/magicodes/aspnetcore-runtime
  • magicodes/aspnetcore-runtime

構建說明

使用Azure Pipeline構建和推送騰訊雲鏡像

Azure Pipeline是免費的,對於開源項目,構建沒有限制。我們可以按照以下步驟來完成Pipeline的創建:

  1. 在項目的設置(Project Settings)中,添加「Docker Registry」的服務連接(Service Connections)

添加好了之後如下所示:

  1. 創建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則使用其自帶的構建服務,使用起來就更為簡單了:

  1. 創建倉儲
  1. 設置構建規則

規則支持正則表達式。然後就配置完了,具體可以參考: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

接下來,大家就可以根據情況盡情使用了。在國內,我們推薦使用騰訊雲公共鏡像。