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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
云防火墙,500元 1000GB
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 本节详细说明架构的安装过程,并提供一个核对表。它并不能替代有关文档,后者提供了更多详细信息,从各方面来讲都是权威性的。本节的目标是帮助您定义一个可重复的(最好也是自动化的)过程,用以部署、升级和扩展 Docker EE 环境。

screenshot

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


对于 Docker EE 安装的建议

本节详细说明架构的安装过程,并提供一个核对表。它并不能替代有关文档,后者提供了更多详细信息,从各方面来讲都是权威性的。本节的目标是帮助您定义一个可重复的(最好也是自动化的)过程,用以部署、升级和扩展 Docker EE 环境。

Docker EE 标准版或高级版安装的三个主要阶段如下所示:

  1. 部署和配置基础架构(主机、网络、存储);
  2. 安装和配置作为应用在主机上运行的 Docker 引擎;
  3. 安装和配置 UCP 和 DTR,它们作为在引擎上运行的容器而实现;

基础架构注意事项

安装文档详细说明了 Docker EE 标准版和高级版的基础架构要求。建议使用环境中现有的或特定于平台的工具来为基础架构组件提供标准化的可重复配置。

网络

Docker 组件需要通过网络通信,文档列出了为实现内部集群通信需要开放的端口。如果集群的内部网络配置不当,可能引发难以追查原因的问题。最好先从相对简单的环境开始。此参考架构假定所有主机使用同一个子网,而容器使用 Overlay 网络。

防火墙

对 Docker EE 的访问只能使用端口 443 进行(对于 DTR 是端口 443 和 80),无论访问 Web UI 还是远程 API 都不例外。因此外部防火墙配置很简单。在大多数情况下,您只需要开放端口 80、443 和 22。端口 22 用于 SSH 访问,因为 Docker EE 不需要 SSH 访问,所以它是可有可无的。对应用的访问是通过负载均衡器使用 HTTPS 进行的。如果您对外界暴露其他 TCP 服务,请在防火墙上开放这些端口。上一节已经说过,为了在集群内部通信,也需要开放多个端口。如果您在集群中的某些节点之间设有防火墙(例如用于分隔控制器与工作节点),那么也要开放相关端口。

如果在应用内部使用经过加密的 Overlay 网络,则还应该允许 ESP(封装安全有效负载)或 IP 协议 50 流量。ESP 并非基于 TCP 或 UDP 协议,它将用于安全有效负载 / 数据的端到端封装。

screenshot

负载均衡器

上一节详细说明了负载均衡器。它们必须在安装之前配置完毕,而且必须有合适的主机名。外部(负载均衡器)主机名用于 HA,也用于 TLS 证书。如果在安装期间或安装后不必重新配置它们,就会比较轻松。

请参阅上一节了解 Docker 组件来获取关于负载均衡器配置的详细信息。

共享存储

用于镜像库中镜像的 DTR 共享存储必须就绪,并且必须可从 DTR 节点访问。请使用 S3 或 NFS 命令行客户端来测试其是否工作,以避免调试 DTR 存储配置的麻烦。

主机配置

主机配置根据所使用的 OS 和现有配置标准而定,不过在安装 OS 之后必须执行几个重要步骤:

  1. 使用 NTP 或类似服务进行时钟同步。时钟偏差可能导致难以排除的错误,特别是在使用 Raft 算法的情况下(UCP 和 DTR)。
  2. 所有主机的 UCP 都需要静态 IP。
  3. 主机名用于集群中的节点标识。必须以非临时性的方式设置主机名。
  4. 主机防火墙必须在安装文档中指定的所有端口上允许集群内流量。
  5. 如果有需要,还必须配置存储。例如,devicemapper 驱动程序需要一个在 Docker 引擎安装之前配置的逻辑存储卷。

Docker EE 基础版安装注意事项

关于 EE 安装的详细说明由文档提供。要在无法访问互联网的机器上安装,请将这些软件包添加到您自己的私有镜像仓库。安装软件包之后,确保将 docker 服务配置为在系统引导时启动。

更改 Docker EE 基础版的参数的最佳方式是使用 /etc/docker/daemon.json 配置文件。这样可以确保配置能够方便地跨不同系统和 OS 复用。请参见文档了解完整的选项列表。

启动 docker 服务,并使用 docker info 验证参数,从而确保引擎配置正确。


UCP 安装注意事项

UCP 安装程序会从一组运行 Docker EE 基础版的机器创建功能性集群。这包括创建 Swarm 集群和安装 UCP 控制器。在安装指南中描述的默认安装方式是交互式的。

要执行完全自动化的可重复部署,请对安装程序提供更多信息:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp/docker_subscription.lic:/config/docker_subscription.lic \
  -e UCP_ADMIN_PASSWORD=password --name ucp docker/ucp install --host-address IP_or_interface \
  --san manager1.example.com --san ucp.example.com

下列各节会说明所有这些选项。

外部证书

默认情况下,UCP 使用自签名的 TLS 证书。对于生产部署,建议使用由可信的 CA 生成的证书。在大多数情况下,该 CA 就是您的组织的内部 CA。

需要的证书和密钥如下所示:

  1. 根 CA 的公用证书 ca.pem。
  2. TLS 证书 cert.pem。它还必须包含所有中间 CA 的公用证书,并有用于访问 UCP 的所有地址的 SAN,包括负载均衡器的主机名(例如 ucp.example.com)和各个控制器的主机名(例如 ucp-controller1.example.com),以便直接访问它们。
  3. TLS 私钥 key.pem。

要在安装期间自动添加这些项目,请在您安装 UCP 的机器上,将这些带有正确名称的文件添加到名为 ucp-controller-server-certs 的存储卷,并使用 --external-server-cert 安装参数。

也可以在安装后通过 Web UI 添加证书。

许可证文件

要为安装提供许可证文件,可以通过命令行,也可以在 /config 中使用绑定式挂载(存储卷)。使用 -v /path/to/docker_subscription.lic:/config/docker_subscription.lic 指定其位置。

管理员密码

要使安装过程成为完全非交互式的,必须使用 --admin-password 安装参数传递管理员密码。默认的管理员用户名是 admin。可以使用 --admin-username 来更改它。

在安装命令文档中提供了安装参数的完整列表。

添加节点

完成第一个控制器节点的安装后,必须再将两个控制器加入集群,从而完成其安装。UCP 会在集群中的管理节点上配置一个完整的控制器从节点,因此在这两个控制器上只需要执行命令 docker swarm join 并使用正确的标记即可。可以通过在第一个控制器上运行 docker swarm join-token manager 来获取确切的命令。

要加入工作节点,可以在任何控制器上通过 docker swarm join-token worker 获取等效的命令:

docker swarm join-token worker

要将工作节点添加到此 swarm,请运行下列命令:

docker swarm join \
--token SWMTKN-1-00gqkzjo07dxcxb53qs4brml51vm6ca2e8fjnd6dds8lyn9ng1-092vhgjxz3jixvjf081sdge3p \
192.168.65.2:2377

要确保一切都正确运行,请在 https://ucp.example.com 登录到 UCP。


DTR 安装注意事项

DTR 的安装与 UCP 的安装类似。安装并配置一个节点,然后加入从节点来组成完整的高可用性设置。要安装第一个实例以及从节点,请将安装程序指向集群中将要安装该实例的节点。

安装后必须配置证书和镜像存储。配置共享存储之后,可以使用 join 命令添加两个从节点。


验证部署

完成所有项目的安装之后,可以执行测试来验证部署。在 UCP 控制器和运行 DTR 的节点上禁用工作负载的调度。

应该考虑的基本测试:

  1. 通过 https://ucp.example.com 登录,以及直接登录到管理节点,例如 https://manager1.example.com。 确认集群和所有节点都健康。
  2. 仿照文档中的示例来测试是否能部署应用。
  3. 测试用户是否能从 CLI 下载捆绑包并连接到集群。测试他们是否能使用 docker-compose。
  4. 使用完整的镜像工作流测试 DTR。确保存储没有配置不当,且镜像存储在正确的位置。

考虑构建一套标准的自动化测试来验证新的环境和更新。仅通过测试标准功能应该就可发现大部分配置问题。要确保使用非管理员用户身份运行这些测试,测试用户应该具有与平台用户相似的权限。通过测量每项测试所用的时间,也可以找出底层基础架构配置的问题。在这套测试中,应该包括全面部署您的组织中的实际应用。

相关文章
|
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应用的最佳实践