百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

GitHub精选 | .NET Core 的 Docker 镜像

nanshan 2024-10-23 11:50 19 浏览 0 评论

《GitHub精选》是我们分享Github中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐有关.NET Core 的 Docker 镜像

背景:

企业通过使用容器,日益实现成本节约、解决部署问题并改进 DevOps 和生产操作。 通过创建 Azure Kubernetes 服务、Azure Service Fabric 等产品,同时与 Docker、Mesosphere 和 Kubernetes 等行业领先者合作,Microsoft 一直在推出适用于 Windows 和 Linux 的容器创新。 这些产品提供容器解决方案,可帮助公司以云的速度和规模生成并部署应用程序,而无需考虑其选用的平台或工具。

Docker 正在逐渐成为容器行业的事实标准,受到 Windows 和 Linux 生态系统领域最重要供应商的支持。 (Microsoft 是支持 Docker 的主要云供应商之一。)将来,Docker 可能会在云端或本地的任何数据中心普及。


Docker 容器、映像和注册表

使用 Docker 时,开发人员会创建一个应用或服务,并将它及其依赖项打包到一个容器映像中。 映像是应用或服务及其配置和依赖项的静态表示形式。

若要运行应用或服务,应用的映像会实例化,以创建一个在 Docker 主机上运行的容器。 最初,会在开发环境或 PC 中测试容器。

开发人员应将映像存储在注册表中,该注册表可充当映射库并在部署到生产业务流程协调程序时使用。 Docker 通过 Docker 中心维护公共注册表;其他供应商为不同映像集合提供注册表,包括 Azure 容器注册表。 或者,企业可以拥有一个本地专用注册表,用于其 Docker 映像。

为 Docker 容器选择 .NET 5 或 .NET Framework

通过 .NET 生成服务器端容器化 Docker 应用程序时,有两种支持的框架:.NET Framework 和 .NET 5。 这两者共享许多 .NET 平台组件,可在它们之间共享代码。 但两者之间存在根本差异,可根据需要实现的目标选择框架。

官网地址:https://dotnet.microsoft.com/download

构建基于微服务的容器化应用程序

微服务提供很多优点,但也会引起新的巨大挑战。创建基于微服务的应用程序时,微服务体系结构模式是基础支柱。

容器设计原则:在容器模型中,容器映像实例表示单个进程。 将容器映像定义为进程边界,可以创建可用于对进程进行缩放或批处理的基元。

设计容器映像时,可在 Dockerfile 中看到入口点定义。 此定义定义了一个进程,其生命周期控制容器的生命周期。 该进程完成,则容器的生命周期结束。 容器可以表示 Web 服务器等长时间运行的进程,但也可表示批处理作业等生存期较短的进程,这些进程以前可能已实现为 Azure WebJobs。

如果进程失败,则容器结束,Orchestrator 接管。 如果 Orchestrator 已配置为使五个实例保持运行,而其中一个实例失败,则 Orchestrator 会创建另一个容器实例,来替换失败的进程。 在批处理作业中,使用参数启动该进程。 进程完成,则工作完成。

基于 Docker 的应用程序的开发流程

无论你更青睐内容丰富、功能强大的 IDE 还是轻量、灵活地级编辑器,Microsoft 都可为你提供用于开发 Docker 应用程序的工具。

Visual Studio(适用于 Windows)。 使用 Visual Studio 的基于 Docker 的 .NET 5 应用程序开发需要 Visual Studio 2019 版本 16.8 或更高版本。 Visual Studio 2019 附带已内置的 Tools for Docker。 通过适用于 Docker 的工具,可以在目标 Docker 环境中开发、运行和验证应用程序。 可以按 F5,直接在 Docker 主机中运行并调试应用程序(单个容器或多个容器),也可以按 Ctrl+F5,编辑并刷新应用程序,而无需重新生成该容器。 要开发基于 Docker 的应用,此 IDE 是功能最强大的选择。

Visual Studio for Mac。 它是一个 IDE,由 Xamarin Studio 演化而来,在 macOS 中运行。 对于 .NET 5 开发,它需要版本 8.4 或更高版本。 对于使用 macOS 计算机工作而又希望使用功能强大的 IDE 的开发者而言,此工具应当是理想之选。

Visual Studio Code 和 Docker CLI。 如果更青睐支持任何开发语言的轻量级跨平台编辑器,可以使用 Visual Studio Code 和 Docker CLI。 此 IDE 是针对 macOS、Linux 和 Windows 的跨平台开发方法。 此外,Visual Studio Code 还支持 Docker 扩展(例如适用于 Dockerfile 的 IntelliSense)和在编辑器中运行 Docker 命令的快捷任务。

实现可复原的应用程序

微服务和基于云的应用程序必须允许最终必然会发生的部分故障。必须设计应用程序,使其可从这些部分失败中恢复。

恢复能力是指从故障中恢复并继续工作的能力。 这并不是指避免失败,而是接受会发生失败这一事实,并以能够避免停机或数据丢失的方式对失败做出响应。 恢复的目标是使应用程序在发生故障后回到完全正常运行的状态。

设计和部署基于微服务的应用程序已经非常具有挑战性。 然而还需要让应用程序在必然发生某种故障的环境中保持正常运行。 因此,应用程序应具有恢复能力。 应将其设计为能够处理部分故障,如网络中断或者云中节点或 VM 故障。 甚至将微服务(容器)移动到群集内的另一个节点,也可能导致应用程序出现间歇性的功能短缺故障。


在基于微服务的应用程序这类分布式系统中,经常会出现部分失败错误。 例如,单个微服务/容器可能会失败,也可能无法在短时间响应,或者单个 VM 或服务器会出现故障。 由于客户端和服务是彼此独立的流程,因此服务可能无法及时响应客户端的请求。 服务可能过载并且对请求的响应速度过慢,或者只是由于网络问题在短时间内无法访问。

例如,请查看 eShopOnContainers 示例应用程序的订单详细信息页。 如果订购微服务在用户尝试提交订单时没有响应,则客户端进程(MVC Web 应用程序)的错误实现(例如,如果客户端代码使用同步 RPC 而没有出现超时)将会无限期地阻止线程等待回应。 每个无响应的等待除了会造成不良用户体验之外,还会消耗或阻止线程,然而线程在高度可缩放应用程序中极有价值。 如果受阻止的线程数量众多,应用程序的运行时最终会耗尽所有线程。 在这种情况下,应用程序会出现全局无响应,而不只是部分无响应,如上图。

除此之外恢复能力还包括:处理部分失败的策略,实现使用指数退避算法的重试,实现复原Entity Framework Core SQL连接,使用IHttpClineFactory实现复原Http请求,通过Polly实现使用指数退避算法的Http调用重试,实现断路器模式,运行状态监视等。

更多详情:https://docs.microsoft.com/zh-cn/dotnet/

相关推荐

Linux下C++访问web—使用libcurl库调用http接口发送解析json数据

一、背景这两天由于一些原因研究了研究如何在客户端C++代码中调用web服务端接口,需要访问url,并传入json数据,拿到返回值,并解析。 现在的情形是远程服务端的接口参数和返回类型都是json的字符...

干货 | 这 3 个超经典的Linux实战项目,让你分分钟入门Linux系统

编译安装nginx搭建小游戏网站编译安装流程下载nginx代码wget-P/server/tools/http:nginx.org/download/nginx1.22.0.tar.gz解压并进...

权限管理-树莓派linux⑦

前言当你在看这篇README,我感到非常荣幸。作为支持开源、分享的理念的我,给大家带来一些学习上的乐趣。由于本人并非专业的教育领域人士,很多时候天马行空,随心所欲的表达方式,可能让部分人感到不适。请根...

每天Linux学习:linux文件属性

ls-lih先通过这个命令来观察(-l列表显示目录内容详细,-i第一列显示inode,-h将文件大小显示为我们常见的kb,mb等单位)从截图中我们能看出文件属性由这9列信息组成:第1列:inod...

Linux ln、unlink命令用法

ln命令可以用来创建软链接或硬链接。1.创建软链接:ln-s源文件目标文件例如:ln-s/usr/lib/libc.so/usr/local/lib/libc.so.6这样就创建了一...

Linux 系统启动完整流程

一、启动系统流程简介如上图,简述系统启动的大概流程:1:硬件引导UEFi或BIOS初始化,运行POST开机自检2:grub2引导阶段系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器GRU...

最火的 CI/CD 平台 Jenkins 详细搭建教程(for Linux)

在正式学习Jenkins之前我们需要对两个名词有一定了解,其一是DevOps,另外一个就是CI/CD。何为DevOps?来自wiki百科介绍DevOps是一系列软件开发实践,强调开发人员(Dev)和测...

hadoop集群搭建详细方法

第一步:搭建配置新的虚拟机格式化之前先把tmp目录下所有与Hadoop有关的信息全部删除rm-rf/tmp/hadoop-centos*开启之后jps只有Java的进程:sudovi/et...

Linux 常用命令集合

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

inode文件索引,你了解嘛?你的Linux基础真的扎实嘛?

一、inode是什么?深入了解inode,就要从文件存储说起来!文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节。读取硬盘的时候,不会一个个扇区地读取,这样效率...

linux实例之创建service服务

前面我们讲过可以通过service命令来启动,重启,停止指定的服务程序。service服务可以在系统启动时,自动运行该服务,我们可以利用这一特点,创建service文件,并且让系统重启时,自动执行命令...

linux之软连接和硬连接的区别

硬连接硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的...

Linux inode 详解

简介索引节点(IndexNode)是Linux/类unix系统文件系统上的一种数据结构,用于存储有关文件或目录的元数据。它包含文件的所有信息,除了文件名和数据。inode在文件系统如何存储和检...

Bash 脚本实例:获取符号链接的目标位置

我们都熟悉Linux中的符号链接,通常称为符号链接或软链接,符号链接是指向任何文件系统中的另一个文件或目录的特定文件。本文将介绍Linux中符号链接的基础知识,并创建一个简单的bash脚本...

windows快捷方式,符号链接,软链接和硬链接

当一个软件大量的向C盘写入数据,而我们又无法修改软件保存数据的位置时,可以使用windows系统的“符号链接”(SymbolicLink)功能,将保存数据的位置修改到其它分区中。符号链接类似于我们熟...

取消回复欢迎 发表评论: