概述

容器,顾名思义是用来存放并容纳东西的器皿;

而容器技术伴着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文件的相关配置项

 

微软官方的升级向导,供大家参考:https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/

2、使用cli命令发布项目,这时可以不用指定运行时标识,直接发布,因为项目不是运行在服务器(Windows或Linux)上的。

dotnet publish -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的发布会给整个社区带来不一样的变化,需要学习和积累的技术也越来越多,还是那句老话:学无止境。

Linux上安装Docker,并成功部署NET Core 2.0的更多相关文章

  1. linux上安装Docker(非常简单的安装方法)

    Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例, 可以将其启动.开始.停止.删除.而这些容器都是 ...

  2. linux上安装Docker (非常简单的安装方法) 2019

    Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例, 可以将其启动.开始.停止.删除.而这些容器都是 ...

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

    概述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共 ...

  4. Linux 上安装Docker 并部署netcor2.1

    述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共享 ...

  5. 在linux上安装docker

    我的linux系统是阿里云服务器,是centos版本的. 前置条件 64-bit 系统 kernel 3.10+ 用uname -r命令检查内核版本,返回的值大于3.10即可. 用sudo wget ...

  6. 在centos linux上安装docker

    前置条件 64-bit 系统 kernel 3.10+ 1.检查内核版本,返回的值大于3.10即可. $ uname -r 2.确保yum是最新的 $ yum update 3.安装 Docker y ...

  7. linux上安装Docker

    https://blog.csdn.net/qq_36892341/article/details/73918672

  8. 2300+字!在不同系统上安装Docker!看这一篇文章就够了

    辰哥准备出一期在Docker跑Python项目的技术文,比如在Docker跑Django或者Flask的网站.跑爬虫程序等等. 在Docker跑Python程序的时候不会太过于细去讲解Docker的基 ...

  9. linux环境安装docker,部署应用

    安装: 1.Docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否支持安账docker 2.更新yum包:sudo yum update 3. ...

随机推荐

  1. listen and translation exercise 53

    It was hard work and there weren't any interesting things for him. You should be an expert with comp ...

  2. javascript macrotask & microtask

    先看一个 实例 案例 console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Pr ...

  3. str_1.判断两个字符串每个字符出现的次数一样

    1.两个字符串每个字符出现的次数一样 $str1 = "ab'c4*"; $str2 = "cb*'a4"; $ret = isBX($str1, $str2) ...

  4. lxml解析html与元素定位

    lxml.beautifulsoup和正则表达式都可以解析定位html元素.前两者中,lxml比beautifulsoup效率高,所以采用lxml解析html. 方法: from lxml impor ...

  5. 从CWnd::GetSafeHwnd实现得到的知识

    在看MFC源码的过程中,有个地方一直不解,看如下代码 BOOL CFrameWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWO ...

  6. ACM学习历程—HDU4956 Poor Hanamichi(模拟)

    Poor Hanamichi Problem Description Hanamichi is taking part in a programming contest, and he is assi ...

  7. 利用反射拿到并递归C#类中的各个字段名字及类型

       以下方法实现了遍历一个class中所有的字段, 并且递归遍历sub class.  private StringBuilder _properties = new StringBuilder() ...

  8. Getting Started with OpenMP

    Getting Started with OpenMP* Abstract As you probably know by now, to get the maximum performance be ...

  9. 错误: 实例 "ahwater-linux-core" 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: Exceeded maximum number of retries. Exceeded max scheduling attempts 3 for instance 7c1609c9-9d0f-4836-85b3-cefd45f942a7. Last exception: [u

    错误: 实例 "ahwater-linux-core" 执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: Exceeded maximum number of ret ...

  10. sublime text3设置

    我的sublime的设置,ps:这个博文只是为了我自己的一个记录 { "color_scheme": "Packages/Theme - Solarized Flat/S ...