DotNet跨平臺 - docker部署.net core2.0項目

来源:https://www.cnblogs.com/nowar/archive/2019/06/27/11098102.html
-Advertisement-
Play Games

參考文檔: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document https://dotnet.microsoft.com/download/linux-package-m ...


 

參考文檔:

https://docs.docker.com/install/linux/docker-ce/centos/

http://www.dockerinfo.net/document

https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current

https://www.cnblogs.com/viter/p/10463907.html

https://www.cnblogs.com/freewsf/p/7818791.html

https://www.cnblogs.com/sheng-jie/p/8107877.html

環境

伺服器系統:CentOS Linux release 7.2.1511

相關工具:VS2017  xftp  putty

伺服器軟體:.net core 2.0,docker 18.09.6,

 前言

之前寫過一篇文章,《.net core項目部署到centos7》,最近看到很多關於docker的文章,感覺這種方式確實好,所以自己也按著別人的文章實現了一把,確實很方便。先來看一張圖片,下麵這條大鯨魚,很形象的描述了Docker的功能,上面的箱子就是一個一個獨立的容器。

這裡先引用官方文檔對Docker進行一下介紹:

Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。

Docker 自開源後受到廣泛的關註和討論,以至於 dotCloud 公司後來都改名為 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用。

Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。

在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。

下麵的圖片比較了 Docker 和傳統虛擬化方式的不同之處,可見容器是在操作系統層面上實現虛擬化,直接復用本地主機的操作系統,而傳統方式則是在硬體層面實現。

             

為什麼要使用Docker

容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷儘量小。傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可。

具體說來,Docker 在如下幾個方面具有較大的優勢。

1、更快速的交付和部署

對開發和運維(devop)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。

開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創建容器,快速迭代應用程式,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程式是如何創建和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。

2、更高效的虛擬化

Docker 容器的運行不需要額外的 hypervisor 支持,它是內核級的虛擬化,因此可以實現更高的性能和效率。

3、更輕鬆的遷移和擴展

Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有雲、私有雲、個人電腦、伺服器等。 這種相容性可以讓用戶把一個應用程式從一個平臺直接遷移到另外一個。

4、更簡單的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。

 

一、伺服器安裝dotnet-sdk

如果CentOS伺服器沒有安裝netcore,需要先用下圖的命令安裝一下,我選擇的是dotnet-sdk-2.0.0,大家也可以根據自己的程式來選擇安裝,

安裝dotnet-sdk的參考文檔:https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current 

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm  #在安裝.NET之前,您需要註冊Microsoft密鑰,註冊產品存儲庫並安裝所需的依賴項。每台機器只需要安裝一次。
sudo yum update 
sudo yum install dotnet-sdk-2.0.0

 

二、Docker 安裝

在2017年的3月1號之後,Docker的版本命名開始發生變化,同時將CE版本和EE版本進行分開,這裡我們選擇安裝免費的CE社區版,

具體區別可以參考:https://docs.docker.com/install/linux/docker-ce/centos/

$ sudo yum install docker-ce docker-ce-cli containerd.io //安裝命令
$ sudo docker --version //查看版本
$ sudo systemctl start docker.service //啟動docker
$ sudo systemctl enable docker.service //設置開機啟動

  

通過docker --version命令,可以看到版本號為18.09.6,用命令 systemctl start docker.service 啟動docker後,我們可以測試下docker是否安裝成功,執行docker run hello-world命令,會看見提示

Unable to find image 'hello-world:latest' locally,意思是說在本地倉庫沒有找到鏡像'hello-world',之後會從官方倉庫中拉取了該鏡像,然後執行。看到下圖的內容,就表示docker安裝成功並運行了。

 

 三、創建.NetCore項目

3.1 創建演示項目

這個沒什麼好說的,我們用vs2017創建一個演示用的mvc項目。program.cs文件做如下修改

3.2為項目編寫Dockerfile文件

有兩種方法,一種是右鍵點擊項目:添加-->Docker支持,創建Dockerfile文件;

           

每二種是直接在項目根目錄下手動創建該文件,Dockerfile文件的內容大致如下:

# 添加基礎鏡像:docker會從網路下載這個鏡像
FROM microsoft/dotnet:2-aspnetcore-runtime
#容器中系統的工作空間
WORKDIR /app
#拷貝當前文件夾下的文件到容器中系統的工作空間(註意:“.”後面有空格)
COPY . /app
 
#設置Docker容器對外暴露的埠
EXPOSE 8080
#容器中使用 ["dotnet","系統啟動的dll"] 來運行應用程式
#使用ENTRYPOINT ["dotnet","系統啟動的dll"]
#或使用 CMD ["dotnet","系統啟動的dll"]
ENTRYPOINT ["dotnet", "WebTest.dll"]

3.3 構建鏡像

下麵到了關鍵的一步了,構建項目鏡像,我們將上面創建的mvc項目進行發佈,然後將發佈後的文件上傳至CentOS伺服器,然後定位到站點文件夾,執行下麵的命令:

sudo docker build -t webtest:1.0 .

webtest是我們創建的鏡像名字,冒號後面的1.0可以理解為版本號,再後面是一個空格再加一個點,這個點表示當前路徑!!

 看到Successfully,表示鏡像構建成功。

 可以輸入命令docker images查看倉庫中的鏡像。

sudo docker images    //查看所有鏡像
sudo docker ps           //查看運行中的容器
sudo docker ps -a       //查看所有容器

sudo docker rm  容器id    //刪除容器
sudo docker rmi  鏡像id    //刪除鏡像

sudo docker pull microsoft/aspnetcore:2  //拉取指定版本的core

3.4 運行鏡像

現在就差最後一步運行了,我們用下麵的命令運行剛剛創建的webtest鏡像,

這裡通過 -p 參數映射容器的8080到宿主機的8080埠:8080:8080(宿主:容器)

-d 參數告訴docker以後臺任務形式運行鏡像

sudo docker run -d -p 8080:8080  webtest:1.0 

輸入命令docker ps查看運行中的容器,註意Status列,Up表示我們剛剛創建的容器正在運行

四、測試站點運行情況

在我們的windows中,瀏覽器輸入伺服器IP+埠號,可以看到站點已經跑起來了

 

 OK,任務完成。

 

 五、擴展docker相關知識

Docker的卸載,不打字了,直接截圖了:

配置鏡像加速

//因為預設的鏡像倉庫遠在國外,拉取一個小的鏡像時間還可以忍受,若拉取一個上G的鏡像就有點太折磨人了,我們使用DaoCloud鏡像加速器來進行鏡像加速。Linux上配置方法如下:

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://37bb3af1.m.daocloud.io`
$ sudo systemctl restart docker

  

docker常用命令

docker pull 鏡像名稱 //拉取鏡像

docker rm -f 容器id //強制刪除容器

docker rmi imageid //刪除鏡像

docker logs -f 容器ID //查看容器日誌

docker stop $CONTAINER_ID //終止容器
docker ps -a //查看所有的容器

docker attach 容器id //進入到容器

docker build -t s2appadmin . //使用Dockerfile文件編譯Docker

dotnet publish //發佈dotnetcore應用

dotnet run //啟動dotnetcore應用

dotnet *.dll //在發佈後的目錄中執行dotnet 程式集的dll文件名,啟動應用

nginx -v //查看nginx版本

nginx -s reload //重新載入nginx

nginx -s stop //停止nginx

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statemen... ...
  • 傳遞任意數量的實參 形參前加一個 * ,Python會創建一個已形參為名的空元組,將所有收到的值都放到這個元組中: 不管函數收到多少實參,這種語法都管用。 1. 結合使用位置實參和任意數量實參 運行結果: 2. 使用任意數量的關鍵字實參 形參**user_info中的兩個星號讓python創建了一個 ...
  • 我們都知道.NET Core 3.0已經發佈了第六個預覽版,我們也知道.NET Core 3.0現在已經支持創建WPF項目了,剛好今天在寫一個代碼生成器的客戶端的時候用到了WPF,所以就把WPF創建以及使用IOC的過程記錄一下,希望能對大家有所幫助。當然文章實例我就以我曾閱讀過的一篇文章的示例代碼來 ...
  • 視圖組件 asp.net core mvc 提供了部分視圖的新替代品:視圖組件。 視圖組件與分佈視圖的主要區別在於視圖組件與控制器不相關。可使用在獨立於單個控制器的場景,如:菜單導航、側邊欄、分頁欄等。 在Shared文件夾中為視圖創建Components文件夾,再創建對應組件的OneModel文件 ...
  • 參考地址:https://blog.csdn.net/qq_18979049/article/details/78613878 一、情景描述 1.有的項目需要部署才能進行真實情況模擬(例如微信公眾號),但是怎麼樣在部署的情況進行調試,就是今天的主題了。 二、解決方案一 1.iis上添加網站,物理位置 ...
  • 原文:https://leastprivilege.com/2017/11/15/missing-claims-in-the-asp-net-core-2-openid-connect-handler/發佈於:2017年11月環境:ASP.NET Core 2.0 原文:https://leastp ...
  • 添加: 顯示: ...
  • 原文:https://www.stevejgordon.co.uk/introduction-to-httpclientfactory-aspnetcore 發表於:2018年1月 原文:https://www.stevejgordon.co.uk/introduction-to-httpclien ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...