在 AWS CLI 中运行官方 Amazon ECR Public 映像或 Docker 映像
本主题介绍如何使用官方 Amazon Elastic Container Registry Public (Amazon ECR Public) 或 Docker Hub 映像,在 Docker 上运行、配置 AWS CLI 版本 2 以及对其进行版本控制。有关如何使用 Docker 的更多信息,请参阅 Docker 的文档。
官方映像提供 AWS 直接支持和维护的隔离、可移植性和安全性。这使您能够在基于容器的环境中使用 AWS CLI 版本 2,而无需自行管理安装。
先决条件
您必须已经安装 Docker。有关安装说明,请参阅 Docker 网站。
要验证 Docker 的安装,请运行以下命令并确认是否有输出。
$
docker --version
Docker version 19.03.1
在 Amazon ECR Public 和 Docker Hub 之间作出选择
我们建议为 AWS CLI 映像使用 Amazon ECR Public,而不使用 Docker Hub。Docker Hub 对公有使用者有更严格的速率限制,这会导致出现节流问题。此外,Amazon ECR Public 会在多个区域复制映像,以提供强大的可用性和处理区域中断问题。
有关 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 ECR Public 映像托管在 aws-cli/aws-cli
存储库中的 Amazon ECR Public 上。
$
docker run --rm -it public.ecr.aws/aws-cli/aws-cli command
- Docker Hub
-
官方 AWS CLI 版本 2 Docker 映像托管在 amazon/aws-cli
存储库中的 Docker Hub 上。
$
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 configure
和 aws help
命令。当选择是否省略 -it
时,请考虑以下事项:
有关 docker run
命令的更多信息,请参阅 Docker 参考指南。
有关官方映像的接口和向后兼容性的说明
-
映像上支持的唯一工具是 AWS CLI。仅应直接运行 aws
可执行文件。例如,尽管已在映像上显式安装 less
和 groff
,但它们不应直接在 AWS CLI 命令外部执行。
-
/aws
工作目录由用户控制。除非在运行 AWS CLI 命令时接到用户指示,否则映像不会写入此目录。
-
依赖最新标签并不能保证向后兼容。为了确保向后兼容,您必须固定使用特定的 <major.minor.patch>
标签,因为这些标签是不可改变的;它们只会被推送一次。
使用特定版本和标签
从版本 2.0.6
开始,官方 AWS CLI 版本 2 映像有多个版本可供使用。要运行 AWS CLI 版本 2 的特定版本,请将相应的标签附加到 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 的特定版本。如果您计划在生产中使用官方映像,我们建议您使用 AWS CLI 版本 2 的特定版本,以确保向后兼容。例如,要运行版本 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
Windows 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
Windows PowerShell
C:\>
docker run --rm -it -v $env:userprofile\.aws:/root/.aws amazon/aws-cli command
有关 -v
标志和挂载的更多信息,请参阅 Docker 参考指南。
示例 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
Windows 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
Windows 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
Windows 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
Windows 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
Windows 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
Windows 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!
Windows PowerShell
$
type hello
Hello from Docker!
示例 3:使用您的 AWS_PROFILE 环境变量
您可以使用 -e
标志调用特定系统的环境变量。调用您想使用的每个环境变量。在本示例中,我们在运行 s3 ls
命令以在 Amazon Simple Storage Service (Amazon S3) 中列出存储桶时提供了主机凭证、配置和 AWS_PROFILE
环境变量。
- 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
Windows 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
Windows 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 CLI 版本 2,就好像它安装在主机系统上一样。
$
aws --version
aws-cli/2.17.20 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10