

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 Lightsail 容器服务构建和测试 Docker 镜像
<a name="amazon-lightsail-creating-container-images"></a>

通过 Docker，您可以构建、运行、测试和部署基于容器的分布式应用程序。Amazon Lightsail 容器服务使用部署中的 Docker 容器镜像来启动容器。

在本指南中，我们将介绍如何使用 Docker 文件在本地机器上创建容器镜像。创建镜像后，您可以将其推送到 Lightsail 容器服务以进行部署。

要完成本指南中的步骤，您应基本了解 Docker 是什么及其工作方式。有关 Docker 的更多信息，请参阅 [Docker 是什么？](https://aws.amazon.com/docker/)和 [Docker 概述](https://docs.docker.com/get-started/overview/)。

**内容**
+ [步骤 1：完成先决条件](#create-container-image-prerequisite)
+ [步骤 2：创建 Docker 文件并构建容器镜像](#create-container-image-create-dockerfile)
+ [步骤 3：运行新容器镜像](#create-container-image-run-container)
+ [（可选）步骤 4：清除本地机器上运行的容器](#create-container-image-cleanup)
+ [创建容器镜像后的后续步骤](#create-container-image-next-steps)

## 步骤 1：完成先决条件
<a name="create-container-image-prerequisite"></a>

在开始之前，您必须安装创建容器所需的软件，然后将其推送到 Lightsail 容器服务。例如，您必须安装并使用 Docker 来创建和构建容器镜像，然后便可以用于您的 Lightsail 容器服务。有关更多信息，请参阅 。[安装软件以管理 Amazon Lightsail 容器服务的容器镜像](amazon-lightsail-install-software.md)。

## 步骤 2：创建 Docker 文件并构建容器镜像
<a name="create-container-image-create-dockerfile"></a>

完成以下过程以创建 Docker 文件并用其构建 `mystaticwebsite` Docker 容器镜像。容器映像将用于在 Ubuntu 的 Apache Web 服务器上托管的简单静态网站。

1. 在本地机器上创建 `mystaticwebsite` 文件夹，以在其中存储 Docker 文件。

1. 在您刚创建的文件夹中创建 Docker 文件。

   Docker 文件不使用文件扩展名，例如 `.TXT`。完整文件名为 `Dockerfile`。

1. 根据您希望如何配置容器镜像，复制以下代码块之一，并将其粘贴到 Docker 文件中：
   + **如果您想创建一个包含 Hello World 消息的简单静态网站容器镜像**，则复制以下代码块并将其粘贴到 Docker 文件中。此代码示例使用 Ubuntu 18.04 镜像。`RUN` 指令更新程序包缓存，并安装和配置 Apache，然后将 Hello World 消息打印到 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"]
     ```
   + **如果您想为静态网站容器镜像使用您自己的 HTML 文件集**，请在存储 Docker 文件的相同文件夹中创建 `html` 文件夹。然后把您的 HTML 文件放在该文件夹中。

     在您的 HTML 文件位于 `html` 文件夹中之后，复制以下代码块并将其粘贴到 Docker 文件中。此代码示例使用 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
     
     # Copy html directory files
     COPY html /var/www/html/
     
     # Open port 80
     EXPOSE 80
     
     CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
     ```

1. 打开命令提示符或终端窗口，然后将目录更改为要存储 Docker 文件的文件夹。

1. 输入以下命令以使用文件夹中的 Docker 文件构建容器镜像。此命令将构建一个名为 `mystaticwebsite` 的新 Docker 容器镜像。

   ```
   docker build -t mystaticwebsite .
   ```

   您应该看到一条确认镜像已成功构建的消息。

1. 输入以下命令以查看本地机器上的容器镜像。

   ```
   docker images --filter reference=mystaticwebsite
   ```

   您应看到类似于以下示例的结果，其中显示新创建的容器镜像。  
![Docker 镜像命令的结果](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/docker-images-command-result.png)

   您新构建的容器镜像已准备好进行测试，可使用它在本机计算机上运行新容器。继续本指南的下一部分[步骤 3：运行新容器镜像](#create-container-image-run-container)。

## 步骤 3：运行新容器镜像
<a name="create-container-image-run-container"></a>

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

1. 在命令提示符或终端窗口中，输入以下命令以运行您之前在本指南的[步骤 2：创建 Docker 文件并构建容器镜像](#create-container-image-create-dockerfile)部分中构建的容器镜像。`-p 8080:80` 选项将容器上公开的端口 80 映射到本地机器上的端口 8080。`-d` 选项指定容器应在分离模式下运行。

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

1. 输入以下命令以查看正在运行的容器。

   ```
   docker container ls -a
   ```

   您应看到类似于以下示例的结果，其中显示新运行的容器。  
![Docker 容器命令的结果](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/docker-container-command-result.png)

1. 要确认容器已启动并正在运行，请打开一个新的浏览器窗口并浏览到 `http://localhost:8080`。您应看到类似于以下示例的消息。这确认您的容器已启动并在本地机器上运行。  
![在 Docker 容器上运行的静态网站](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/container-mystaticsite-hello-world.png)

   您新构建的容器镜像已准备好被推送到您的 Lightsail 账户，以便您可以将其部署到 Lightsail 容器服务。有关更多信息，请参阅[在 Amazon Lightsail 服务中推送和管理容器镜像](amazon-lightsail-pushing-container-images.md)。

## （可选）步骤 4：清除本地机器上运行的容器
<a name="create-container-image-cleanup"></a>

既然您已经创建了可以推送到 Lightsail 容器服务的容器镜像，按照本指南中的步骤，现在可以清除本地机器上运行的容器。

完成以下步骤以清除本地计算机上运行的容器：

1. 运行以下命令以查看本地机器上运行的容器。

   ```
   docker container ls -a
   ```

   您应该看到类似下面的结果，其中列出了本地计算机上运行的容器的名称。  
![Docker 容器命令的结果](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/docker-container-command-result.png)

1. 运行以下命令可删除之前在本指南中创建的运行中容器。这会强制停止容器，并永久删除容器。

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

   在命令中，将 < ContainerName > 替换为要停止的容器的名称，然后将其删除。

   示例：

   ```
   docker container rm {{mystaticwebsite}} --force
   ```

   现在可以删除据本指南创建的容器。

## 创建容器镜像后的后续步骤
<a name="create-container-image-next-steps"></a>

创建容器镜像后，在准备部署容器镜像时将其推送到 Lightsail 容器服务。有关更多信息，请参阅[管理 Lightsail 容器服务镜像](amazon-lightsail-pushing-container-images.md)。

**Topics**
+ [步骤 1：完成先决条件](#create-container-image-prerequisite)
+ [步骤 2：创建 Docker 文件并构建容器镜像](#create-container-image-create-dockerfile)
+ [步骤 3：运行新容器镜像](#create-container-image-run-container)
+ [（可选）步骤 4：清除本地机器上运行的容器](#create-container-image-cleanup)
+ [创建容器镜像后的后续步骤](#create-container-image-next-steps)
+ [管理容器映像](amazon-lightsail-pushing-container-images.md)
+ [安装容器服务插件](amazon-lightsail-install-software.md)
+ [ECR 私有存储库访问权限](amazon-lightsail-container-service-ecr-private-repo-access.md)