前面幾篇都是基於阿里雲ECS直接玩的,有童鞋問直接用Windows Server 2019可以玩不,本篇就為你介紹一下如何給Windows Server 2019配置Docker環境。

1 準備工作

首先,你需要一臺伺服器,安裝 Windows Server 2019 DataCenter(資料中心)版本。

Windows Server 2016版本開始就支援原生Docker了,在2019版本,它做了以下的改進更好地支援Docker:

Kubernetes 1.14 發行版本中包含了將 Windows 容器排程到 Kubernetes 叢集中 Windows 節點 (Windows Server 2019) 上的生產級支援,從而使得巨大 的 Windows 應用生態圈能夠充分利用 Kubernetes 的能力。

其次,你最好給伺服器安裝一下更新(非必選步驟):

  1. > scconfig

在彈出的選擇框選擇:6,然後選擇:A

這時Windows Server會下載所有的更新。

最後,啟用Windows Server的Container服務:

  1. > Install-WindowsFeature -Name Containers

安裝完成後需要重啟Windows Server。

2 Docker安裝與配置

兩種安裝方式

在Windows Server 2019中,支援線上安裝 和 離線安裝 Docker服務,線上安裝其實是通過Nuget來安裝(耗時較多),這裡我們選擇直接下載下來離線安裝。

下載離線包

這裡我們選擇下載docker離線安裝包 20.10.5 版本,這也是阿里雲ECS(Windows Server 2019 with Container映象)所採用的的版本。

  1. https://dockermsft.blob.core.windows.net/dockercontainer/docker-20-10-5.zip

將離線包解壓後放到Windows Server 2019的 C:\Program Files\Docker 目錄下,當然,這個目錄也需要你手動建立。

設定環境變數

為Docker目錄設定環境變數:

配置映象加速

阿里雲ECS主機為我們預設配置了映象加速源,而在自己搭建的伺服器上,需要配置一下映象加速

建立 C:\ProgramData\docker\config 目錄,並在此目錄下建立一個 daemon.json 配置檔案:

  1. {
  2. "registry-mirrors": ["https://k2aspcxw.mirror.aliyuncs.com"],
  3. "insecure-registries" : [ "reg.edisonzhou.cn" ]
  4. }

這裡的內容裡,一是為docker配置配置映象加速(這裡使用的阿里雲的映象源),二是為docker配置私有映象倉庫。

Note:設定私有映象倉庫如果配置為hosts 或 域名,請先確保是否有提前設定對映。

啟動dockerd服務

將dockerd註冊為Windows服務,以便能夠開機自啟動:

  1. cd C:\Program Files\Docker # 進入dockerd.exe所在目錄路徑
  2. dockerd --register-service # 將dockerd 註冊為服務

然後,通過命令啟動dockerd服務:

  1. Start-Service docker

或者直接在服務列表中啟動dockerd服務:

切換資料目錄

一般情況下,我們的C盤容量總是有限的,因此我們可以切換一下docker預設的資料目錄(C盤下),避免將來C盤被docker映象檔案撐爆。我們要做的就是修改daemon.json,增加data-root的配置:

  1. {
  2. "registry-mirrors": [ "https://k2agpcx0.mirror.aliyuncs.com" ],
  3. "insecure-registries": [ "reg.edisonzhou.cn" ],
  4. "data-root": "E://Docker"
  5. }

重新啟動docker服務即可生效,不過一旦切換了目錄,原來存在映象以及容器就不被檢查出來了,都需要重新建立,所以在切換之前最好先刪除原來下載好的映象&容器

3 pull & run

拉取一些基礎映象

這裡我們還是拉取一些如.NET SDK & Runtime之類的基礎映象:

  1. docker pull mcr.microsoft.com/dotnet/framework/sdk:4.8
  2. docker pull mcr.microsoft.com/dotnet/framework/aspnet:4.8

構建ASP.NET應用映象

這裡我們將之前的asp.net mvc sample原始碼拷貝到Windows Server並進行build映象。

該原始碼的Dockerfile如下:

  1. FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build
  2. WORKDIR /app
  3. # copy csproj and restore as distinct layers
  4. COPY *.sln .
  5. COPY aspnetmvcapp/*.csproj ./aspnetmvcapp/
  6. COPY aspnetmvcapp/*.config ./aspnetmvcapp/
  7. RUN nuget restore
  8. # copy everything else and build app
  9. COPY aspnetmvcapp/. ./aspnetmvcapp/
  10. WORKDIR /app/aspnetmvcapp
  11. RUN msbuild /p:Configuration=Release -r:False
  12. FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
  13. WORKDIR /inetpub/wwwroot
  14. COPY --from=build /app/aspnetmvcapp/. ./

構建過程如下:

  1. E:\Sources\aspnetmvcapp> docker build -t reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp .
  2. Sending build context to Docker daemon 2.83MB
  3. Step 1/12 : FROM reg.edisonzhou.cn/dotnet/sdk:4.8 AS build
  4. ---> cf61fa19d693
  5. Step 2/12 : WORKDIR /app
  6. ---> Running in 0aeaf13a2399
  7. Removing intermediate container 0aeaf13a2399
  8. ---> cd8cb2e21d9a
  9. Step 3/12 : COPY *.sln .
  10. ---> 720986cc9a80
  11. Step 4/12 : COPY aspnetmvcapp/*.csproj ./aspnetmvcapp/
  12. ---> 19ed4b0394b8
  13. Step 5/12 : COPY aspnetmvcapp/*.config ./aspnetmvcapp/
  14. ---> 685d35ea2682
  15. Step 6/12 : RUN nuget restore
  16. ---> Running in a96b4ac5f72c
  17. ......... 此處省略一萬字
  18. Removing intermediate container a3f263c97c1e
  19. ---> 40774beabb8c
  20. Step 10/12 : FROM reg.edisonzhou.cn/dotnet/runtime:4.8 AS runtime
  21. ---> 142ad6e5e9c6
  22. Step 11/12 : WORKDIR /inetpub/wwwroot
  23. ---> Running in e306e8160570
  24. Removing intermediate container e306e8160570
  25. ---> 56f50e22d843
  26. Step 12/12 : COPY --from=build /app/aspnetmvcapp/. ./
  27. ---> 313613c96b44
  28. Successfully built 313613c96b44
  29. Successfully tagged reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp

執行ASP.NET應用容器

直接通過 docker run 起來:

  1. docker run --name aspnet_mvc_sample --rm -it -d -p 8000:80 --cpus 1 -m 1024m reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp

執行效果如圖:

4 總結

本文介紹瞭如何在本地的Windows Server 2019伺服器上安裝和配置Docker環境,最後演示了一下ASP.NET應用的基本容器操作。

對於傳統.NET 4.x應用的容器化遷移,我們也還在探索,相信探索和實踐的深入,我會分享更多相關的內容。

作者:周旭龍

出處:https://edisonchou.cnblogs.com

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。