軟體工程師的小事:到底要不要 Close

在 Windows Container 執行 ASP.NET WebForm

在 Linux Container 環境中,僅能執行 .NET Core 或 ASP.NET Core 應用程式
要執行完整 .NET Framework 應用程式在 Windows Container 才支援

文章會將既有的 ASP.NET WebForm 應用程式
透過 Microsoft 提供的範例 dockerfile 建置新的 Docker Image

在 Windows Server 2016 安裝 docker 不在此文章的範圍
執行環境
作業系統
Windows Server 2016 Standard
Docker 版本
version 17.03.1-ee-3, build 3fcee33
建立 ASP.NET WebForm 的 Docker Image

從官方的 Docker Hub 取得 microsoft/aspnet 映像檔

docker pull microsoft/aspnet

下載完成後準備製作映像檔案的 dockerfile 與 ASP.NET WebForm 應用程式檔案

ASP.NET WebForm 範例應用程式可以在此取得 Github 連結

Microsoft 提供建置使用的 dockerfile Github 連結

#microsoft 提供建置 image 的 dockerfile
#建置時使用 microsoft/aspnet:4.7 這個 Image 做擴充
FROM microsoft/aspnet:4.7
ARG site_root=.
ADD ${site_root} /inetpub/wwwroot

將相關檔案放置在同一個資料夾

目錄結構如下

[folder]
- dockerfile
- app/{aspnet-webform 應用程式檔案}

資料夾內容準備完成後要來建置 Image,切換執行目錄到 dockerfile 的位置

使用 docker build 指令建置 Image

docker build -t sample-webform-app:beta . --build-arg site_root=app

建置完成後檢視本機的 docker image 清單是否有新增剛建置的 image

執行新建立的 ASP.NET WebForm Image

使用 docker run 指令執行前面步驟建立的 image

docker run -d --name sample-webform-app sample-webform-app:beta

檢視執行中的 container 清單

使用官方提供的指令碼取得 container 的內部 IP 位址

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" {container_name}
也可以使用 docker exec -it powershell 進入 container 內部取得 IP 位址

在 container 主機開啟瀏覽器輸入內部 IP 位址瀏覽 WebForm 應用程式

ASP.NET WebForm 應用程式正確執行在 container 環境中

補充項目

官方文件中有描述到目前連接埠對應無法在此版本 Image 實現
此問題在未來會被修正(?)。若要連線到 Container 請使用內部的 IP 位址。

參考資料

留言