如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序

容器技术简化了您从本地环境到云或本地数据中心构建、测试和部署软件的方式。但是随着使用容器技术构建应用程序的好处,在构建多容器应用程序时存在手动启动和停止每个容器的问题。

为了解决这个问题,Docker Inc 创建了Docker Compose。您可以使用 Docker Compose 来简化多容器应用程序的运行,只需两个命令;docker-compose updocker-compose down

在本文中,您将学习

  • Amazon EC2 是什么,
  • 如何创建并连接到 Amazon EC2 实例,以及
  • 如何在 EC2 上部署 Docker compose 应用程序

先决条件

要继续阅读本文,您必须具备以下条件:

  • 终端基础知识。
  • 一些使用 Docker 和 Docker Compose 的经验。
  • 一个 AWS 账户 —在此处了解如何创建一个。

什么是亚马逊 EC2?

Amazon Elastic Compute Cloud (EC2) 为Amazon Web Services (AWS) 云中的几乎所有工作负载提供安全、可调整大小和可扩展的计算能力。通过使用 Amazon EC2,您可以消除预先投资硬件的开销,从而可以专注于更快地开发和部署您的应用程序。

借助 Amazon EC2,您可以根据需要启动任意数量的虚拟服务器(实例)、配置安全性和网络以及管理存储。此外,Amazon EC2 使您能够轻松地向上或向下扩展您的应用程序,以应对需求变化或流行高峰,从而减少预测流量的需要。

创建并连接到 Amazon EC2 实例

创建 AWS 账户后,您可以通过以下步骤创建并连接到 Amazon EC2 实例:

  • 为实例选择所需的区域
  • 导航到 EC2 控制台
  • 启动实例
  • 通过 SSH 从本地计算机连接到实例

选择您想要部署的区域

要在您的 AWS 控制台上选择一个区域,请单击下图右上角注释的下拉列表,然后选择您想要的区域。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

您可能会问,“我怎么知道哪个地区最适合我的申请?” 要了解部署应用程序的最佳区域,请查看这篇关于“为工作负载选择区域时要考虑的事项”的文章。

导航到 EC2 控制台

选择所需的 AWS 区域后,要转到 EC2 控制台,请在搜索框中搜索“EC2”,如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

到达 EC2 控制台后,找到Launch Instance按钮并单击它以启动新的 EC2 实例启动流程。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

启动实例

在 EC2 实例启动流程中,您需要使用以下内容配置您的实例:

应用程序和操作系统映像(Amazon 系统映像): Amazon 系统映像**(**AMI) 是一个模板,其中包含启动实例所需的软件配置(操作系统、应用程序服务器和应用程序)。

本文将使用具有下图所示配置的 Linux Ubuntu Server 22.04。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

实例类型: ****实例类型是 CPU、内存、存储和网络容量的组合。有多种 EC2 实例类型可让您灵活地为您的应用程序选择适当的资源组合。本文将使用t2.micro,其 CPU 和内存如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

  1. 密钥对(登录):您可以使用密钥对从本地计算机远程安全地连接到您的实例。要创建密钥对,请单击创建新密钥对,如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

单击Create new key pair后,您将看到一个弹出窗口。在弹出窗口中,为您的密钥对命名并将其余配置保留为默认配置(如果您的本地计算机是 Windows 操作系统,请选择.ppk私钥文件格式),然后单击创建密钥对。

点击Create key pair后,会自动下载一个.pem私钥文件到你的电脑上;将私钥存储在计算机上安全且可访问的位置。您稍后将需要它来连接到您的实例。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

  1. 网络设置:您可以将网络设置保留为默认设置。如下图所示的默认网络设置使用:
  • 您的 AWS 账户的默认VPC 和子网,并启用为您的实例自动分配公共地址。
  • 它还会创建一个新的安全组,即一组控制实例流量的防火墙规则。默认是允许来自任何地方的 SSH 流量;这适用于本文,但在生产用例中,您应该设置更严格的规则。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

  1. 配置存储:您可以将存储配置保留为本文的默认配置。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

最后的配置是高级设置,您可以忽略它们,因为它们超出了本文的范围。要了解有关它们的更多信息,请单击下图所示的信息文本。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

完成上述所有配置后,单击启动实例并等待几分钟让您的实例启动,如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

然后单击上图中的查看所有实例并选择下图中的实例。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

连接到您的 Amazon EC2 实例

选择您的 EC2 实例后,在顶部(如下图所示)单击连接。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

单击连接后,您将看到一个页面,其中包含连接到您的实例的选项。本文将使用 SSH 客户端选项。.pem使用在创建密钥对时下载的私钥,按照您在页面上看到的步骤进行操作,如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

完成上述步骤后,您应该连接到您的实例,如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

接下来,您将部署一个演示多容器 Docker Compose 应用程序,该应用程序具有 React 前端、Node.js 后端和 MongoDB 数据库容器,并使其可在 Internet 上访问。

在 Amazon EC2 上部署多容器 Docker Compose 应用程序

在部署 Docker Compose 应用程序之前,您需要:

  • 首先在您的 EC2 实例上安装 Docker Engine 和 Docker compose。
  • 然后在本文中,在您的实例上从 Github 克隆演示 Todo Docker Compose 应用程序
  • 然后部署应用程序

在 Ubuntu EC2 实例上安装 Docker 引擎 安装 Docker 引擎

的最快方法是使用get.docker.comget-docker.sh上的 bash 脚本。运行以下命令以在您的 EC2 实例上下载脚本。

$ curl -fsSL https://get.docker.com -o get-docker.sh

运行上述命令后,确认它下载了get-docker.sh如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

要运行脚本,请运行以下命令:

$ sh get-docker.sh

一段时间后,Docker 将安装在 Ubuntu EC2 实例上。要确认安装运行$ docker --``version,您应该会看到 Docker 版本,如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

如果您使用不同的 AMI,请查看Docker 安装文档以了解如何在您选择的 AMI 上进行安装。

在 Ubuntu EC2 实例

上安装 Docker Compose 现在要安装 Docker Compose,运行以下命令从 Github 获取版本:\

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

然后使用以下命令使其可执行:

$ sudo chmod +x /usr/local/bin/docker-compose

完成后,当您运行时$ docker-compose -v,您应该会看到刚刚安装的版本,如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

克隆演示 Docker Compose 应用
程序 您将部署的多容器 todo 应用程序是Awesome Docker Compose Github 存储库示例之一。要访问应用程序,请使用以下命令在您的实例上克隆存储库:

$ git clone https://github.com/docker/awesome-compose.git

克隆项目后,运行以下命令切换到react-express-mongodbtodo 应用程序所在的目录:

$ cd awesome-compose/react-express-mongodb

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

进入项目目录后,要使用上面注释的文件启动容器,请compose.yaml运行:

$ docker compose up -d

在 Docker 拉取镜像并创建网络以供容器相互通信之后,您将看到如下图所示的输出。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

要确认 3 个容器正在运行,运行$ docker ps,您应该会看到类似于下图的输出。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

接下来,您将测试部署以确保 todo 应用程序正常工作。

测试您的部署

您刚刚部署的应用程序在端口上进行对话,3000但如果您3000使用 EC2 实例的公共地址访问端口,您将无法查看它。这是因为当前仅允许来自 SSH 的入站流量的安全组设置。

要启用查看您的应用程序,在 EC2 实例控制台上,选择您的 EC2 实例,移动到安全选项卡,然后单击安全组,如下图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

单击安全组后,在下一个菜单中,单击Edit Inbound rules添加允许通过端口入站流量的规则3000

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

然后,添加规则,如下面的屏幕截图所示。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

完成后,当您访问 Todo 应用程序时,your_instance_public_ip:3000您应该会看到如下图所示的 Todo 应用程序。

如何在 Amazon EC2 上部署多容器 Docker Compose 应用程序-每日运维

结论

在本文中,您了解了 Amazon EC2 是什么、如何创建和连接到 Amazon EC2 实例以及如何在 EC2 上部署 Docker compose 应用程序。