Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Amazon ECS CLI 教程

此简单教程说明了 Amazon ECS CLI 的几种不同的命令和功能。您必须先安装并配置 Amazon ECS CLI,然后才能启动此教程。有关更多信息,请参阅 安装 Amazon ECS CLI

步骤 1:创建您的集群

您应执行的首个操作是创建 Amazon ECS 容器实例的集群,您可使用 ecs-cli up 命令在该集群上启动容器。虽然您在使用此命令配置集群时有许多选项可供选择,但大多数选项是可选的。在此示例中,您创建一个包含两个 t2.medium 容器实例的简单集群,这两个实例使用 id_rsa 密钥对进行 SSH 访问(此处替换您自己的密钥对)。

默认情况下,为容器实例创建的安全组将为入站流量打开端口 80。您可以使用 --port 选项指定要打开的其他端口,或者,如果有更复杂的安全组要求,则可指定现有安全组使用 --security-group 选项。

Copy
ecs-cli up --keypair id_rsa --capability-iam --size 2 --instance-type t2.medium

输出:


INFO[0000] Created cluster                               cluster=ecs-cli-demo
INFO[0000] Waiting for your cluster resources to be created
INFO[0001] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0061] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0121] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0182] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS

创建您的资源时,完成此命令可能需要几分钟的时间。现在您已拥有集群,可以创建 Docker 复合文件并部署该文件。

步骤 2:创建复合文件

在此步骤中,创建一个简单的 Docker 复合文件,此文件将创建包含 Web 服务器和 MySQL 数据库的 WordPress 应用程序。此时,Amazon ECS CLI 支持 Docker 复合文件语法版本 1 和 2。

Amazon ECS CLI 的复合文件中支持以下参数:

  • command

  • cpu_shares

  • dns

  • dns_search

  • entrypoint

  • environment:如果复合文件中未指定环境变量值,但该值存在于 shell 环境中,则 shell 环境变量值将传递到为任何关联的任务或服务创建的任务定义。

    重要

    建议不要对敏感信息 (如凭证数据) 使用纯文本环境变量。

  • env_file

    重要

    建议不要对敏感信息 (如凭证数据) 使用纯文本环境变量。

  • extra_hosts

  • hostname

  • image

  • labels

  • links

  • log_driver

  • log_opt

  • mem_limit (以字节为单位)

  • ports

  • privileged

  • read_only

  • security_opt

  • ulimits

  • user

  • volumes

  • volumes_from

  • working_dir

重要

此时不支持 build 指令。

有关 Docker 复合文件语法的更多信息,请参阅 Docker 文档中的复合文件参考

以下是复合文件,您可以对它称作 hello-world.yml。每个容器均有 100 个 CPU 单位和 500 MiB 内存。wordpress 容器将为容器实例开放端口 80 以便将流量传入 Web 服务器。

Copy
version: '2' services: wordpress: image: wordpress cpu_shares: 100 mem_limit: 524288000 ports: - "80:80" links: - mysql mysql: image: mysql cpu_shares: 100 mem_limit: 524288000 environment: MYSQL_ROOT_PASSWORD: password

步骤 3:将复合文件部署到集群

在创建复合文件后,您可以使用 ecs-cli compose up 命令将其部署到您的集群。默认情况下,此命令查找当前目录中的名为 docker-compose.yml 的文件,但您可以使用 --file 选项指定其他文件。默认情况下,通过此命令创建的资源具有标题中的当前目录,但您可以使用 --project-name project_name 选项覆盖该目录。

Copy
ecs-cli compose --file hello-world.yml up

输出:

INFO[0000] Using ECS task definition                     TaskDefinition=ecscompose-docker-compose:2
INFO[0000] Starting container...                         container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress
INFO[0000] Starting container...                         container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql
INFO[0000] Describe ECS container status                 container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-docker-compose:2
INFO[0000] Describe ECS container status                 container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-docker-compose:2
INFO[0054] Started container...                          container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0054] Started container...                          container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2

步骤 4:查看集群上正在运行的容器

在部署复合文件后,您可以使用 ecs-cli ps 命令查看正在您的集群上运行的容器。

Copy
ecs-cli ps

输出:

Name                                            State    Ports                     TaskDefinition
340488e0-a307-4322-b41c-99f1b70e97f9/wordpress  RUNNING  52.89.204.137:80->80/tcp  ecscompose-docker-compose:2
340488e0-a307-4322-b41c-99f1b70e97f9/mysql      RUNNING                            ecscompose-docker-compose:2

在上述示例中,您可以查看复合文件中的 wordpressmysql 容器以及 Web 服务器的 IP 地址和端口。如果将 Web 浏览器指向该地址,应会显示 WordPress 安装向导。

步骤 5:在集群上扩展任务

您可以使用 ecs-cli compose scale 命令向上扩展任务计数以便拥有应用程序的更多实例。在此示例中,您可以将应用程序的计数增至两个。

Copy
ecs-cli compose --file hello-world.yml scale 2

现在,您的集群中应拥有两个以上的容器。

Copy
ecs-cli ps

输出:

Name                                            State    Ports                     TaskDefinition
340488e0-a307-4322-b41c-99f1b70e97f9/wordpress  RUNNING  52.89.204.137:80->80/tcp  ecscompose-docker-compose:2
340488e0-a307-4322-b41c-99f1b70e97f9/mysql      RUNNING                            ecscompose-docker-compose:2
f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql      RUNNING                            ecscompose-docker-compose:2
f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress  RUNNING  52.89.205.89:80->80/tcp   ecscompose-docker-compose:2

步骤 6:从复合文件创建 ECS 服务

现在,您已了解您的容器运行正常,可以确保容器在发生故障或停止时被替换。可以使用 ecs-cli compose service up 命令从复合文件创建服务来执行此操作。此命令从最新复合文件创建任务定义(如果任务定义不存在),并使用此任务定义创建预期计数为 1 的 ECS 服务。

在启动您的服务之前,请使用 ecs-cli compose down 命令从复合文件停止容器,以便有可使用的空集群。

Copy
ecs-cli compose --file hello-world.yml down

输出:

INFO[0000] Stopping container...                         container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress
INFO[0000] Stopping container...                         container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql
INFO[0000] Stopping container...                         container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql
INFO[0000] Stopping container...                         container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress
INFO[0000] Describe ECS container status                 container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql desiredStatus=STOPPED lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0000] Describe ECS container status                 container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress desiredStatus=STOPPED lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0000] Describe ECS container status                 container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress desiredStatus=STOPPED lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0000] Describe ECS container status                 container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql desiredStatus=STOPPED lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0006] Stopped container...                          container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress desiredStatus=STOPPED lastStatus=STOPPED taskDefinition=ecscompose-docker-compose:2
INFO[0006] Stopped container...                          container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql desiredStatus=STOPPED lastStatus=STOPPED taskDefinition=ecscompose-docker-compose:2
INFO[0006] Stopped container...                          container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql desiredStatus=STOPPED lastStatus=STOPPED taskDefinition=ecscompose-docker-compose:2
INFO[0006] Stopped container...                          container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress desiredStatus=STOPPED lastStatus=STOPPED taskDefinition=ecscompose-docker-compose:2

现在,您可以创建服务。

Copy
ecs-cli compose --file hello-world.yml service up

输出:

INFO[0000] Using ECS task definition                     TaskDefinition=ecscompose-docker-compose:2
INFO[0000] Created an ECS Service                        serviceName=ecscompose-service-docker-compose taskDefinition=ecscompose-docker-compose:2
INFO[0000] Updated ECS service successfully              desiredCount=1 serviceName=ecscompose-service-docker-compose
INFO[0000] Describe ECS Service status                   desiredCount=1 runningCount=0 serviceName=ecscompose-service-docker-compose
INFO[0015] ECS Service has reached a stable state        desiredCount=1 runningCount=1 serviceName=ecscompose-service-docker-compose

步骤 7:清除

在结束此教程后,应清除您的资源以便这些资源不再产生任何费用。首先,删除服务,以便它停止现有容器且不尝试运行任何其他任务。

Copy
ecs-cli compose --file hello-world.yml service rm

输出:

INFO[0000] Updated ECS service successfully              desiredCount=0 serviceName=ecscompose-service-docker-compose
INFO[0000] Describe ECS Service status                   desiredCount=0 runningCount=1 serviceName=ecscompose-service-docker-compose
INFO[0015] ECS Service has reached a stable state        desiredCount=0 runningCount=0 serviceName=ecscompose-service-docker-compose
INFO[0015] Deleted ECS service                           service=ecscompose-service-docker-compose
INFO[0015] ECS Service has reached a stable state        desiredCount=0 runningCount=0 serviceName=ecscompose-service-docker-compose

现在,关闭您的集群,这将清除您先前使用 ecs-cli up 创建的资源。

Copy
ecs-cli down --force

输出:

INFO[0000] Waiting for your cluster resources to be deleted
INFO[0000] Cloudformation stack status                   stackStatus=DELETE_IN_PROGRESS
INFO[0061] Cloudformation stack status                   stackStatus=DELETE_IN_PROGRESS
INFO[0121] Deleted cluster                               cluster=ecs-cli-demo