Docker 官方出品丨Docker 最佳实践系列指南(一)

简介: Docker 企业版 (Docker EE) 是 Docker Inc 推出的旨在用于整条软件供应链的企业级容器平台。

screenshot

本文首发自“Docker公司”公众号(ID:docker-cn)
编译丨小东
每周一、三、五 与您不见不散!


Docker 企业版 (Docker EE) 是 Docker Inc 推出的旨在用于整条软件供应链的企业级容器平台。它是一种完全集成的解决方案,用于开发、部署和管理基于容器的应用程序。借助集成的端到端安全性,Docker EE 通过对您的基础架构进行抽象,使应用可以无缝地从开发转入生产,从而实现了应用程序的可移植性。


您将学到的知识

此参考架构描述了一种标准的生产级 Docker EE 部署。它还详细说明了 Docker EE 的各种组件,包括它们如何工作,如何自动化部署,如何管理用户和团队,如何为平台提供高可用性,以及如何管理基础架构。

本文将不会提供某些特定于环境的配置细节。例如,各种云平台和本地部署基础架构上的负载均衡器有很大差异。对于这些类型的组件,提供了对于特定于环境资源的一般指导原则。


了解 Docker 组件

从开发到生产,Docker EE 为本地以及云端的容器化应用程序提供了无缝的平台。Docker EE 分为三个级别,以满足不同的应用需求。Docker EE 标准版(原名 Docker Datacenter)和 Docker EE 高级版都包含下列组件:

  • Docker EE 基础版(原名“商业支持版”或“CS”引擎),即商业支持的 Docker 容器运行时和平台;
  • Universal Control Plane (UCP),基于 Web 的统一集群和应用管理解决方案;
  • Docker Trusted Registry (DTR),具有弹性的安全镜像管理仓库;

它们合在一起提供了一套集成解决方案,其设计目的如下:

  • 捷性性 — 使用 Docker API 与平台对接,确保可运作的功能不会拖慢应用程序交付速度;
  • 可移植性 — 平台将为应用程序的基础架构的详细信息进行抽象;
  • 可控性 — 环境在默认情况下是安全的,提供鲁棒的访问控制,以及所有操作的日志记录;

为了实现这些目标,平台必须具备弹性和高度的可用性。此参考架构演示了这种鲁棒的配置。


Docker EE 基础版

Docker EE 平台负责容器级别的操作,与 OS 进行交互,提供 Docker API,并运行 Swarm 集群。该引擎也是包括 OS 资源、联网和存储在内的基础架构的集成点。


Universal Control Plane(UCP)

UCP 通过提供集成的应用管理平台来扩展 Docker EE 基础版。它既是用户的主要交互点,也是应用的集成点。UCP 在集群中的所有节点上运行代理程序来监视它们,并且在控制器节点上运行一组服务。这些服务包括用于管理用户的身份服务,用于用户和集群 PKI 的认证中心 (CA),提供 Web UI 和 API 的主控制器,用于 UCP 状态的数据存储,以及用于向后兼容的经典 Swarm 服务。


Docker Trusted Registry(DTR)

DTR 是一个由 UCP 管理并与其集成的应用程序,它提供 Docker 镜像分发和安全服务。DTR 使用 UCP 的身份服务提供单点登录 (SSO),并建立相互信任,从而与其 PKI 集成。它以一组服务的形式运行于一个或多个从节点,其中包括用于存储和分发镜像的镜像库、镜像签名服务、Web UI、API 和用于镜像元数据和 DTR 状态的数据存储。


Swarm Mode

为了提供基于若干节点的无缝集群,DDC 需要依靠 Docker swarm mode 功能。Swarm mode 将节点分为工作节点(运行定义为服务的应用工作负载的节点)和管理节点(负责维护所需状态、管理集群的内部 PKI 和提供 API 的节点)。管理节点也可以运行工作负载。在Docker EE 环境中,它们运行的是 UCP 控制器,而不应该运行其他任何项目。

Swarm mode 服务模型为工作负载提供一种声明式所需状态,可扩展到若干个任务(服务的容器),可以通过稳定的可解析名称访问,而且可以选择暴露端点。可以从任何节点在全集群保留端口上访问暴露的服务,它们通过网格路由(使用 Linux 内核中的高性能交换的快速路由层)与任务通信。这一组功能实现了服务的内部和外部可发现性,UCP 的 HTTP 网格路由 (HRM) 则添加了主机名到服务的映射。


一种标准部署架构

本节演示 Docker EE 的一种标准生产级架构,它使用 10 个节点:3 个 UCP 控制器,3 个用于 DTR 的节点,以及 4 个用于应用工作负载的工作节点。工作节点的数量是任选的,大多数环境会根据应用需求增加工作节点数量,这不会改变架构或集群配置。

对环境的访问是通过 3 个负载均衡器(或 3 个负载均衡器虚拟主机)实现的,它们有与 UCP 控制器、DTR 从节点和集群中运行的应用对应的 DNS 条目。

screenshot

DTR 从节点使用共享的镜像存储。本节中会论述与 S3 兼容的对象存储(默认)以及 NFS 存储。


节点大小

一个节点就是集群(虚拟或物理)中的一台运行Docker 引擎的机器。在配置每个节点时,都要给它分配一个角色:UCP控制器、DTR 或工作节点,从而使它们受到针对运行中的应用工作负载的保护。

要在 CPU、RAM 和存储资源方面确定节点应有的大小,请考虑下列因素:

  1. 所有节点都应该至少达到 UCP 2.2 的最低要求:2 GB RAM 和 3 GB 存储空间。更详细的要求请参见 UCP 文档。
  2. 应该为 UCP 控制器节点提供高于最低要求的资源,但如果这些节点上不运行其他任何项目,则不必分配太多资源。
  3. 理想的工作节点大小将根据您的工作负载而定,所以定义通用的标准大小是不可能的。
  4. 其他考虑因素包括目标密度(平均每个节点的容器数量)、需要一种标准节点类型还是多种类型,以及可能影响大小选择的其他运行考虑。

如有可能,应该通过试验和实际工作负载测试来确定节点大小,而且应该通过反复迭代来优化。下列做法是很好的起点:在您的环境中选择一种标准或默认的机器类型,并且仅使用这种机器的大小。如果标准机器类型提供的资源多于 UCP 控制器的需求,那么就应该为这些节点选择更小的节点大小。无论最初的选择是什么,务必监视资源使用情况和成本以改进模型。

两种示例方案:

  • 一种标准节点大小:2 个 VCPU,8 GB RAM,20 GB 存储空间;
  • 两种节点大小:2 个 VCPU,8 GB RAM,20 GB 存储空间,用于 UCP 控制器;4 个 VCPU,64 GB RAM,40 GB 存储空间,用于工作节点;

根据您选择的 OS,Docker 引擎的存储配置可能需要一些规划。请参阅支持矩阵以了解哪些存储驱动程序被支持用于您的主机 OS。如果您使用 RHEL 或 CentOS,这一点尤其重要,因为它们使用 device mapper 及 direct-lvm。


负载均衡器

负载均衡器的配置应该在安装之前完成,包括 DNS 条目的创建。大多数负载均衡器应该都能与 Docker EE 配合工作。仅有的要求是 TCP 透传和在 HTTPS 端点上执行健康检查的能力。

在我们的示例架构中,三个 UCP 控制器确保了在节点发生故障或控制器重新配置时的 UCP 弹性。通过 GUI 或 API 对 UCP 的访问始终是使用 TLS 完成的。负载均衡器配置为在端口 443 上进行简单的 TCP 透传,并使用位于 https:///_ping 的定制 HTTPS 健康检查。

务必为 UCP 主机创建 ucp.example.com 之类的 DNS 条目,并指向负载均衡器。

三个 DTR 从节点的设置与 UCP 控制器的设置类似。在这些节点上同样使用 TCP 透传至端口 443,但健康检查是在 https:///health

为 DTP 主机创建 dtr.example.com 之类的 DNS 条目,并指向负载均衡器。务必使该条目尽可能简洁,因为它将是镜像全名的一部分。例如 user_a 的 webserver 镜像将名为 dtr.example.com/user_a/webserver。

通过应用负载均衡器可访问通过 UCP 的 HTTP 网格路由 (HRM) 暴露的服务 HTTP 端点。HRM 提供一个反向代理,将域名映射到暴露端口且连接到ucp-hrm Overlay 网络的服务。例如 voting 应用暴露 vote 服务的端口 80。HRM 将 http://vote.apps.example.com 映射到 ucp-hrm Overlay 网络上的此端口,而应用 LB 本身将 *.apps.example.com 映射到集群中的节点。

有关 UCP 上的应用负载均衡的更多详细信息,请参见 Universal Control Plane 2.0 服务发现与负载均衡。


DTR 存储

DTR 通常需要存储大量镜像。它使用的是外部存储(S3、NFS 等),而不是节点存储,因此可以在 DTR 从节点之间共享。DTR 在从节点之间复制元数据和配置信息,但不在镜像层本身之间复制。要确定存储大小,请以环境中使用的现有镜像的大小为起点进行调整。

最好使用环境中现有的存储解决方案,使镜像存储能够得益于现有的操作经验。如果您必须选择新的解决方案,请考虑使用与 S3 兼容的对象存储,它会更密切地映射到镜像库操作。

请参阅用于 Docker CaaS 的存储解决方案简介来了解关于选择存储解决方案的更多信息。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
存储 负载均衡 调度
Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡
Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡
257 0
|
19天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
2月前
|
PyTorch 算法框架/工具 Docker
ModelScope问题之odelScope使用了官方的docker的cpu镜像如何解决
ModelScope镜像是指用于在ModelScope平台上创建和管理的容器镜像,这些镜像包含用于模型训练和推理的环境和依赖;本合集将说明如何使用ModelScope镜像以及管理镜像的技巧和注意事项。
44 0
|
2月前
|
安全 Linux Docker
制作 Python Docker 镜像的最佳实践
制作 Python Docker 镜像的最佳实践
|
3月前
|
NoSQL 应用服务中间件 数据安全/隐私保护
Docker镜像创建及管理(Hub官方仓库使用及私有注册中心搭建)
Docker镜像创建及管理(Hub官方仓库使用及私有注册中心搭建)
|
4月前
|
负载均衡 持续交付 Docker
Docker容器编排与微服务架构的整合:最佳实践
微服务架构和Docker容器编排工具的结合为现代应用程序的构建和部署提供了巨大的便利性。本文将深入探讨如何将这两者整合在一起,提供丰富的示例代码和详细的最佳实践,以帮助大家构建可伸缩、可维护和高可用的微服务应用。
|
4月前
|
安全 测试技术 虚拟化
Docker实战案例研究:深入行业应用与最佳实践
Docker作为一种轻量级、可移植、可扩展的容器化技术,在各行各业都得到了广泛应用。本文将通过深入实际案例,介绍Docker在不同行业的应用以及相应的最佳实践,提供更加丰富的示例代码,以帮助大家更全面地理解和运用Docker的强大功能。
|
4月前
|
安全 应用服务中间件 nginx
Docker安全性:最佳实践和常见安全考虑
Docker 的快速发展和广泛应用使其成为现代应用开发的热门选择,然而,容器环境的安全性也受到关注。本文将深入研究 Docker 安全性的最佳实践,包括容器镜像安全、容器运行时安全、网络安全等方面,并提供丰富的示例代码,帮助读者全面了解如何确保 Docker 环境的安全性。
|
6月前
|
存储 Kubernetes 监控
聊聊工程化 Docker 的最新趋势以及最佳实践
聊聊工程化 Docker 的最新趋势以及最佳实践
43 0
|
8月前
|
Kubernetes Java Devops
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)
学习SpringBoot官方镜像方案的细节
381 0
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)