.NET微服务:基于容器的应用架构

本系列翻译自微软官网文档,如需了解详情请前往微软官网文档查看

容器和Docker介绍

容器化是软件开发的一种方法,通过该方法可将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像。 容器化应用程序可以作为一个单元进行测试,并可以作为容器映像实例部署到主机操作系统 (OS)。

正如集装箱可以让船、火车或者卡车不需要关注要运输的货物,只需要运输集装箱一样,软件容器作为软件的标准单元,可以包含不同的代码和依赖,按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境。

容器还会在共享 OS 上将应用程序彼此隔离开。 容器化应用程序在容器主机上运行,而容器主机在 OS(Linux 或 Windows)上运行。 因此,容器的占用比虚拟机 (VM) 映像小得多。

每个容器可以运行整个 Web 应用或服务,如图 2-1 所示。 在此示例中,Docker 主机是容器主机,而 App1、App2、Svc 1 和 Svc 2 是容器化应用程序或服务。


图2-1:在一个容器主机上运行多个容器

容器化的另一个优势在于可伸缩性。 通过为短期任务创建新容器,从而快速拓展。从应用程序的角度来看,实例化映像(创建容器)类似于实例化 服务或 Web 应用的进程,但出于可靠性考虑,在多个主机服务器上运行同一映像的多个实例时,通常要使每个容器(映像实例)在不同容错域中的不同主机服务器或 VM 中运行。

总而言之,容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控性。 最重要的优点是可在开发和操作之间提供隔离。

什么是Docker

Docker是一个为应用程序快速自动部署,独立运行在云端或本地的开源项目。Docker也是一个推动和发展这项技术的公司。Docker与包括Microsoft在内的云,Linux和Windows供应商合作。


图2-2:Docker在混合云的所有层上部署容器

Docker 映像容器在 Linux 和 Windows 上本机运行。 在 Windows 主机上只运行Windows 映像,在Linux 主机上只运行Linux映像。 主机是服务器或虚拟机。

你可以在 Windows、 Linux 或 macOS 上进行开发。 在开发计算机运行的 Docker 主机的 Docker 映像的部署位置,包括应用程序和其依赖项。 在 Linux 或 macOS 上,你使用的是 Linux 基础的可以创建仅针对 Linux 容器映像的 Docker 主机。(在 macOS 上你可以编辑代码,或运行 Docker CLI,但截至撰写本文时,容器不会运行直接在 macOS 上。)在 Windows 上,你可以为 Linux 或 Windows 容器创建映像。