创建、推送及部署容器镜像

使用 Amazon Lightsail

Amazon Lightsail 是开始使用 AWS 的最便捷方式。它以可预测的低价格提供虚拟服务器(实例)、存储、数据库、内容分发网络(CDN)分发和网络。使用 Lightsail,您可以从小规模开始,然后按需扩展。

Lightsail 目前提供容器服务。有关此最新发布的更多信息,请阅读这篇博客。 在本教程中,我们将向您展示如何使用 Dockerfile 在本地计算机上创建容器镜像。镜像创建完成后,您可以将其推送到 Lightsail 容器服务以进行部署。

开始免费使用 Amazon Lightsail。

关于本教程
时间 10-20 分钟      
费用 免费
使用案例 计算
产品 Amazon Lightsail
级别 200
上次更新日期 2020 年 11 月 11 日

第 1 步:先决条件

创建容器镜像之前,请完成以下先决条件。 

1.1 – 创建 Lightsail 账户和实例来托管您的内容。 

已拥有账户? 登录您的账户

1.2 – 安装创建容器所需的软件,然后将它们推送到您的 Lightsail 容器服务。 

例如,您必须安装和使用 Docker 来创建和构建您的容器镜像,然后您可以将其与 Lightsail 容器服务一起使用。 

要创建自己的容器镜像,并将它们推送到您的容器服务,您必须在计划创建容器镜像的同一台计算机上安装以下附加软件:

  • Docker – 允许您运行、测试和创建自己的容器镜像,然后将其与您的 Lightsail 容器服务一起使用。
  • AWS Command Line Interface(AWS CLI)– 允许您指定所创建的容器镜像的参数,然后将其推送到您的 Lightsail 容器服务。
  • Lightsail 控制(lightsailctl)插件 – 允许 AWS CLI 访问本地计算机上的容器镜像。

有关更多信息,请参阅安装软件以管理您的 Amazon Lightsail 容器服务的容器镜像。

第 2 步:创建 Dockerfile 并构建容器镜像

完成下述步骤以创建 Dockerfile,并从中构建 mystaticwebsite Docker 容器镜像。容器镜像将用于构建托管在 Ubuntu 的 Apache 网络服务器上的简单静态网站。

2.1 – 在本地计算机上创建一个 mystaticwebsite 文件夹,用于存储 Dockerfile。

 

2.2 – 在刚刚创建的文件夹中创建一个 Dockerfile。Dockerfile 不使用文件扩展名,例如 .TXT。 

完整的文件名是 Dockerfile

2.3 – 根据您希望如何配置容器镜像,复制以下其中一个代码块,并将其粘贴到 Dockerfile 中:

2.3a 如果您想创建一个带有 Hello World 消息的简单静态网站容器镜像,则复制右侧的第一个代码块并将其粘贴到您的 Dockerfile 中。 

此代码示例使用 Ubuntu 18.04 镜像。RUN 指令将更新包缓存,安装和配置 Apache,并将 Hello World 消息打印到 Web 服务器的文档根目录。EXPOSE 指令公开容器上的端口 80,CMD 指令启动 Web 服务器。

 

2.3b  如果您想将自己的 HTML 文件集用于静态网站容器镜像,请在存储 Dockerfile 的同一文件夹中创建一个 html 文件夹。然后将您的 HTML 文件放在该文件夹中。将 HTML 文件放入 html 文件夹后,复制右侧的第二个代码块并粘贴到您的 Dockerfile 中。 

此代码示例使用 Ubuntu 18.04 镜像。RUN 指令更新包缓存,并安装和配置 Apache。COPY 指令将 html 文件夹的内容复制到 Web 服务器的文档根目录。EXPOSE 指令公开容器上的端口 80,CMD 指令启动 Web 服务器。

FROM ubuntu:18.04

# Install dependencies
RUN apt-get update && \
 apt-get -y install apache2

# Write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html

# Open port 80
EXPOSE 80

# Start Apache service
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
FROM ubuntu:18.04

# Install dependencies
RUN apt-get update && \
 apt-get -y install apache2

# Copy html directory files
COPY html /var/www/html/

# Open port 80
EXPOSE 80

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

2.4 – 打开命令提示符或终端窗口,并将目录更改为您存储 Dockerfile 的文件夹。

 

2.5 – 输入以下命令以使用文件夹中的 Dockerfile 构建容器镜像。此命令会构建一个名为 mystaticwebsite 的新 Docker 容器镜像。

提交命令后,您应该会看到一条消息,确认您的镜像已成功构建。

docker build -t mystaticwebsite .

2.6 – 输入以下命令以查看本地计算机上的容器镜像。

提交命令后,您应该会看到类似于以下屏幕截图的结果,显示创建的新容器镜像。

docker images --filter reference=mystaticwebsite
配置您希望集群在预置后执行的任何步骤

您构建的新容器镜像已准备好通过使用它在本地计算机上运行新容器来进行测试。继续本教程的第 3 步:运行新容器镜像。

第 3 步:运行您的新容器镜像

完成以下步骤以运行您创建的新容器镜像。

3.1 – 在命令提示符或终端窗口中,输入以下命令以运行您在上一节中构建的容器镜像。  -p 8080:80 选项将容器上公开的端口 80 映射到本地机器上的端口 8080。-d  选项指定容器应在分离模式下运行。

docker container run -d -p 8080:80 --name mystaticwebsite mystaticwebsite:latest

3.2 – 输入以下命令以查看您正在运行的容器。

输入命令后,您应该会看到以下屏幕截图的输出,显示新容器正在运行。 

docker container ls -a
配置您希望集群在预置后执行的任何步骤

3.3 – 要确认容器已启动并正在运行,请打开一个新的浏览器窗口并浏览到 http://localhost:8080。您应该会看到类似于以下屏幕截图的消息。这表明您的容器已在本地计算机上启动并运行。

配置您希望集群在预置后执行的任何步骤

您新构建的容器镜像已准备好推送到您的 Lightsail 账户,以便您可以将其部署到您的 Lightsail 容器服务。有关详细信息,请参阅在您的 Amazon Lightsail 容器服务上发布和管理容器镜像

第 4 步:清理本地机器上运行的容器

您已经创建了一个可以推送到 Lightsail 容器服务的容器镜像,现在请按照本指南中的步骤清理在本地计算机上运行的容器。

完成以下步骤来清理本地机器上运行的容器:

4.1 – 运行以下命令以查看在本地计算机上运行的容器。

您应该会看到类似于以下屏幕截图的结果,其中列出了在本地计算机上运行的容器的名称。

docker container ls -a
配置您希望集群在预置后执行的任何步骤

4.2 – 运行以下命令以删除您在本指南前面创建的正在运行的容器。这会强制停止容器并将其永久删除。

在命令中,将 <ContainerName> 替换为要停止的容器的名称,然后删除。代码第二行为示例。 

docker container rm <ContainerName> --force
docker container rm mystaticwebsite --force

容器镜像创建完成且您准备好进行部署后,请将它们推送到您的 Lightsail 容器服务。本教程的下一步将引导您了解如何将容器镜像推送到您的 Lightsail 容器服务。 

第 5 步:将容器镜像从本地计算机推送到您的容器服务

完成以下步骤以将您的容器镜像推送到您的容器服务。

5.1 – 打开命令提示符或终端窗口。

在命令提示符或终端窗口中,输入以下命令以查看当前在本地计算机上的 Docker 镜像。

docker images

5.2 – 在结果中,找到要推送到容器服务的容器镜像的名称(存储库名称)和标签。记下来,因为在下一步中您将需要它。

配置您希望集群在预置后执行的任何步骤

5.3 – 输入以下命令,将本地计算机上的容器镜像推送到容器服务。

在命令中,

  • <Region> 替换为创建容器服务的 AWS 区域。
  • <ContainerServiceName> 替换为您的容器服务的名称。
  • <ContainerImageLabel> 替换为您希望在容器镜像存储在容器服务上时为其提供的标签。指定可用于跟踪已注册容器镜像的不同版本的描述性标签。
  • 该标签将成为您的容器服务生成的容器镜像名称的一部分。例如,如果您的容器服务名称是 container-service-1,容器镜像标签是 mystaticsite,并且这是您推送的容器镜像的第一个版本,那么您的容器服务生成的镜像名称将是 :container-service-1.mystaticsite.1
  • 该标签将成为您的容器服务生成的容器镜像名称的一部分。例如,如果您的容器服务名称是 container-service-1,容器镜像标签是 mystaticsite,并且这是您推送的容器镜像的第一个版本,那么您的容器服务生成的镜像名称将是 :container-service-1.mystaticsite.1
  • <LocalContainerImageName> 替换为要推送到容器服务的容器镜像的名称。您在此过程的上一步中获得了容器镜像名称。
  • <ImageTag> 替换为要推送到容器服务的容器镜像的标签。您在此过程的上一步中获得了容器镜像标签。
您的命令应该如第二个代码块所示。 
 
输入该命令后,您应该会看到类似于右侧屏幕截图的结果,这表示您的容器镜像已推送到您的容器服务。
aws lightsail push-container-image --region <Region> --service-name <ContainerServiceName> --label <ContainerImageLabel> --image <LocalContainerImageName>:<ImageTag>
aws lightsail push-container-image --region us-west-2 --service-name myservice --label mystaticwebsite --image mystaticwebsite:v2
配置您希望集群在预置后执行的任何步骤

现在,完成以下步骤以查看已推送和正在存储在您的容器服务上的容器镜像。

5.4 – 登录 Lightsail console (Lightsail 控制台),然后导航到Containers (容器) 选项卡。 

5.5 – 选择要查看其存储的容器镜像的当前部署的容器服务的名称。

5.6 – 在容器服务管理页面上,选择 Images (镜像) 选项卡。

注意:如果您尚未将镜像推送到容器服务,则不会显示 Images (镜像) 选项卡。要显示容器服务的镜像选项卡,您必须首先将容器镜像推送到您的服务。

Images (镜像) 页面列出了推送到您的容器服务且当前存储在您的服务中的容器镜像。当前部署中正在使用的容器镜像无法删除,其删除图表将灰显。

配置您希望集群在预置后执行的任何步骤

您现在已将容器镜像推送到 Lightsail 的容器服务。您可以删除镜像或创建容器镜像的部署。

第 6 步:创建部署

准备好在 Amazon Lightsail 容器服务上启动容器时,您即可创建部署。部署是适用于您希望在服务上启动的容器的一组规范。您的容器服务一次可以有一个正在运行的部署,一个部署最多可以有 10 个容器条目。您可以在创建容器服务的同时创建部署,也可以在服务启动并运行后创建。

本节回顾如何创建容器服务部署。有关详细信息,请参阅为您的 Amazon Lightsail 容器服务创建和管理部署

6.1 – 登录 Lightsail 控制台,然后导航到 Containers (容器) 选项卡。然后,选择您要为其创建或修改容器服务部署的容器服务的名称。

6.2 – 在容器服务管理页面上,选择 Deployments (部署) 选项卡。如果有部署,则 Deployments (部署) 页面会列出您当前的部署和部署版本。

6.3 – 选择以下其中一种方案:

  • 如果您的容器服务已有部署,请选择 Modify your deployment (修改您的部署)
  • 如果您的容器服务尚未部署,请选择 Create a deployment (创建部署)

您可以在打开的部署表单中编辑现有部署参数,或输入新的部署参数。

配置您希望集群在预置后执行的任何步骤

6.4 – 输入您的部署参数。 

有关您可以指定的部署参数的更多信息,请参阅部署参数

6.5 – 选择 Add container entry (添加容器条目) 以将多个容器条目添加到您的部署。您的部署中最多可以有 10 个容器条目。

6.6 – 输入部署参数后,选择 Save and deploy (保存并部署) 以在容器服务上创建部署。

在创建部署时,容器服务的状态会变成 Deploying (正在部署)。之后,您的容器服务的状态会根据您的部署状态更改为以下之一:

  • 如果部署成功,容器服务状态将更改为 Running (正在运行) 并且部署状态将改为 Active (活跃)。如果您在部署中配置了公共端点,则选择作为公共端点的容器可通过容器服务的默认域使用。
  • 如果您的部署失败,并且之前的部署正在您的容器服务上运行,则您的容器服务的状态会更改为 Running (正在运行),并且您的容器服务会将之前的部署保留为活跃部署。如果之前没有部署,您的容器服务的状态将改为 Ready (准备就绪),当前没有活跃部署。查看失败部署的容器日志以诊断和排除问题所在。有关更多信息,请参阅查看 Amazon Lightsail 容器服务的容器日志。

恭喜

您现在应该有一个容器在您的容器服务上运行。该容器创建于本地,然后通过 AWS CLI 推送到您的 Lightsail 容器服务。

Amazon Lightsail 是开发、构建和部署各种应用程序(例如,WordPress、网站和博客平台)的绝佳选择。

本教程对您是否有帮助?

查看您的容器日志

查看容器服务上的容器日志。单击此处了解更多信息。 

监控利用率指标

监控容器服务的利用率指标。单击此处了解更多信息。 

了解详情

了解有关 Amazon Lightsail 容器的更多信息。单击此处了解更多信息。