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

歡迎訪問 生活随笔!

生活随笔

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

linux

升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署

發布時間:2023/12/4 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

容器,顧名思義是用來存放并容納東西的器皿;

而容器技術伴著Docker的興起也漸漸的映入大家的眼簾,它是一個抽象的概念,同時也是默默存在世上多年的技術,不僅能使應用程序間完全的隔離,而且還能在共享底層系統資源的同時發揮它最大的優勢。相比于虛擬機來說,同一服務器它可以創建出兩倍的實例,這樣一來,不僅節省了系統開銷,而且利用率和性能也得到了提升,何樂而不為。最重要的一點是還幫助開發人員實現了“一次構建,到處運行”的理想!

那么Docker又是什么呢?

  • Docker是基于Go語言開發并開源的容器引擎

  • Docker將應用軟件運行時所需的一切都打包成互相隔離的容器

  • Docker可以自動執行并配置開發/線上環境,快速構建,測試和運行復雜的多容器應用程序

  • 對擁有數千個節點或容器的應用程序,Docker也能快速的擴展和調配

  • 可以運行在主流的Linux系統,Mac以及Windows上,并且保證無論軟件在哪里部署,都能正常運行并得到相同的結果

相關概念介紹

  • Image鏡像和Container容器:你可以把兩者理解為類和實例對象,或者是ISO系統鏡像和虛擬機的關系。不同的Image所包含的軟件或者環境是不同的,但是你可以使用Dockerfile(docker特有語法規則所創建的文件)進行管理。而Container則是以Image作為模板,可以獨立運行的微型系統,一個Image可以創建出來多個Container容器的實例

  • Registry:Docker Hub鏡像倉庫,為每個人提供龐大的鏡像資源進行拉取和使用

  • Dockerfile:是一個將鏡像命令組合在一起的文件,用于Image的自動構建

正文

系統環境

宿主機:Windows 10 專業版

Linux服務器:?Ubuntu 17.04 (GNU/Linux 4.10.0-28-generic x86_64),從16.10版本升級的,由Hyper-V管理

軟件環境

開發工具:Visual Studio 2017 15.3(.NET Core 2.0)

遠程管理工具:Putty,基于SSH,操作簡單的遠程命令控制,省得你把命令給敲錯咯

SFTP客戶端:WinScp,處理Linux和Windows間的文件傳輸

容器:Docker 17.06.0-CE

一、安裝Docker

a)、設置Docker倉庫

1、按慣例,首先更新Ubuntu的包索引

$ sudo apt-get update

2、讓服務器可以使用Https更新倉庫

$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

3、添加Docker官方的密鑰對,如果沒問題,會返回“OK”

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4、校驗密鑰(9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88)是否和官方一致

$ sudo apt-key fingerprint 0EBFCD88

5、設置官方穩定版的倉庫來源

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

b)、安裝Docker

1、再次更新下包索引,因為剛才加了Docker倉庫,確保是否命中了Docker源

$ sudo apt-get update

2、安裝最新版本的Docker-CE社區版

$ sudo apt-get install docker-ce

3、需要安裝其他版本的請使用以下命令

$ sudo apt-get install docker-ce=1.13

4、查看是否安裝成功

$ docker version

5、試著運行一個測試鏡像,萬能的Hello World!

$ sudo docker run hello-world

二、.NetCore的Docker配置

準備工作:首先記錄接下來可能會用到的幾個常用命令

sudo docker pull microsoft/dotnet
//從docker倉庫拉取一個名稱為“microsoft/dotnet”的鏡像 sudo docker build light ? ?//構建一個名稱為light的容器 sudo docker run hello-world //運行hello-world容器 sudo docker images ? ?//查看所有鏡像 sudo docker rmi 63sf86332e ? ?//刪除一個imageid的鏡像 sudo docker rmi $(docker images -q) //刪除所有鏡像 sudo docker ps -a //查看所有容器 sudo docker rm 6f0c67de4b72 ? ?//刪除一個containerid的容器 sudo docker rm $(sudo docker ps -a -q) //刪除所有容器


1、拉取dotnet-sdk的最新鏡像,速度慢的話請自行搜索daocloud docker hub加速。

sudo docker pull microsoft/dotnet:latest

完成之后查看一下鏡像

sudo docker images

2、進入到這個鏡像,查看版本沒問題后創建一個控制臺程序,然后運行并查看結果

sudo docker run -it microsoft/dotnet  
//每次run,都會重新構造出新的互不影響的容器,請自行查看 dotnet
--version mkdir test cd test dotnet new

dotnet new console dotnet run ? ?
//.NetCore2.0已經將dotnet restore變成了隱式命令,需要的時候會自動執行

說明:使用Ctrl+D快捷鍵或者鍵入exit命令來退出命令

三、升級項目到.NetCore2.0,并發布

1、分別修改類庫和Web的項目文件,升級到.Net Core 2.0和.Net Standard 2.0,其中包括Nuget上的一些組件,或者直接通過右鍵項目->屬性->目標框架進行修改,同時修改Program.cs和Startup.cs文件為2.0默認的方式,完成后他們的樣子是醬紫的,是不是很簡潔明了。

類庫的csproj項目文件:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>netstandard2.0</TargetFramework></PropertyGroup> </Project>

Web的csproj項目文件

<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>netcoreapp2.0</TargetFramework><RuntimeIdentifiers>win10-x64;ubuntu.16.10-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
   <AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /><PackageReference Include="Microsoft.AspNetCore.Session" Version="2.0.0" /><PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" /><PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" />
   <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.0" PrivateAssets="All" /></ItemGroup><ItemGroup><DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /></ItemGroup><ItemGroup><ProjectReference Include="..\Light.Common\Light.Common.csproj" /><ProjectReference Include="..\Light.Model\Light.Model.csproj" /></ItemGroup></Project>

簡潔的Program.cs

using Microsoft.AspNetCore;

using Microsoft.AspNetCore.Hosting;


namespace Light.Web

{

? ? public class Program

? ? {

? ? ? ? public static void Main(string[] args)

? ? ? ? {

? ? ? ? ? ? BuildWebHost(args).Run();

? ? ? ? }


? ? ? ? public static IWebHost BuildWebHost(string[] args) =>

? ? ? ? ? ? WebHost.CreateDefaultBuilder(args)

? ? ? ? ? ? ? ? .UseStartup<Startup>()

? ? ? ? ? ? ? ? .Build();

? ? }

}

下面是我的Startup文件的相關配置項

using System;

using Microsoft.AspNetCore.Builder;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.DependencyInjection;

using Light.Web.DBContext;

using Microsoft.EntityFrameworkCore;

using Light.Web.Models;


namespace Light.Web

{

? ? public class Startup

? ? {

? ? ? ? public Startup(IConfiguration configuration)

? ? ? ? {

? ? ? ? ? ? Configuration = configuration;

? ? ? ? }


? ? ? ? public IConfiguration Configuration { get; }


? ? ? ? public void ConfigureServices(IServiceCollection services)

? ? ? ? {

? ? ? ? ? ? services.AddDbContext<LightContext>(m =>

? ? ? ? ? ? {

? ? ? ? ? ? ? ? m.UseSqlServer(Configuration.GetConnectionString("LightContextConnection"));

? ? ? ? ? ? });

? ? ? ? ? ? services.AddSession(m =>

? ? ? ? ? ? {

? ? ? ? ? ? ? ? m.IdleTimeout = TimeSpan.FromHours(1);

? ? ? ? ? ? });

? ? ? ? ? ? services.AddMvc(m =>

? ? ? ? ? ? {

? ? ? ? ? ? ? ? m.Filters.Add(typeof(LightActionFilter));

? ? ? ? ? ? ? ? m.Filters.Add(new LightExceptionFilter());

? ? ? ? ? ? });

? ? ? ? ? ? var serviceProvider = services.BuildServiceProvider();

? ? ? ? ? ? var dbContext = serviceProvider.GetService<LightContext>();

? ? ? ? ? ? LightContextSeed.SeedAsync(dbContext).Wait();

? ? ? ? }


? ? ? ? public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)

? ? ? ? {

? ? ? ? ? ? if (env.IsDevelopment())

? ? ? ? ? ? {

? ? ? ? ? ? ? ? app.UseDeveloperExceptionPage();

? ? ? ? ? ? }

? ? ? ? ? ? else

? ? ? ? ? ? {

? ? ? ? ? ? ? ? app.UseExceptionHandler("/Home/Error");

? ? ? ? ? ? }


? ? ? ? ? ? app.UseStaticFiles();

? ? ? ? ? ? app.UseSession();

? ? ? ? ? ? app.UseMvc(routes =>

? ? ? ? ? ? {

? ? ? ? ? ? ? ? routes.MapRoute(

? ? ? ? ? ? ? ? ? ? name: "default",

? ? ? ? ? ? ? ? ? ? template: "{controller=Home}/{action=Index}/{id?}");

? ? ? ? ? ? });

? ? ? ? }

? ? }

}

微軟官方的升級向導,供大家參考:https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/

2、使用cli命令發布項目,注意指定發布時的運行時標識

dotnet publish -r ubuntu.16.10-x64 -c Release -o ../Publish

四、使用Docker進行部署

1、使用Winscp登陸到服務器上,并將發布之后的文件夾publish上傳到服務器上

2、創建Dockerfile文件,并將其配置成以下內容

FROM microsoft/dotnet WORKDIR /app COPY ./publish . ENTRYPOINT ["dotnet", "Light.Web.dll"]

3、切換到Dockerfile所在的目錄下,并執行構建命令,成功之后會有下圖的提示

sudo docker build -t lightweb .  //注意后邊還有一個點呢

4、運行剛才構建成功,名字為lightweb的容器,直接綁定服務器的80端口

sudo docker run -p 80:80 -e "ASPNETCORE_URLS=http://+:80" lightweb

運行成功之后是這樣的(請暫時忽略Warning),表示該容器內的程序正在使用80端口監聽著.......

5、試著用IP訪問一下,不知道自己IP的請使用ifconfig命令進行查看

最后

在看到最后一張圖的時候,其實自己心里還是挺激動的;雖然中間遇到一些差錯,比如項目文件中的MvcRazorCompileOnPublish節點,發布成ubuntu時需要改成false,或者直接刪掉,再者是圖片的名稱后綴是大寫,但是我程序里邊寫的是小寫,發布之后圖片不顯示,是因為Linux是嚴格區分大小寫的。囧~另外提醒一下,發布到IIS上時,請及時更新AspNetCoreModule模塊為最新的DotNetCore.2.0.0-WindowsHosting.exe。

這里并沒有介紹.NetCore2.0的相關知識,想了解的可以移步到張大隊長的匯總:.NET Core 2.0 正式發布信息匯總

相信.NetCore2.0的發布會給整個社區帶來不一樣的變化,需要學習和積累的技術也越來越多,還是那句老話:學無止境。

相關文章:?

  • .NET Core 2.0 正式發布信息匯總

  • .NET Standard 2.0 特性介紹和使用指南

  • .NET Core 2.0 的dll實時更新、https、依賴包變更問題及解決

  • .NET Core 2.0 特性介紹和使用指南

  • Entity Framework Core 2.0 新特性

原文地址:http://www.cnblogs.com/wangjieguang/p/docker-dotnetcore2.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署的全部內容,希望文章能夠幫你解決所遇到的問題。

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