傳統.NET 4.x應用容器化體驗(5)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM