

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

# 在里面构建 Docker 容器 CloudShell 并将其推送到 Amazon ECR 存储库
<a name="tutorial-docker-cli"></a>

本教程向您展示如何定义和构建 Docker 容器 AWS CloudShell 并将其推送到 Amazon ECR 存储库。

## 先决条件
<a name="prerequisites-docker-cli"></a>
+ 您必须拥有所需权限才能创建 Docker 容器并将其推送到 Amazon ECR 存储库。有关更多信息，请参阅《Amazon ECR 用户指南》**中的 [Amazon ECR 私有存储库](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html)。有关使用 Amazon ECR 推送映像所需权限的更多信息，请参阅《Amazon ECR 用户指南》**中的[推送映像所需的 IAM 权限](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-push.html#image-push-iam)。

## 教程
<a name="tutorial-docker-cli-steps"></a>

以下教程概述了如何使用该 CloudShell 接口构建 Docker 容器并将其推送到 Amazon ECR 存储库。

1. 在您的主目录中创建一个新文件夹。

   ```
   mkdir ~/docker-cli-tutorial
   ```

1. 导航到所创建的文件夹。

   ```
   cd ~/docker-cli-tutorial
   ```

1. 创建空 Dockerfile。

   ```
   touch Dockerfile
   ```

1. 使用文本编辑器（如 `nano Dockerfile`）打开该文件并将以下内容粘贴到该文件中。

   ```
   # Dockerfile
   
   # Base this container on the latest Amazon Linux version
   FROM public.ecr.aws/amazonlinux/amazonlinux:latest
   
   # Install the cowsay binary
   RUN dnf install --assumeyes cowsay
   
   # Default entrypoint binary
   ENTRYPOINT [ "cowsay" ]
   
   # Default argument for the cowsay entrypoint
   CMD [ "Hello, World!" ]
   ```

1. Dockerfile 现在已准备就绪，可用于构建。通过运行 `docker build` 构建容器。用 easy-to-type名称标记容器，以便在 future 命令中使用。

   ```
   docker build --tag test-container .
   ```

   请务必包含尾部句点（`.`）。  
![\[在 AWS CloudShell中运行的 Docker 构建命令的图片。\]](http://docs.aws.amazon.com/zh_cn/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%201-docker-build.png)

1. 现在，您可以测试该容器以检查其能否在 AWS CloudShell中正常运行。

   ```
   docker container run test-container
   ```  
![\[里面的 docker 容器运行命令的图片 AWS CloudShell\]](http://docs.aws.amazon.com/zh_cn/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%202-docker-run.png)

1. 现在您已拥有正常运行的 Docker 容器，接下来需要将其推送到 Amazon ECR 存储库。如果您已有 Amazon ECR 存储库，则可以跳过此步骤。

   运行以下命令，为本教程创建一个 Amazon ECR 存储库。

   ```
   ECR_REPO_NAME=docker-tutorial-repo
   aws ecr create-repository --repository-name ${ECR_REPO_NAME}
   ```  
![\[用于在内部创建 Amazon ECR 存储库的命令的图像 AWS CloudShell\]](http://docs.aws.amazon.com/zh_cn/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%203-ecr-create-repo%20(redacted).png)

1. 创建 Amazon ECR 存储库后，可以将 Docker 容器推送到该存储库。

   运行以下命令，获取 Docker 的 Amazon ECR 登录凭证。

   ```
   AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
   ECR_URL=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
   aws ecr get-login-password | docker login --username AWS --password-stdin ${ECR_URL}
   ```  
![\[用于获取 Docker 的 Amazon ECR 登录凭证的命令的图片。\]](http://docs.aws.amazon.com/zh_cn/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%204-docker-login.png)
**注意**  
如果未在您的中设置**AWS\$1REGION**环境变量， CloudShell 或者您想与其他环境中的资源进行交互 AWS 区域，请运行以下命令：  

   ```
   AWS_REGION=<your-desired-region>
   ```

1. 使用目标 Amazon ECR 存储库标记映像，然后将其推送到该存储库。

   ```
   docker tag test-container ${ECR_URL}/${ECR_REPO_NAME}
   docker push ${ECR_URL}/${ECR_REPO_NAME}
   ```  
![\[用于将映像标记为目标 Amazon ECR 存储库的命令的图片。\]](http://docs.aws.amazon.com/zh_cn/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%205-docker-push%20(redacted).png)

   如果您在尝试完成本教程时遇到错误或问题，请参阅本指南的[故障排除](https://docs.aws.amazon.com/cloudshell/latest/userguide/troubleshooting.html)部分寻求帮助。

## 清理
<a name="clean-up-docker-cli"></a>

现在您已成功将 Docker 容器部署到 Amazon ECR 存储库。要从您的 AWS CloudShell 环境中删除您在本教程中创建的文件，请运行以下命令。
+ 

  ```
  cd ~
  rm -rf ~/docker-cli-tutorial
  ```
+ 删除 Amazon ECR 存储库。

  ```
  aws ecr delete-repository --force --repository-name ${ECR_REPO_NAME}
  ```