zoukankan      html  css  js  c++  java
  • .NET Core微服务之ASP.NET Core on Docker

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 和 .NET Core on K8S学习实践系列文章索引,可以点击查看更多微服务或容器化技术相关系列文章。

    一、Docker极简介绍

    1.1 总体介绍

      Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    简而言之> 容器是一个打包了应用服务的环境,它是一个轻量级的虚拟机,每一个容器由一组特定的应用和必要的依赖库组成。

      Docker和传统虚拟化之间最大的区别在于:容器是在操作系统层面上实现虚拟化,即直接复用本地主机的操作系统;而传统虚拟化则是在硬件层面实现,如VMware vShpere, Xen及Citrix等。

      

      

    1.2 Docker结构

      Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

      Docker 容器通过 Docker 镜像来创建。

      容器与镜像的关系类似于面向对象编程中的对象与类。  

      Docker的架构如下图所示,Client 通过接口与Server进程通信实现容器的构建,运行和发布。Client和Server可以运行在同一台集群,也可以通过跨主机实现远程通信。

      具体详细内容,请浏览:《几张图帮你理解Docker基本原理及快速入门

    二、Docker的安装

      (1)准备一台Linux主机,这里以CentOS 7.2为例。当然,你也可以使用Windows,不过你得确保是Windows 10 pro版本及以上,且安装了Hyper-V等一系列的相关软件。

      (2)安装docker

      # yum install docker

      

      (3)启动docker服务

      # systemctl start docker.service

      

      (4)配置开机启动并验证

      # systemctl enable docker.service

      

      验证:查看docker版本信息 

      # docker version

      

      (5)配置docker加速器 => 原因你懂得,不设置慢死你,云服务器除外

      # vim /etc/docker/daemon.json

    {

    "registry-mirrors": ["https://d8b3zdiw.mirror.aliyuncs.com"]

    }  

      然后重启docker服务

      # systemctl daemon-reload

      # systemctl restart docker

      (6)Hello World

      # docker run hello-world

      

    三、ASP.NET Core on Docker配置

      (1)拉取dotnet/aspnetcore的最新镜像,这里以aspnetcore 2.0为例

      # docker pull microsoft/aspnetcore:2.0

      

      PS:如果要拉取最新版本(比如.net core 2.1),可以将版本号改为aspnetcore:latest

      如果你想要拉取更多microsoft的镜像,那么搜索一下把:# docker search microsoft

      

      拉取了不想要的镜像,那么删除一个吧,如:# docker rmi imagesID

      

      拉取之后,验证一下是否拉取成功了:# docker images

      

      (2)现在我们进入VS中为我们的一个ASP.NET Core WebAPI编辑一个Dockerfile

    # 父镜像
    FROM microsoft/aspnetcore:2.0
    
    # 设置工作目录
    WORKDIR /app
    
    # 复制发布文件到/app下
    COPY . /app
    
    # 设置端口
    EXPOSE 8810
    
    # 使用dotnet Manulife.DNC.MSAD.NB.AgentService.dll来运行ASP.NET Core项目,注意大小写
    ENTRYPOINT ["dotnet", "Manulife.CD.MSAD.NB.AgentService.dll", "--server.urls", "http://*:8810"]

      (3)发布这个ASP.NET Core WebAPI,并将Release文件传送到Linux服务器中(你可以选择xFTP或者WinScp等工具)

      

      (4)进入上图的AgentService目录中,开始打包docker镜像

      # docker build -t agentservice-container:1.0 . => 不要忘记后面还有一个点.

      

      此刻再次验证:# docker images

      

      (5)万里长征最后一步:运行docker

      # docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0

      

      这里的两个端口号分别是宿主机和容器的映射,前一个是你在外部访问的端口号,后一个是你要映射到docker容器中的端口号,切记和我们在Dockerfile中暴露出来的端口号保持一致。

      PS:这里如果docker run失败后再次运行会提示名称已存在,可以使用以下命令来删除容器

      # docker rm -f [dockername]

      如果想要docker容器在非正常退出后自动重启,可以加上--restart选项,例如下面:

      # docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0 --restart=always

      (6)验证docker运行效果

      方式一:在宿主机验证

      

      方式二:在远程客户端通过浏览器访问

      

    四、Supervisor守护进程

      

      此部分主要针对于在Linux上的dotnet core应用程序,保证程序在异常或者是电脑重启的时候仍然能够正常访问。大家可以浏览杨晓东的《ASP.NET Core Linux下为dotnet创建守护进程》以及focus-lei的《在docker上运行.net core程序》来学习,这里就不再赘述了。

    参考资料

    (1)菜鸟教程,《Docker教程

    (2)杨晓东,《ASP.NET Core Docker部署》,《ASP.NET Core Linux下为dotnet创建守护进程

    (3)李朝强,《Docker打包ASP.NET Core应用,在CentOS上运行

    (4)圣杰,《.NET Core容器化@Docker

    (5)focus-lei,《在Docker上运行.net core程序

    (6)Esofar,《CentOS7 部署 ASP.NET Core应用程序

  • 相关阅读:
    翻译:Razor剖析之第4部分:Razor页面
    学习第二十二天
    jQuery:选择器和事件
    学习第二十天@简单json+上传文件+Ado存储过程
    统计指定时间段内的周未(非周未)天数
    c#动态创建内存模型(笔记)
    cmd命令 任务计划 详解
    BAT教程:第四节(批处理中的变量)
    103个Windows XP运行命令
    BAT教程 :第二节(for命令详解 )
  • 原文地址:https://www.cnblogs.com/edisonchou/p/aspnetcore_on_docker_foundation.html
Copyright © 2011-2022 走看看