此内容还未提供中文版,以下为英文版

在 AWS Marketplace 部署 Docker 企业版(标准版/高级版)

预计阅读时间: 4 分钟

Docker EE on AWS(标准版/高级版)可一键部署在 AWS 中。它使用 Docker 企业版部署多个节点,然后安装 Universal Control Plane 和 Docker Trusted Registry 的高可用性版本。

部署适用于 Docker EE 的先决条件

  • Docker 企业版许可证。您可以从 Docker Store 获取 30 天免费试用订阅。有关许可证的问题,请联系 sales@docker.com
  • 对有权使用 CloudFormation 的 AWS 帐户的访问权并创建以下对象
    • EC2 实例 + Auto Scaling 组
    • IAM 配置文件
    • DynamoDB 表
    • SQS 队列
    • VPC + 子网
    • ELB
    • CloudWatch 日志组
    • S3 存储区
  • 您要进行部署的区域中 AWS 的 SSH 密钥(访问已安装的 Docker 时需要提供)
  • 支持 EC2-VPC 的 AWS 帐户

如需在帐户中添加 SSH 密钥对的详细信息,请参阅 Amazon EC2 密钥对文档

准备适用于 AWS CloudFormation 技术栈的 Docker EE

  1. 在 AWS Marketplace 中查找适用于 AWS 的 Docker EE 标准版/高级版列表
    • 选择您的区域,然后单击使用 CloudFormation 控制台启动
    • 如果尚未登录,系统将提示您登录 AWS 帐户。
  2. 通过 CloudFormation 创建技术栈
    • 您现在应该已进入 AWS CloudFormation 向导(如下所示)。单击下一步继续。 aws_stack_welcome.png
  • 在“指定详细信息”页面中,填写任何缺少的参数,如下所示:
    • 用于访问集群节点的首选 SSH 密钥
    • 所需的管理员密码
    • Docker 企业版许可证(可选,可以在稍后完成)。这可以在 Docker Store 中您的订阅下找到。将 .lic 文件的内容复制并粘贴到此对话框中。

    aws_stack_details.png

  • 单击下一步前往选项页面。保持原样。
    • 单击下一步查看您的更改。
    • 最后,确认任何功能,然后单击创建完成操作: aws_stack_details.png

访问适用于 AWS 的 Docker EE(标准版/高级版)

成功创建技术栈之后,您可以在输出选项卡中访问 UCP 和 DTR URL,如下所示:

insecure.png

访问 UCP 和 DTR 时,使用您在启动 cloudformation 技术栈时提供的用户名和密码登录。您将看到以下登录页面:

ucp.png

dtr.png

:在安装过程中,将为 UCP 和 DTR 生成自签名证书。安装完成后,您可以用自己的 CA 签名 证书替换这些证书。首次访问 UCP 和 DTR URL 时,您需要通过接受浏览器中提供的证书 在不安全的情况下(多次)继续执行操作。

配置 Docker Datacenter DNS 和证书

大多数用户希望使用 UCP 和 DTR 的 CA 签名证书而不是随机生成的 ELB DNS 名称来注册自己的 DNS 记录。为此,请按照以下说明执行操作:

  1. 为 UCP 和 DTR 创建指向 UCP 和 DTR ELB DNS/IP 的 A 或 CNAME DNS 记录。您可以在输出选项卡中找到 ELB 名称。

  2. 使用 DTR ELB URL 登录 DTR,然后转至设置页面。

  3. 使用您的 DNS 及其各自的证书更新 部分。确保您最后单击保存

  4. 使用 UCP ELB URL 登录 UCP,然后转至管理员设置选项卡。

  5. 集群配置下,使用您的定制 UCP DNS 名称更新 外部服务负载均衡器。然后,单击更新设置

  6. 证书部分下,上传或粘贴您自己的 UCP 证书。然后单击更新

  7. 最后一步是将 DTR 重新配置为使用新的 UCP DNS 和证书。 您需要从 CLI 运行 reconfigure 操作。只要您有 UCP 客户端证书包, 就可以从任何 Docker 引擎(本地或云上)完成此步骤。。 下载证书包并加载后,运行以下命令:

     UCP_URL=<YOUR_NEW_UCP_DNS>
     DTR_URL=<YOUR_NEW_DTR_DNS>
     USERNAME=<YOUR_DDC_USERNAME>
     PASSWORD=<YOUR_DDC_PASSWORD>
    
     curl -k https://$UCP_URL/ca > ucp-ca.pem
     docker run -it --rm docker/dtr:2.1.0 \
       reconfigure \
       --ucp-url $UCP_URL \
       --ucp-username $USERNAME \
       --ucp-password $PASSWORD \
       --debug \
       --ucp-ca "$(cat ucp-ca.pem)" \
       --dtr-external-url https://$DTR_URL:443
    

    运行此 Docker 容器之后,系统将要求您选择从节点 进行重新配置。按 Enter 键使用所选择的从节点继续。

  8. 现在,可以使用您自己的定制 DNS 名称访问 UCP 和 DTR。

在 Docker 企业版上部署和访问应用

现在,已为 UCP 和 DTR 配置了定制 DNS,您可以通过 CLI(使用客户端证书包)或通过 UCP Web 控制台开始部署应用。

Swarm Mode/基于服务的应用 (Docker Engine 1.12+)

如果要部署 swarm-mode 服务,适用于 AWS 的 Docker 中的 Docker Datacenter 具备多项轻松部署和访问应用的优势。

  1. ELB 集成

    创建 Swarm-mode 服务并发布 TCP/UDP 端口时,适用于 AWS 的 Docker 会自动重新配置应用 ELB (DefaultExternalTarget) 侦听器设置,以允许这些端口上的流量传递到集群节点。 例如,如果使用客户端证书包从 CLI 启动服务并为其发布 TCP 端口,您将看到 ELB 的侦听器配置自动 进行更新。请看以下示例:

    a 通过 CLI 使用已发布端口 8080 创建服务:

     $ docker service create --name demo -p 8080:8080 ehazlett/docker-demo:latest
     	6s09w6gxxfz7mkce9ybl6x3cr
    

    b. 注意已更新的 ELB 配置:

    elb_listeners_update.png

    c. 使用 DefaultExternalTarget DNS 和已发布端口访问应用:

    app.png

  2. Swarm Mode 网格路由

    网格路由是 Docker 1.12 中的一项新功能,它将 ipvs 和 iptables 相结合以创建功能强大的集群范围内的传输层 (L4) 负载均衡器。它允许所有 Swarm 节点接受 服务发布的端口上的连接。任何 Swarm 节点接收发往 运行中服务的已发布 TCP/UDP 端口的流量时,系统会使用称为入口的预定义 overlay 网络 将其转发给服务的 VIP。

  3. HTTP 网格路由

    UCP 现在支持 HTTP 网格路由 (HRM),这是一项新的试验 功能,用于在应用层 (L7) 上启用服务发现。HRM 与 Swarm Mode 网格路由配合工作,以便将 HTTP vhost 链接到 L4 发布的 服务。请使用 以下文档 获取更多详细信息。

    启用 HRM 之后,ELB 会自动重新配置为 将应用流量转发至工作节点。您可以使用定制 应用 DNS 名称并将其映射至 DefaultExternalTarget DNS。 例如,如果要使用正确的 DNS 名称(例如 foo.example.com)访问前面的服务, 您需要做的是启用 HRM,使用 DefaultExternalTarget 的 DNS 创建一条 CNAME 记录,并按如下所示 启动服务:

     docker service create -p 8080 \
       --network ucp-hrm \
       --name demo-hrm-app \
       --label com.docker.ucp.mesh.http.8080=external_route=http://foo.example.com,internal_port=8080 \
       ehazlett/docker-demo:dcus
    

工作方式

该解决方案使用 Amazon AWS CloudFormation 模板从头开始创建您需要的所有内容。此模板首先创建一个新的 VPC 及其子网和安全组。在建立网络之后,它将创建两个 Auto Scaling 组,分别用于管理节点和工作节点,并设定在 CloudFormation 设置表单中选择的所需容量。管理节点将首先启动,并使用 Raft 创建一个 Swarm 管理节点仲裁。工作节点将逐个启动并加入 swarm,直至所有工作节点都已启动并正常运行为止。此时,您将在 swarm 中拥有多个管理节点和工作节点,可以随时处理应用部署。然后,它会在管理节点上启动 UCP 控制器,并在工作节点上启动 UCP 代理程序。接下来,它将在管理节点上安装 DTR 并将其配置为使用 S3 存储区作为镜像存储后端。三个 ELB(分别用于 UCP、DTR 和您的应用)将启动并自动配置为在多个 AZ 之间提供弹性负载均衡。启动或删除服务时,应用 ELB 会自动进行更新。而 UCP 和 DTR ELB 仅针对 HTTPS 进行配置。

管理节点和工作节点都是单独的 ASG 组的一部分,允许您在需要时扩展集群。如果您增加了在工作节点 Auto Scaling 组中运行的实例数量(通过 AWS 控制台或更新 CloudFormation 配置),将启动的新节点会自动加入 swarm。这种架构确保了管理节点和工作节点分布在多个 AZ 中以实现弹性和高可用性。可以对模板进行调整和升级,这表示您可以调整配置(例如,实例类型或 Docker 引擎版本)。

`ddc_aws`.svg

Cloudformation 参数

以下是 Cloudformation 模板所需的配置参数:

KeyName 在您通过 SSH 进入管理节点时使用的 SSH 密钥。该密钥需要在您启动 Cloudformation 模板的区域进行配置。

InstanceType 工作节点的 EC2 实例类型

ManagerInstanceType 管理节点的 EC2 实例类型。swarm 越大,您应该使用的实例大小越大。

ClusterSize 您希望 swarm 中存在的工作节点的数量 (1-1000)

ManagerSize swarm 中管理节点的数量。您可以选择 3 或 5 个管理节点

DDCUsernameSet Docker Datacenter 用户名

DDCPasswordSet Docker Datacenter 密码

License JSON 格式的 Docker Datacenter 许可证或用于下载许可证的 S3 URL。您可以在此处申请试用许可证。

EnableSystemPrune

如果您希望适用于 AWS 的 Docker 自动清除 swarm 节点上未使用的空间,则启用此参数。

启用后,docker system prune 将在 UTC 时间每天凌晨 1:42 开始在工作节点和管理节点上交错运行。修剪时间略有偏差,因此并非所有节点都在同一时间修剪。这样可限制 swarm 的资源峰值。

修剪可以用于删除以下内容:

  • 所有停止的容器
  • 至少一个容器使用的存储卷
  • 所有无关联的镜像
  • 所有未使用的网络

WorkerDiskSize 工作节点临时存储卷的大小,以 GiB 为单位 (20 - 1024)。

WorkerDiskType 工作节点临时存储卷类型(“标准”、“gp2”)。

ManagerDiskSize 管理节点临时存储卷的大小,以 GiB 为单位 (20 - 1024)

ManagerDiskType 管理节点临时存储卷类型(“标准”、“gp2”)

系统容器

每个节点都会运行一些系统容器,以帮助运行 swarm 集群。为了让一切都顺利运行,请让这些容器保持运行状态,不要进行任何更改。如果您进行任何更改,我们不能保证适用于 AWS 的 Docker EE 正常工作。

支持的区域

  • ap-northeast-1
  • ap-northeast-2
  • ap-south-1
  • ap-southeast-1
  • ap-southeast-2
  • eu-central-1
  • eu-west-1
  • sa-east-1
  • us-east-1
  • us-east-2
  • us-west-1
  • us-west-2

AMI

适用于 AWS 的 Docker 企业版目前仅支持我们的自定义 AMI,这是一个专用于运行 Docker on AWS 的高度优化的 AMI

基于非 Swarm Mode 容器的应用

如果要部署基于非 swarm mode 容器的应用,可以按照 UCP 文档中的说明部署应用。在 UCP 上部署应用之后,可以使用特定工作节点的公共 IP 地址和已开放端口访问它们。

此外,还可以在任何或所有工作节点上部署 Interlock,动态注册应用并使用 L7 反向代理(例如 NGINX)对其流量进行负载均衡。成功部署 Interlock 和 NGINX 之后,可以使用 DefaultExternalTarget IP 为应用创建 DNS 记录。请单击此处查看完整文档。

扩展工作节点

您可以使用 AWS Auto Scaling 组来扩展工作节点计数。Docker 将自动在 Swarm 中加入或删除新实例。

目前有两种方法可扩展工作节点组。可以“更新”技术栈,并更改 CloudFormation 模板参数中的工作节点数量,也可以在用于 EC2 Auto Scaling 组的 AWS 控制台中手动更新 Auto Scaling 组。

目前支持实时更改管理节点计数。

AWS 控制台

登录 AWS 控制台,然后转至 EC2 仪表板。在左下方,选择“Auto Scaling 组”链接。

查找名称类似于 $STACK_NAME-NodeASG-* 的 Auto Scaling 组,其中 $STACK_NAME 是您在填写适用于 AWS 的 Docker 的 CloudFormation 模板时创建的技术栈的名称。找到后,单击该名称旁边的复选框。然后单击详细信息窗格下半部分中的“编辑”按钮。

console_installation.png

将“所需”字段更改为您要使用的工作节点池的大小, 并点击“保存”。

console_installation.png

这将需要几分钟的时间,并且会自动将新工作节点添加至 Swarm 中。如需减少工作节点的数量,只需再次将“所需”字段更新为较小的数字,它会缩小工作节点池,直至达到新的大小。

CloudFormation 更新

转至 CloudFormation 管理页面,并单击您要更新的技术栈旁边的复选框。然后单击顶部的操作按钮,并选择“更新技术栈”。

console_installation.png

选择“使用当前模板”,然后单击“下一步”。填写先前指定的参数,但这次需要将工作节点计数更改为新计数,然后单击“下一步”。回答其余的表单问题。CloudFormation 会显示将进行的更改的预览。查看更改,并且如果没有问题,请单击“更新”。CloudFormation 会将工作节点池大小更改为您指定的新值。此操作需要几分钟时间(大幅增加/减少节点需要的时间更长)才能完成,但是完成后,swarm 将具有新的工作节点池大小。

docker, datacenter, 安装, 编排, 管理