在本模块中,您将为您的整体式 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 (Amazon ECR)。选择各个步骤编号可展开相应部分。

  • 第 1 步:准备工作

    在接下来的几个步骤中,您将会使用 DockerGitHubAmazon Elastic Container Service (Amazon ECS)Amazon ECR 将代码部署到容器中。要完成上述步骤,确保您拥有以下工具。

    1. 拥有 AWS 账户:如果您还没有 AWS 账户,可以在此处注册。本教程中的所有练习均将包含在 AWS 免费套餐下。
      ⚐ 注意:您将使用的某些服务可能会要求您的账户至少处于活动状态 12 小时。如果您无法使用某些服务,并且账户是刚刚创建的,请过几小时后再试。
    2. 安装 Docker:您将使用 Docker 来构建要在容器中运行的镜像文件。Docker 是开源项目。您可以下载该项目适用于 Mac适用于 Windows 的版本。
      安装 Docker 后,您可以通过在终端运行 Docker --version 来验证它是否正常运行。版本号应显示,例如:Docker 版本 19.03.5、版本 633a0ea。
    3. 安装 AWS CLI:
      • 您要使用 AWS 命令行界面 (AWS CLI) 来将镜像推送至 Amazon ECR。您可以单击此处了解并下载 AWS CLI。
      • 安装 AWS CLI 后,您可以通过在终端运行 aws --version 来验证它是否正常运行。版本号应显示,例如:aws-cli/1.16.217 Python/2.7.16 Darwin/18.7.0 botocore/1.12.207
      • 如果您已安装 AWS CLI,请在终端运行以下命令,确保其已更新为最新版本:pip install awscli --upgrade --user
      • 如果您以前从未使用过 AWS CLI,您可能需要配置您的凭证
    4. 有文本编辑器:如果您还没有编码用的文本编辑器,请在本地环境中安装一个。Atom 是 GitHub 提供的一款简单的开源文本编辑器,深受开发人员欢迎。
  • 第 2 步:下载并打开项目

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

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

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

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

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

    创建存储库:

    • 导航到 Amazon ECR 控制台
    • 存储库页面上,选择创建存储库
    • 在创建存储库页面上,为您的存储库输入以下名称:api
      ⚐ 注意:标签稳定性下,保留默认设置。
    • 选择创建存储库

    存储库创建后,将有一条确认消息同存储库地址一起显示。 存储库地址采用以下格式:[account-ID].dkr.ecr.[region].amazonaws.com/[repo-name][account-ID][region][repo-name] 将是您的设置专有的。

    ⚐ 注意:在本教程中,您将需要存储库地址。

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

    访问您的终端并导航至以下目录:~/amazon-ecs-nodejs-microservices/2-containerized/services/api

    使用终端验证 Docker 登录:

    1. 运行 $(aws ecr get-login --no-include-email --region [your-region])。替换 [your-region],例如:$(aws ecr get-login --no-include-email --region us-west-2) 如果需要,请配置您的凭证
      如果身份验证成功,您将收到确认消息:登录成功
    2. 要构建镜像,请在终端中运行以下命令:docker build -t api
      ⚐ 注意:api 后需要添加句点 (.)。
    3. 构建完毕后,请标记镜像,以便将其推送到以下存储库:docker tag api:latest [account-ID].dkr.ecr.[region].amazonaws.com/api:v1 
      ⚐ 注意:[account-ID][region] 占位符替换为您的特定信息。
      ⚐ 专业提示::v1 代表镜像版本。每次构建镜像时,您都应该使此版本号递增一个数字。如果您使用脚本,可以使用自动生成的数字(例如时间戳)标记镜像。这是一个最佳实践。可让您以后轻松恢复到之前的容器镜像版本。
    4. 通过运行 docker push [account-id].dkr.ecr.[region].amazonaws.com/api:v1 将镜像推送到 Amazon ECR
      ⚐ 注意:将 [account-ID] 和 [region] 占位符替换为您的特定信息。

    如果您导航到 Amazon ECR 存储库,应该会看到镜像标记为 v1

    Amazon ECR 镜像标记