日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Docker4Dev #6 使用 Windows Container 运行.net应用

發布時間:2023/12/4 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker4Dev #6 使用 Windows Container 运行.net应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于d4d系列:之前這個系列叫做docker4dotnet,因為當時主要是為了能夠探索在docker上運行.net應用;現在我覺得應該叫做docker4developer,因為我希望能夠幫助更多的開發人員使用docker技術。今天這篇就算是新的Docker4Dev系列的開始,后續我會陸續發布更多的幫助開發人員使用容器的文章。


隨著 Windows Server 2016 的正式發布,Windows Container也可以被部署到生產環境了。Linux Container存在的時間很久了,但是直到2013年Docker的出現我們才有了一種很簡單的方式來使用Container技術,而在Windows平臺上,類似的Container技術其實也存在很長時間了,但是由于Windows本身的一些特點,我們一直很難(就算經過復雜的配置)使用類似Linux Container的完整應用級別的隔離。這其中的原因我個人覺得主要是因為Windows的封閉性,造成社區無法按照自己的要求對其進行改進。2013年Docker發布后,對整個IT市場造成的沖擊巨大,微軟同樣也感受到了威脅,對于Container技術的追趕也隨即開始,讓人感到欣慰的是,微軟這次沒有再次采用閉門造車的方式,而是采用了更加開放的方法與社區合作,接受社區中已有的工具和方法;Windows Container對于Docker工具鏈的良好支持就說了這一點。


因此,如果你熟悉Docker,那么這篇文章的內容對你沒有什么新奇之處;但是如果你像我一樣是個在Windows平臺上工作多年的開發人員,就會發覺其中的好處。


你需要怎樣的環境?

首先,搭建一個可以運行 Windows Container 的環境有3個選擇:Windows Server 2016, Windows 10 和 Nano Server。另外,你需要了解 Windows Container 有2種不同的運行模式:Windows Server Container 和 Hyper-V 模式。這其中的區別請見下圖:


其實在我們運行的時候,你是感覺不到其中的區別的,你仍然使用熟悉的 docker run 命令來啟動容器,不過操作系統會根據上面表格所列自動的選擇當前平臺上的默認Container類型運行你的容器。


如果你希望嘗試 Windows Container, 最簡單的方式就是安裝 Windows 10 (專業版或者企業版),然后安裝 Docker for Windows 的工具。具體方法可以參考:https://docs.docker.com/docker-for-windows/


這里我準備了一個簡單的PowerShell腳本,直接運心就可以完成啟用Windows 10上的Container和Hyper-V功能,由于Windows 10只能運行Hyper-V Container,所以一定需要打開這個功能才可以。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All Enable-WindowsOptionalFeature -Online -FeatureName containers -All Restart-Computer -Force


用Docker支持傳統 .net 開發

之所以說“傳統”,這主要是為了和 .net core做區分,因為.net core本身是跨平臺的,所以完全可以使用 Linux Container 來運行(具體請見之前的d4d系列文章),也就不需要 Windows Container 的支持,當然你也可以使用 Windows Container 來運行 .net core,這完全沒有問題。但是我覺得大多數 .net 開發人員還是更加關心自己的 .net 2.0/3.5/4.5 應用如何使用 Container。


在配置好以上所需要的開發環境之后,你就可以用 Visual Studio 進行傳統.net應用的開發,并用docker完成Windows Container的鏡像打包和運行了。只是有一點,你需要將你的Docker for Windows 工具切換到 Windows Container的支持上才行。


一旦完成了切換,你用 docker 所做的所有操作就都轉向 Windows Container 了。(注:這其實只是現在的一個折中做法,未來的 docker 工具一定是可以同時操作 Windows 和 Linux 兩種 Container 類型的)。


首先我們用 Visual Studio 2017 來創建一個 asp.net 4.5的應用程序,然后F5運行一下,確保程序可以正常啟動。


現在,我們來添加一個Dockerfile,為了區分我把它命名為 Dockerfile.windows


以下是這個Dockerfile.windows的內容

FROM harbor-bj.devopshub.cn/microsoft/iis SHELL ["powershell"]RUN Install-WindowsFeature Net-Framework-45-ASPNET ; \Install-WindowsFeature Web-Asp-Net45ARG source=. WORKDIR 'c:\app'RUN Remove-Website -Name 'Default Web Site' RUN New-Website -Name 'aspnet45docker' -Port 80 \-PhysicalPath 'c:\app' -ApplicationPool '.NET v4.5'EXPOSE 80 COPY $source .


注意幾點:

1. 為了能夠更快的下載基礎鏡像,我這里使用了LEANSOFT在北京的harbor站點;這里我已經預先同步了Docker Hub上的基礎鏡像。
2. 建議大家先預先下載這個基礎鏡像,因為 Windows 的基礎鏡像都很大 (WindowsServerCore 有4個G,NanoServer也有400M)
3. 這個Dockerfile中使用了 PowerShell 作為腳本引擎,所以后續你看到的命令都是 PowerShell 命令,比如: Install-WindowsFeature, New-Website 等等。

說實話,這個Dockerfile寫得很順手,畢竟之前對PowerShell的熟悉程度還是超過了shell script,這可能是 Windows 開發人員的好消息。


現在你就可以用熟悉的方式“發布站點”到本地文件夾,然后在里面進行 docker build 了,為了保證這個Dockerfile.windows可以被正常的復制到發布站點中,我還添加了一個Post-Build 腳本,確保每次發布都自動復制這個Dockerfile.windows 文件。


在發布完成的目標目錄內運行以下命令就可以打包了

docker build -f Dockerfile.windows -t aspnet45web01:win-v1 .


好了,現在啟動Container

docker run -itd -p 81:80 aspnet45web01:win-v1

進行到這里,用過 Docker for Windows 的同學一定會打開瀏覽器 http://localhost:81 來訪問站點,但是你啥也看不到;這是因為 Docker for Windows 對 Windows Container 的支持還不夠完整,沒有進行 localhost 的自動映射,所以你需要使用 docker inspect 來獲取容器的 ip 地址,然后通過 ip地址直接訪問。

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <container id>


打開以上命令獲取的ip地址,注意不要用 81 端口,而使用容器本身的80端口,因為我們是直接對容器進行訪問?,F在你就可以看到一個傳統的.net 4.5應用運行在 Windows Container中了,如果你注意看了我的 Dockerfile,你就知道這個站點實際是跑在 IIS 上面的。


一點感受

Windows Container雖然已經可以投入生產了,但是就和 Docker 剛剛出現時一樣存在一些問題,最大的問題是鏡像文件太大。上面說了,WindowServerCore鏡像4個G,這確實是有點夸張。我覺得微軟的目的是為了能夠用同樣的鏡像同時支持Windows Server Container和Hyper-V Container,畢竟Hyper-V Container是作為一個VM存在的,用一個完整的操作系統鏡像就可以同時在2中模式上運行,這樣當然是有好處的,因為大家不用考慮不同的運行模式而改用不同的基礎鏡像。但是我覺得從技術上,如果采用 Windows Server Container,微軟應該是可以提供非常小的基礎鏡像,類似 docker 提供的空鏡像,這樣對第一次部署容器會有很大的性能提升。


但是話說回來,當你第一完成一個容器部署后,因為基礎鏡像已經存在,每次更新的數據就只有很小的部分(只是應用程序本身),這樣后續的部署速度還是很快的。


另外,對于Hyper-V Container的存在的目的,我覺得除了可以提供更好的容器隔離能力(因為是VM,所以根本就是2臺機器,不存在共享內核的問題),另外一個重要的目的就是在Windows平臺上支持Linux Container的運行。希望微軟的動作可以更快一點,畢竟你有全球最好的開發人員,沒有什么是技術上做不到的。


相關文章:

docker4dotnet #1 – 前世今生 & 世界你好

docker4dotnet #2 容器化主機

docker4dotnet #3 .net猿和小鯨魚的蘋果山之旅

docker4dotnet #4 使用Azure云存儲搭建高速 Docker registry

docker4dotnet #5 使用VSTS/TFS搭建基于容器的持續交付管道



推薦一個培訓

基于Docker的DevOps實戰培訓】是由徐磊老師主講的三天封閉式收費課程,地點北京,時間2017年03月24-26日。課程結合了徐磊老師多年來在DevOps上的實踐經驗和Docker技術,具有很強的實戰意義。詳細內容及報名方式點擊“閱讀原文”。


內容轉載自公眾號

DevOps 了解更多

總結

以上是生活随笔為你收集整理的Docker4Dev #6 使用 Windows Container 运行.net应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。