windows 下部署 .netcore 到 docker


  前面我們演示了如何將 Asp.Net Core 程序部署到 iis 和 部署到 windows 服務。其實前面的都是鋪墊,如何將 Asp.Net Core 站點部署到 docker 才是這個系列文章的重點。畢竟 .net core 它是跨平台的,能跑在 Linux 下才能體現它的跨平台性。

 

  一、一分鍾了解 Docker    

  Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。

簡而言之> 容器是一個打包了應用服務的環境,它是一個輕量級的虛擬機,每一個容器由一組特定的應用和必要的依賴庫組成。

  Docker和傳統虛擬化之間最大的區別在於:容器是在操作系統層面上實現虛擬化,即直接復用本地主機的操作系統;而傳統虛擬化則是在硬件層面實現,如VMware vShpere, Xen及Citrix等。

  

  

 

  Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。

  Docker 容器通過 Docker 鏡像來創建。

  容器與鏡像的關系類似於面向對象編程中的對象與類。  

  Docker的架構如下圖所示,Client 通過接口與Server進程通信實現容器的構建,運行和發布。Client和Server可以運行在同一台集群,也可以通過跨主機實現遠程通信。

  具體詳細內容,請瀏覽:《幾張圖幫你理解Docker基本原理及快速入門

 

  二、安裝 Docker

  windows 10 下安裝 Docker Desktop for Windows,windows 10 之前的版本安裝 Docker Toolbox。由於我當前演示的環境是 windows 8.1,所以下載 Docker Toolbox

Docker Desktop for Windows is available for free.

Requires Microsoft Windows 10 Professional or Enterprise 64-bit. For previous versions get Docker Toolbox.

By downloading this, you agree to the terms of the  Docker Software End User License Agreement and the  Docker Data Processing Agreement (DPA).

  安裝 Docker Toolbox  之前,必須確定開啟了硬件虛擬化。windows 8.1如果沒有開啟,需要去 BIOS 設置開啟虛擬化技術。windows 10 網上的介紹是去 控制面板 \ 所有控制面板項 \ 程序和功能 \ 啟用或關閉 windows 功能 里勾上 Hyper-v,不過我沒試過。 

   之后安裝過程保持默認設置,但在 Setup-Docker Toolbox 界面下 Select Additional Tasks 中一定記得勾選最后一項(Install VirtualBox with NDIS5 driver[default NDIS6])。

 

   安裝完成后桌面會生成三個快捷方式,分別為:

  1. Docker Quickstart Terminal: 提供Docker的命令行操作
  2. Oracle VM VirtualBox: 虛擬機軟件。
  3. Kitematic (Alpha):圖形化的docker工具

   在使用Docker前,要先創建docker machine,它其實是台輕量級 linux 內核虛擬機,不過在使用它的時候,你可能根本察覺不出來它是虛擬的。直接雙擊打開 Docker Quickstart Terminal,它就會自動安裝好 docker machine,前提是你要有梯子,不然會卡死在安裝 boot2docker.iso 這一步。沒梯子的可以參考這里

 

  三、部署程序

  3.1  添加 Docker 支持

  打開上一篇的項目,右鍵添加 Docker 支持。

  3.2  編輯 Dockerfile 腳本

  刪掉自動生成的 DockerFile 腳本,使用以下腳本:   

#引入鏡像,低版本 docker 去掉  AS base
#換成阿里鏡像
#FROM registry.cn-chengdu.aliyuncs.com/jimlicatpub/aspnet:3.1-buster-slim AS base
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base

#配置工作目錄
WORKDIR /app
 
#暴露容器端口,此端口與程序運行路徑一致,可
EXPOSE 80
 
#復制文件到工作目錄
COPY . .

#ENV :配置系統環境變量,比如程序環境環境等在這里配置(開發、預發、線上環境)
#這里是配置程序運行端口 如果程序不使用默認的80端口這里一定要設置(程序運行端口)
ENV ASPNETCORE_URLS http://+:80

#啟動程序
ENTRYPOINT ["dotnet", "Riz.Web.dll"]

  同時修改 DockerFile 輸出屬性

  3.3 發布程序

   3.4 生成鏡像文件

  轉到發布后的目錄,shift + 右鍵 - 在此處打開命令 打開命令行,使用以下命令生成鏡像。注意后面的 . 不能去掉。

#docker build -t imagename:version .
#版本號可以不寫,表示沒有版本號(last)
#指令后面有一個"." 不能漏,代表當目前目錄的意思
#riz.web 是鏡像的名稱,可以根據自己需要修改 docker build -t riz.web .

  完成后可查看生成的鏡像。這里如果沒有FQ,在拉取 .net core 鏡像時可能會卡住。解決方案是使用 docker-mcr 加速鏡像,跟着它的說明步驟手動拉取鏡像,再運行 docker build 命令Ok。

  3.5 運行鏡像

#https://www.runoob.com/docker/docker-run-command.html
#docker run -d -p 2000:80 --name containername imagename:version
#-d 意思是后台運行
#-p: 指定端口映射,格式為:主機(宿主)端口:容器端口。例如配置2000:80就是外網的2000端口映射到docker的80端口
#-name 為容器指定一個名稱
#imagename:version 鏡像:版本
#注意事項:如果你的服務器是阿里、騰訊、華為雲等,配置的端口一定要在安全組配置里打開,比如下面的2000端口,不然訪問不了
docker run -d -p 2000:80 --name riz.web riz.web

  如果運行后出現一串ID,則表示運行正常,80為docker容器的端口,映射到本機的端口號位2000。按照園子里的一些介紹文章,容器運行起來就萬事大吉了,瀏覽器里輸入 http://localhost:2000/ 就能看到運行效果。可到我這怎么倒騰不行,直接顯示 localhost 拒絕了我們的連接請求。難道是因為我的環境是 win8.1,只有 win 10 的 Hyper-v 才能做得到?如果有朋友在 win10 下直接輸入 localhost:port 能運行成功,麻煩留言告知,不勝感謝。后來仔細想想,localhost 表示的是本地主機(宿主主機),那么站點的 host 應該是 docker 所在虛擬機的 ip 才對。docker-machine ip default,看到 docker 的 ip 是 192.168.99.100,瀏覽器里輸入 http://192.168.99.100:2000/,運行效果馬上出來~~

 

  

  參考資料:

  1. 官方文檔, 《Host ASP.NET Core in Docker containers

  2. Edison Zhou,《 .NET Core微服務之ASP.NET Core on Docker

  3. SzeCheng,《幾張圖幫你理解Docker基本原理及快速入門

  4. 優雅轉身,《Windows下部署安裝Docker

  

  示例代碼托管:https://gitee.com/TANZAME/Demo/tree/master/07.Core/Riz.Web 

  技術交流 QQ 群:816425449

 


免責聲明!

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



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