在本模块中,您将为您的整体 node.js 应用程序构建容器映像,并将其推送至 Amazon Elastic Container Registry。开始构建

部署到 amazon ecr

通过使用容器,您可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。

架构概览

速度
启动包含新版本代码的容器无需大量部署工作。操作速度得到提高,因为只需移动容器,便可将在开发人员本地计算机上的容器中构建的代码轻松移动到测试服务器。在构建时,此容器可以与运行应用程序堆栈所需的其他容器相关联。

依赖关系控制和改进的管道
Docker 容器映像是应用程序代码和依赖关系的时间点捕获工具。 这可让工程组织为应用程序生命周期创建标准管道。例如:

  1. 开发人员在本地构建和运行容器。
  2. 持续集成服务器运行相同的容器并根据它执行集成测试,以确保其传递预期内容。
  3. 相同的容器会发送至暂存环境,在该环境中,会使用负载测试或手动 QA 检查容器的运行时行为。
  4. 相同的容器会发送至生产环境。

能够在集成和部署管道的各个阶段构建、测试、发送和运行完全相同的容器可以大大简化交付高质量、可靠应用程序的流程。

密度和资源效率
容器可以通过允许多个异构进程在一个系统上运行来提高资源效率。容器使用的隔离和分配技术必然会提高资源效率。容器占用的主机 CPU 和内存可以限制在一定数量内。通过了解容器需要的资源以及底层主机服务器提供的资源,您可以适当调整用于小型主机的计算资源,或提高在一个大型主机上运行的进程的密度,从而提高可用性并优化资源消耗。

灵活性
Docker 容器之所以灵活是因为它们便携、易于部署且较小。相较于在 VM 上所需的安装和配置,容器内的打包服务可让容器轻松在主机之间移动、与出现故障的其他邻近服务隔离开,并免受主机系统上错误补丁或软件升级的影响。

时长:20 分钟

使用的服务:


在本教程的第一部分,您将为您的整体 node.js 应用程序构建 Docker 容器映像,并将其推送至 Amazon Elastic Container Registry。单击各个步骤号可展开该部分。

break-the-monolith
  • 第 1 步:准备工作

    在接下来的几个步骤中,您将会使用 DockerGitHubAmazon ECSAmazon ECR 将代码部署到容器中。为确保您可以完成这些步骤,您需要确保自己拥有合适的工具。

    1. 拥有 AWS 账户:如果您还没有 AWS 账户,可以在此处注册。本教程中的所有练习都涵盖在 AWS 免费套餐中。
      ⚐ 注意:您将使用的某些服务可能会要求您的账户至少处于活动状态 12 小时。如果您无法使用某些服务,并且账户是刚刚创建的,请过几小时后再试。
    2. 安装 Docker:您将使用 Docker 来构建要在容器中运行的映像文件。Docker 是一个开源项目,您可以通过以下位置下载:Mac 版Windows 版
      Docker 安装后,您可以通过在终端中执行 Docker --version 来检查它是否正常运行。您应该会看到如下所示的内容:Docker version 17.03.0-ce, build 60ccb22
    3. 安装 AWS CLI
      • 您要使用 AWS 命令行接口 (CLI) 来将映像推送至 Amazon Elastic Container Registry。您可以单击此处了解 CLI。
      • AWS CLI 安装后,您可以通过在终端中执行 aws --version 来检查它是否正常运行。您应该会看到如下所示的内容:aws-cli/1.11.63 Python/2.7.10 Darwin/16.5.0 botocore/1.5.26
      • 如果您已安装 AWS CLI,请在终端中执行以下命令,确保其已更新为最新版本:pip install awscli --upgrade --user
    4. 有文本编辑器:如果您还没有编码用的文本编辑器,则应在本地环境中安装一个。Atom 是 GitHub 提供的一款简单的开源文本编辑器,深受开发人员欢迎。
  • 第 2 步:下载并打开项目

    从 GitHub 中下载代码:导航到 https://github.com/awslabs/amazon-ecs-nodejs-microservices,然后选择“Clone or Download”(克隆或下载),将 GitHub 存储库下载到您的本地环境。您也可以使用 GitHub DesktopGit 克隆存储库。

    打开项目文件:启动 Atom,选择“Add Project Folder”(添加项目文件夹),然后选择您在其中保存存储库“amazon-ecs-nodejs-microservices”的文件夹。此操作会将整个项目添加至 Atom,以便您轻松处理。

    在项目文件夹中,您应该会看到“基础设施”和“服务”文件夹。“基础设施”文件夹保存您将在下一步中使用的 AWS CloudFormation 基础设施配置代码。“服务”文件夹包含构成 node.js 应用程序的代码。

    请花几分钟时间单击查看各个文件,熟悉应用程序的不同方面,包括数据库 db.json、服务器 server.js、package.json 和应用程序 dockerfile。

    微服务项目
  • 第 3 步:配置存储库

    创建存储库:


    记录存储库信息:

    • 点击“下一步”后,您应该会收到如下所示的消息:
    create
    • 存储库地址采用简单格式:[account-id].dkr.ecr.[region].amazonaws.com/[repo-name]

     

    ⚐ 注意:您将需要此地址,包括您将在后续步骤中使用的账户 ID 和区域。

  • 第 4 步:构建并推送 Docker 映像

    打开终端,并将路径设置为目录中的 GitHub 代码的 2-containerized/services/api 部分,您已克隆该目录或将其下载到以下位置:~/amazon-ecs-nodejs-microservices/2-containerized/services/api

    使用 AWS 对 Docker 登录进行身份验证:

    1. 执行 aws ecr get-login --no-include-email --region [region]。示例:aws ecr get-login --no-include-email --region us-west-2 如果您以前从未使用过 AWS CLI,则可能需要配置证书
    2. 您将获得以 docker login -u AWS -p 开头的大量输出...请复制完整输出内容,粘贴在终端中并执行。
    3. 您应该可以看到消息“Login Succeeded”(成功登录)。

    ⚐ 注意如果登录不成功,可能是由于较新版本的 Docker 已弃用了 -e none 标志。要解决此问题,请将输出粘贴到文本编辑器中,从输出结尾处删除 -e none,然后在终端执行更新后的输出。

    • 构建映像:在终端上执行 docker build -t api 注意,此处的 . 非常重要。
    • 标记映像:构建完毕后,请标记映像,以便将其推送到存储库:docker tag api:latest [account-id].dkr.ecr.[region].amazonaws.com/api:v1

    ⚐ 专业提示::v1 表示映像版本。每次您构建映像时,都应该使此版本号递增一个数字。如果您使用脚本,可以使用自动生成的数字 (例如时间戳) 标记映像。这可让您以后轻松恢复到之前的容器映像版本,是您应该遵循的最佳实践。

    • 将映像推送到 ECR:执行 docker push 将映像推送到 ECR:docker push [account-id].dkr.ecr.[region].amazonaws.com/api:latest

    如果您导航到 ECR 存储库,应该会看到映像标记为最新。

    images