AWS CLI 從官方 Amazon ECR 公共或碼頭圖像運行 - AWS Command Line Interface

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS CLI 從官方 Amazon ECR 公共或碼頭圖像運行

本主題說明如何使用官方的 Amazon 彈性容器登錄公用 (Amazon ECR 公用) 或碼頭集線器映像在 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 之間進行選擇

我們建議使用 Amazon ECR 公共在碼頭集線器的 AWS CLI 圖像。Docker Hub 對於大眾消費者的速率限制更嚴格,可能會導致限流問題。此外,Amazon ECR Public 會在多個區域複寫映像,以提供強大的可用性並處理區域中斷問題。

如需 Docker Hub 速率限制的詳細資訊,請參閱 Docker 網站上的了解 Docker Hub 速率限制

運行正式 AWS CLI 版本 2 圖像

第一次使用 docker run 命令時,會將最新的映像下載到您的電腦。後續每次使用 docker run 命令時,都會從您的本機複本執行。

若要執行第 2 AWS CLI 版 Docker 映像檔,請使用指docker run令。

Amazon ECR Public

正式 AWS CLI 版本 2 Amazon ECR 公共映像託管在 Amazon ECR 公共存儲庫中aws-cli/aws-cli

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

正式 AWS CLI 版本 2 Docker 映像託管在存儲庫中的碼頭集線器上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.15.30 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.15.30 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
  • --rm – 會指定在命令結束後清理容器。

  • -it – 會指定使用 stdin 開啟 pseudo-TTY。這可讓您在 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 標籤。但是,依賴此標籤時,無法保證回溯相容性。預設會在 docker run 命令中使用 latest 標籤。若要明確使用 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

視窗 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 檔案的資訊,請參閱 組態與憑證檔案設定

範例 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 命令,您可以從容器中的主機系統讀取檔案,或將檔案從容器寫入主機系統。

在這個範例中,我們透過將目前的工作目錄掛載到容器的 /aws 目錄,將 S3 物件 s3://aws-cli-docker-demo/hello 下載到您的本機檔案系統。藉由將 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 旗標呼叫特定系統的環境變數。呼叫您要使用的每個環境變數。在此範例中,我們在執行 s3 ls 命令時提供主機憑證、組態和 AWS_PROFILE 環境變數,以列出您在 Amazon Simple Storage Service (Amazon S3) 的儲存貯體。

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.15.30 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10