Linux 上安装Docker 并部署netcor2.1

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

而容器技术伴着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命令发布项目,这时可以不用指定运行时标识,直接发布,因为项目不是运行在服务器(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

原文地址:https://www.cnblogs.com/Zouzhe/p/10058044.html

时间: 2024-11-07 02:20:05

Linux 上安装Docker 并部署netcor2.1的相关文章

Linux上安装Docker

到目前为止在linux上面安装Docker的最好方式是通过Docker提供的安装脚本来安装.尽管大多数的linux发行版有他们自己的包,但是考虑到Docker的发展速度,那些包都有些过时. 安装Docker需求: 内核版本为3.10或之上,可以通过uname -r来检查,如果你正在使用RHEL或CentOS,你需要7版本或者更新的. 同时记住你需要运行一个64位的架构,可以通过uname -m来检查.结果应该是x86_64. 最简单的安装方法: curl https://get.docker.c

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

Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例, 可以将其启动.开始.停止.删除.而这些容器都是相互隔离.互不可见的. 仓库:类似代码仓库,是Docker集中存放镜像文件的场所. 简单介绍一下在CentOS上安装Docker. 前置条件: 64-bit 系统 kernel 3.10+ 1.检查内核版本,返回的值大于3.10即可. $ uname -r 2.使用 sudo 或 root 权限的用

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

Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例, 可以将其启动.开始.停止.删除.而这些容器都是相互隔离.互不可见的. 仓库:类似代码仓库,是Docker集中存放镜像文件的场所. 简单介绍一下在CentOS上安装Docker. 1.检查内核版本,返回的值大于3.10即可. $ uname -r 2.使用 sudo 或 root 权限的用户登入终端. 3.确保yum是最新的 $ yum upda

Linux上安装Docker,并成功部署NET Core 2.0

概述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共享底层系统资源的同时发挥它最大的优势.相比于虚拟机来说,同一服务器它可以创建出两倍的实例,这样一来,不仅节省了系统开销,而且利用率和性能也得到了提升,何乐而不为.最重要的一点是还帮助开发人员实现了"一次构建,到处运行"的理想! 那么Docker又是什么呢? Docker是基于Go语言开发并

在linux上安装docker

我的linux系统是阿里云服务器,是centos版本的. 前置条件 64-bit 系统 kernel 3.10+ 用uname -r命令检查内核版本,返回的值大于3.10即可. 用sudo wget -qO- https://get.docker.com | sh命令安装docker. 安装完成 用docker version命令查看docker版本 用service docker start命令启动docker服务  查看docker安装在哪一个位置 到此结束 原文地址:https://www

在centos linux上安装docker

前置条件 64-bit 系统 kernel 3.10+ 1.检查内核版本,返回的值大于3.10即可. $ uname -r 2.确保yum是最新的 $ yum update 3.安装 Docker yum install -y docker 4.启动docker systemctl start docker.service 5.验证安装是否成功(有client和service两部分表示docker安装启动都成功了) $docker version

【Linux服务器搭建】——在linux上安装mysql5、tomcat8和jdk8并部署应用

Linux作为java web服务器是首要选择.在工作中也会搭建服务器.今天尝试在linux上搭建tomcat服务器. linux:suse jdk:jre 1.8 tomat:8.0.9 mysql:5.5.39 服务器是用的阿里云服务器.2G内存,双核CPU. 1.mysql安装 下载地址可以使用sohu的镜像进行下载 ,地址:http://mirrors.sohu.com/mysql/ 我下载的名称为: -rw-r--r-- 1 root root 17715414 Jul 21 20:0

Kibana在Linux上安装部署及使用说明

Kibana安装及使用说明 Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索.查看交互存储在Elasticsearch索引中的数据. 官方地址:https://www.elastic.co/cn/products/kibana 一.Kibana安装1.环境准备 Kibana是ElasticSearch的可视化平台,依赖ElasticSearch,需要优先安装ElasticSearch. 示例:ElasticSearch在Linux上安装部署 2.Kibana下载

在WIN SERVER 2016上安装DOCKER(带过坑)

原文:在WIN SERVER 2016上安装DOCKER(带过坑) 目录 1    概要    1 1.1    主要优势    1 2    在Windows Server上部署Docker    2 概要 博客使用Word发博,发布后,排版会出现很多问题,敬请谅解.另外Word发博代码格式显示凌乱,因此相关代码均使用图片替代.可加群(.NET 1群:85318032)获取原始文档. 什么是Docker?Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的