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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
全局流量管理 GTM,标准版 1个月
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 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 的存储解决方案简介来了解关于选择存储解决方案的更多信息。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
8天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
6月前
|
存储 监控 安全
【专栏】探讨Docker Compose的核心概念、使用方法及最佳实践,助你轻松驾驭容器编排的世界
【4月更文挑战第27天】Docker Compose是款轻量级容器编排工具,通过YAML文件统一管理多容器应用。本文分三部分深入讨论其核心概念(服务、网络、卷和配置)、使用方法及最佳实践。从快速入门到高级特性,包括环境隔离、CI/CD集成、资源管理和安全措施。通过案例分析展示如何构建多服务应用,助力高效容器编排与管理。
420 2
|
18天前
|
jenkins 测试技术 持续交付
Docker最佳实践:构建高效的CI/CD流水线
【10月更文挑战第17天】在现代软件开发实践中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已成为提高开发效率和软件质量的重要手段。Docker作为一种容器技术,为构建一致且隔离的开发环境提供了强有力的支撑。本文将探讨如何利用Docker来优化CI/CD流程,包括构建环境的标准化、镜像管理以及与CI/CD工具(如Jenkins、GitLab CI)的集成。
37 5
|
4月前
|
存储 Java Docker
使用Docker部署Java应用的最佳实践
使用Docker部署Java应用的最佳实践
|
6月前
|
Ubuntu 安全 Docker
【DevOps】Docker 最佳实践指南(绝对干货)
祝您的 Docker 之旅一切顺利!
207 4
|
20天前
|
安全 Devops 网络安全
【DevOps】Docker 最佳实践指南(绝对干货)
Docker 是一种领先的容器化平台,可简化应用开发、部署和管理。本文档介绍 Docker 的最佳实践,涵盖安全性、网络、镜像、主机安全及资源限制等方面,帮助用户高效利用 Docker,确保应用的安全性和性能。
97 0
|
2月前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
6月前
|
Docker 容器
Docker部署minio-arm64版本,阿里官方推荐
Docker部署minio-arm64版本,阿里官方推荐
|
3月前
|
jenkins 持续交付 开发工具
Jenkins 与 Docker 集成的最佳实践
【8月更文第31天】随着容器技术的兴起,越来越多的团队开始采用 Docker 来构建和部署应用。Docker 提供了一种轻量级的虚拟化方法,使得应用可以在任何地方以相同的方式运行,这极大地提高了开发效率和部署的一致性。与此同时,Jenkins 作为一种广泛使用的持续集成/持续交付(CI/CD)工具,可以帮助团队自动化构建、测试和部署流程。本文将探讨如何将 Docker 与 Jenkins 集成,以简化开发环境的搭建和维护。
321 0
|
4月前
|
存储 Java Docker
使用Docker部署Java应用的最佳实践
使用Docker部署Java应用的最佳实践