运行官方的 Amazon P ECR ublic 或 Docker 镜像 AWS CLI - AWS Command Line Interface

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

运行官方的 Amazon P ECR ublic 或 Docker 镜像 AWS CLI

本主题介绍如何使用官方的亚马逊弹性容器注册表(Amazon Public)或 Docker Hub 镜像在 Docker 上运行、 AWS CLI 版本控制和配置版本 2。ECR有关如何使用 Docker 的更多信息,请参阅 Docker 的文档

官方镜像提供 AWS 直接支持和维护的隔离、便携性和安全性。这使您能够在基于容器的环境中使用 AWS CLI 版本 2,而不必自己管理安装。

先决条件

您必须已经安装 Docker。有关安装说明,请参阅 Docker 网站

要验证 Docker 的安装,请运行以下命令并确认是否有输出。

$ docker --version Docker version 19.03.1

在亚马逊 P ECR ublic 和 Docker Hub 之间做出选择

我们建议使用 Amazon P ECR ublic 而不是 Docker Hub 来存储 AWS CLI 映像。Docker Hub 对公有使用者有更严格的速率限制,这会导致出现节流问题。此外,Amazon P ECR ublic 会在多个区域复制映像,以提供强大的可用性并处理区域中断问题。

有关 Docker Hub 速率限制的更多信息,请参阅 Docker 网站上的了解 Docker Hub 速率限制

运行官方 AWS CLI 版 2 张图片

首次使用 docker run 命令时,系统会将最新映像下载到计算机。docker run 命令的每次后续使用都会从本地副本运行。

要运行 AWS CLI 版本 2 的 Docker 镜像,请使用docker run命令。

Amazon ECR Public

正式 AWS CLI 版本 2 Amazon P ECR ublic 镜像托管在 Amazon P ECR ublic 上的aws-cli/aws-cli存储库中。

$ docker run --rm -it public.ecr.aws/aws-cli/aws-cli command
Docker Hub

正式 AWS CLI 版本 2 的 Docker 镜像托管在 Docker Hub 的存储库中。amazon/aws-cli

$ docker run --rm -it amazon/aws-cli command

下面是此命令运行方式:

  • docker run --rm -it repository/name – 等效于 aws 可执行文件。每次运行此命令时,Docker 都会启动已下载映像的容器,并执行您的 aws 命令。默认情况下,镜像使用最新版本的 AWS CLI 版本 2。

    例如,要在 Docker 中调用 aws --version 命令,请运行以下命令。

    Amazon ECR Public
    $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli --version aws-cli/2.17.20 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
    Docker Hub
    $ docker run --rm -it amazon/aws-cli --version aws-cli/2.17.20 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
  • --rm – 指定在命令退出后清理容器。

  • -it— 指定使用打开伪-TTY。stdin这使您能够在 AWS CLI 版本 2 在容器中运行时为其提供输入,例如,使用aws configureaws help命令。当选择是否省略 -it 时,请考虑以下事项:

    • 如果您正在运行脚本,则不需要 -it

    • 如果您的脚本遇到错误,则从 Docker 调用中省略 -it 也许能解决此问题。

    • 如果您正在尝试通过管道发送输出,-it 可能会导致错误,从 Docker 调用中省略 -it 也许能解决此问题。如果希望保留 -it 标志,但仍想通过管道发送输出,请禁用 AWS CLI 默认使用的客户端分页程序,应该能解决此问题。

有关 docker run 命令的更多信息,请参阅 Docker 参考指南

有关官方映像的接口和向后兼容性的说明

  • 映像上支持的唯一工具是 AWS CLI。仅应直接运行 aws 可执行文件。例如,尽管lessgroff已明确安装在映像上,但不应在 AWS CLI 命令之外直接执行它们。

  • /aws 工作目录由用户控制。除非用户在运行 AWS CLI 命令时发出指示,否则图像不会写入此目录。

  • 依赖最新标签并不能保证向后兼容。为了确保向后兼容,您必须固定使用特定的 <major.minor.patch> 标签,因为这些标签是不可改变的;它们只会被推送一次。

使用特定版本和标签

官方 AWS CLI 版本 2 镜像有多个版本可供您使用,首先是版本2.0.6。要运行版本 2 的特定 AWS CLI 版本,请在docker run命令中附加相应的标签。首次使用带有标签的 docker run 命令时,该标签的最新映像会下载到您的计算机。带有该标签的 docker run 命令的每次后续使用都从您的本地副本运行。

您可以使用两种类型的标签:

  • latest— 为图像定义 AWS CLI 版本 2 的最新版本。我们建议您在需要 AWS CLI 版本 2 的最新版本时使用 latest 标签。但是,依赖此标签时不保证向后兼容性。默认情况下,在 latest 命令中使用 docker run 标签。要显式使用 latest 标记,请将标签附加到容器映像名称。

    Amazon ECR Public
    $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli:latest command
    Docker Hub
    $ docker run --rm -it amazon/aws-cli:latest command
  • <major.minor.patch>— 为图像定义 AWS CLI 版本 2 的特定版本。如果您计划在生产环境中使用官方镜像,我们建议您使用版本 2 的特定 AWS CLI 版本,以确保向后兼容。例如,要运行版本 2.0.6,请将版本附加到容器映像名称中。

    Amazon ECR Public
    $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli:2.0.6 command
    Docker Hub
    $ docker run --rm -it amazon/aws-cli:2.0.6 command

更新到最新的官方映像

由于最新的映像仅在您第一次使用 docker run 命令时下载到您的计算机,因此您需要手动提取更新的映像。要手动更新到最新版本,我们建议您拉取标记为 latest 的映像。拉取映像会将最新版本下载到您的计算机。

Amazon ECR Public
$ docker pull public.ecr.aws/aws-cli/aws-cli:latest
Docker Hub
$ docker pull amazon/aws-cli:latest

共享主机文件、凭据、环境变量和配置

由于 AWS CLI 版本 2 是在容器中运行的,因此默认情况下CLI无法访问主机文件系统,其中包括配置和凭据。要将主机文件系统、凭证和配置共享到容器,请将主机系统的 ~/.aws 目录挂载到位于 /root/.aws 的容器,并将 -v 标志附加到 docker run 命令。这允许在容器中运行的 AWS CLI 版本 2 查找主机文件信息。

Amazon ECR Public

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli command

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli command

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli command
Docker Hub

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli command

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws amazon/aws-cli command

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws amazon/aws-cli command

有关 -v 标志和挂载的更多信息,请参阅 Docker 参考指南

注意

有关 configcredentials 文件的信息,请参阅 中的配置和凭据文件设置 AWS CLI

示例 1:提供凭证和配置

在此示例中,我们在运行 s3 ls 命令时提供主机凭证和配置,以便列出 Amazon Simple Storage Service (Amazon S3) 中的存储桶。以下示例使用 AWS CLI 证书和配置文件的默认位置,要使用不同的位置,请更改文件路径。

Amazon ECR Public

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws public.ecr.aws/aws-cli/aws-cli s3 ls
Docker Hub

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws amazon/aws-cli s3 ls

您可以使用 -e 标志调用特定系统的环境变量。要使用环境变量,请按名称调用它。

Amazon ECR Public

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e ENVVAR_NAME public.ecr.aws/aws-cli/aws-cli s3 ls
Docker Hub

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls

示例 2:将 Amazon S3 文件下载到您的主机系统

对于某些 AWS CLI 版本 2 命令,您可以从容器中的主机系统读取文件或将文件从容器写入主机系统。

在此示例中,我们通过将当前工作目录挂载到容器的 S3 目录,将 s3://aws-cli-docker-demo/hello 对象 /aws 下载到本地文件系统。通过将 hello 对象下载到容器的 /aws 目录,文件也会保存到主机系统的当前工作目录中。

Amazon ECR Public

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello . download: s3://aws-cli-docker-demo/hello to ./hello

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello . download: s3://aws-cli-docker-demo/hello to ./hello

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli s3 cp s3://aws-cli-docker-demo/hello .
Docker Hub

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello . download: s3://aws-cli-docker-demo/hello to ./hello

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello . download: s3://aws-cli-docker-demo/hello to ./hello

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli s3 cp s3://aws-cli-docker-demo/hello .

要确认本地文件系统中存在下载的文件,请运行以下命令。

Linux 和 macOS

$ cat hello Hello from Docker!

窗户 PowerShell

$ type hello Hello from Docker!

示例 3:使用您的AWS_PROFILE环境变量

您可以使用 -e 标志调用特定系统的环境变量。调用您想使用的每个环境变量。在此示例中,我们提供了主机凭证、配置和 AWS_PROFILE 运行s3 ls命令以在亚马逊简单存储服务 (Amazon S3) Service 中列出您的存储桶时的环境变量。

Amazon ECR Public

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e AWS_PROFILE public.ecr.aws/aws-cli/aws-cli s3 ls
Docker Hub

Linux 和 macOS

$ docker run --rm -it -v ~/.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

Windows 命令提示符

$ docker run --rm -it -v %userprofile%\.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls 2020-03-25 00:30:48 aws-cli-docker-demo

窗户 PowerShell

C:\> docker run --rm -it -v $env:userprofile\.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls

缩短 docker run 命令

为了缩短 docker run 命令,我们建议您使用操作系统的功能在 Linux 和 macOS 中创建 symbolic link(符号链接)或 alias,或者在 Windows 中创建 doskey。要设置 aws 别名,可以运行以下命令之一。

  • 要对 aws 命令进行基本访问,请运行以下命令。

    Amazon ECR Public

    Linux 和 macOS

    $ alias aws='docker run --rm -it public.ecr.aws/aws-cli/aws-cli'

    Windows 命令提示符

    C:\> doskey aws=docker run --rm -it public.ecr.aws/aws-cli/aws-cli $*

    窗户 PowerShell

    C:\> Function AWSCLI {docker run --rm -it public.ecr.aws/aws-cli/aws-cli $args} Set-Alias -Name aws -Value AWSCLI
    Docker Hub

    Linux 和 macOS

    $ alias aws='docker run --rm -it amazon/aws-cli'

    Windows 命令提示符

    C:\> doskey aws=docker run --rm -it amazon/aws-cli $*

    窗户 PowerShell

    C:\> Function AWSCLI {docker run --rm -it amazon/aws-cli $args} Set-Alias -Name aws -Value AWSCLI
  • 要在使用 aws 命令时访问主机文件系统和配置设置,请运行以下命令:

    Amazon ECR Public

    Linux 和 macOS

    $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli'

    Windows 命令提示符

    C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli $*

    窗户 PowerShell

    C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli $args} Set-Alias -Name aws -Value AWSCLI
    Docker Hub

    Linux 和 macOS

    $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli'

    Windows 命令提示符

    C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli $*

    窗户 PowerShell

    C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli $args} Set-Alias -Name aws -Value AWSCLI
  • 要分配要在 aws 别名中使用的特定版本,请附加版本标签。

    Amazon ECR Public

    Linux 和 macOS

    $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws public.ecr.aws/aws-cli/aws-cli:2.0.6'

    Windows 命令提示符

    C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws public.ecr.aws/aws-cli/aws-cli:2.0.6 $*

    窗户 PowerShell

    C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws public.ecr.aws/aws-cli/aws-cli:2.0.6 $args} Set-Alias -Name aws -Value AWSCLI
    Docker Hub

    Linux 和 macOS

    $ alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli:2.0.6'

    Windows 命令提示符

    C:\> doskey aws=docker run --rm -it -v %userprofile%\.aws:/root/.aws -v %cd%:/aws amazon/aws-cli:2.0.6 $*

    窗户 PowerShell

    C:\> Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli:2.0.6 $args} Set-Alias -Name aws -Value AWSCLI

设置别名后,您可以像安装在主机系统上一样从容器中运行 AWS CLI 版本 2。

$ aws --version aws-cli/2.17.20 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10