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

简介: 本节详细说明架构的安装过程,并提供一个核对表。它并不能替代有关文档,后者提供了更多详细信息,从各方面来讲都是权威性的。本节的目标是帮助您定义一个可重复的(最好也是自动化的)过程,用以部署、升级和扩展 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。确保存储没有配置不当,且镜像存储在正确的位置。

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

相关文章
|
6月前
|
存储 负载均衡 调度
Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡
Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡
283 0
|
25天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
2月前
|
PyTorch 算法框架/工具 Docker
ModelScope问题之odelScope使用了官方的docker的cpu镜像如何解决
ModelScope镜像是指用于在ModelScope平台上创建和管理的容器镜像,这些镜像包含用于模型训练和推理的环境和依赖;本合集将说明如何使用ModelScope镜像以及管理镜像的技巧和注意事项。
46 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 的最新趋势以及最佳实践
47 0
|
8月前
|
Kubernetes Java Devops
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)
学习SpringBoot官方镜像方案的细节
393 0
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)