前面幾篇都是基於阿里雲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 的能力。
其次,你最好給伺服器安裝一下更新(非必選步驟):
- > scconfig
在彈出的選擇框選擇:6,然後選擇:A
這時Windows Server會下載所有的更新。
最後,啟用Windows Server的Container服務:
- > Install-WindowsFeature -Name Containers
安裝完成後需要重啟Windows Server。
2 Docker安裝與配置
兩種安裝方式
在Windows Server 2019中,支援線上安裝 和 離線安裝 Docker服務,線上安裝其實是通過Nuget來安裝(耗時較多),這裡我們選擇直接下載下來離線安裝。
下載離線包
這裡我們選擇下載docker離線安裝包 20.10.5 版本,這也是阿里雲ECS(Windows Server 2019 with Container映象)所採用的的版本。
- 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 配置檔案:
- {
- "registry-mirrors": ["https://k2aspcxw.mirror.aliyuncs.com"],
- "insecure-registries" : [ "reg.edisonzhou.cn" ]
- }
這裡的內容裡,一是為docker配置配置映象加速(這裡使用的阿里雲的映象源),二是為docker配置私有映象倉庫。
Note:設定私有映象倉庫如果配置為hosts 或 域名,請先確保是否有提前設定對映。
啟動dockerd服務
將dockerd註冊為Windows服務,以便能夠開機自啟動:
- cd C:\Program Files\Docker # 進入dockerd.exe所在目錄路徑
- dockerd --register-service # 將dockerd 註冊為服務
然後,通過命令啟動dockerd服務:
- Start-Service docker
或者直接在服務列表中啟動dockerd服務:
切換資料目錄
一般情況下,我們的C盤容量總是有限的,因此我們可以切換一下docker預設的資料目錄(C盤下),避免將來C盤被docker映象檔案撐爆。我們要做的就是修改daemon.json,增加data-root的配置:
- {
- "registry-mirrors": [ "https://k2agpcx0.mirror.aliyuncs.com" ],
- "insecure-registries": [ "reg.edisonzhou.cn" ],
- "data-root": "E://Docker"
- }
重新啟動docker服務即可生效,不過一旦切換了目錄,原來存在映象以及容器就不被檢查出來了,都需要重新建立,所以在切換之前最好先刪除原來下載好的映象&容器。
3 pull & run
拉取一些基礎映象
這裡我們還是拉取一些如.NET SDK & Runtime之類的基礎映象:
- docker pull mcr.microsoft.com/dotnet/framework/sdk:4.8
- docker pull mcr.microsoft.com/dotnet/framework/aspnet:4.8
構建ASP.NET應用映象
這裡我們將之前的asp.net mvc sample原始碼拷貝到Windows Server並進行build映象。
該原始碼的Dockerfile如下:
- FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build
- WORKDIR /app
- # copy csproj and restore as distinct layers
- COPY *.sln .
- COPY aspnetmvcapp/*.csproj ./aspnetmvcapp/
- COPY aspnetmvcapp/*.config ./aspnetmvcapp/
- RUN nuget restore
- # copy everything else and build app
- COPY aspnetmvcapp/. ./aspnetmvcapp/
- WORKDIR /app/aspnetmvcapp
- RUN msbuild /p:Configuration=Release -r:False
- FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
- WORKDIR /inetpub/wwwroot
- COPY --from=build /app/aspnetmvcapp/. ./
構建過程如下:
- E:\Sources\aspnetmvcapp> docker build -t reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp .
- Sending build context to Docker daemon 2.83MB
- Step 1/12 : FROM reg.edisonzhou.cn/dotnet/sdk:4.8 AS build
- ---> cf61fa19d693
- Step 2/12 : WORKDIR /app
- ---> Running in 0aeaf13a2399
- Removing intermediate container 0aeaf13a2399
- ---> cd8cb2e21d9a
- Step 3/12 : COPY *.sln .
- ---> 720986cc9a80
- Step 4/12 : COPY aspnetmvcapp/*.csproj ./aspnetmvcapp/
- ---> 19ed4b0394b8
- Step 5/12 : COPY aspnetmvcapp/*.config ./aspnetmvcapp/
- ---> 685d35ea2682
- Step 6/12 : RUN nuget restore
- ---> Running in a96b4ac5f72c
- ......... 此處省略一萬字
- Removing intermediate container a3f263c97c1e
- ---> 40774beabb8c
- Step 10/12 : FROM reg.edisonzhou.cn/dotnet/runtime:4.8 AS runtime
- ---> 142ad6e5e9c6
- Step 11/12 : WORKDIR /inetpub/wwwroot
- ---> Running in e306e8160570
- Removing intermediate container e306e8160570
- ---> 56f50e22d843
- Step 12/12 : COPY --from=build /app/aspnetmvcapp/. ./
- ---> 313613c96b44
- Successfully built 313613c96b44
- Successfully tagged reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp
執行ASP.NET應用容器
直接通過 docker run 起來:
- 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應用的容器化遷移,我們也還在探索,相信探索和實踐的深入,我會分享更多相關的內容。