ASP.NET Core微服务之Docker容器化WebAPI

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Tip: 此篇已加入.NET Core微服务基础系列文章索引一、Docker极简介绍1.1 总体介绍  Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Tip: 此篇已加入.NET Core微服务基础系列文章索引

一、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应用程序

目录
相关文章
|
13天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:<https://github.com/khellang/Scrutor>
36 5
|
16天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
153 77
|
24天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
2天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
15 4
|
18天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
59 3
|
21天前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
24 3
|
24天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
56 3
|
24天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
29 2
|
24天前
|
存储 安全 数据中心
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具。本文探讨了 Docker 如何通过 Namespace 和 Cgroups 实现 CPU、内存、网络和存储资源的隔离,提高系统安全性和资源利用率,以及面临的挑战和应对策略。
43 1
|
关系型数据库 MySQL Java
12-微服务技术栈(高级):容器引擎Docker
在前面的学习中,我们掌握了微服务的服务注册与发现(nacos)、配置中心(nacos)、远程服务调用(feign)、网关(gateway),同时借助Idea编译工具多次完成本地服务启动、部署和验证。在微服务架构中,不会再像传统那样单个单个部署服务器,而是会借助Docker进行批量的容器化部署。
976 0