前面幾篇都是基於阿里雲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應用的容器化遷移,我們也還在探索,相信探索和實踐的深入,我會分享更多相關的內容。