

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

# 執行 的官方 Amazon ECR Public 或 Docker 映像 AWS CLI
<a name="getting-started-docker"></a>

本主題說明如何使用官方 Amazon Elastic Container Registry Public (Amazon ECR Public) 或 Docker Hub 映像，在 Docker 上執行、版本控制和設定 AWS CLI 版本 2。如需如何使用 Docker 的詳細資訊，請參閱 [Docker 文件](https://docs.docker.com/)。

官方映像提供 AWS 直接支援和維護的隔離性、可攜性和安全性。這可讓您在容器型環境中使用 第 2 AWS CLI 版，而不必自行管理安裝。

**Topics**
+ [

## 先決條件
](#cliv2-docker-prereq)
+ [

## 在 Amazon ECR Public 和 Docker Hub 之間進行選擇
](#cliv2-docker-versus)
+ [

## 執行官方第 2 AWS CLI 版映像
](#cliv2-docker-install)
+ [

## 關於官方映像的介面和向後相容性的說明
](#cliv2-docker-install-notes)
+ [

## 使用特定版本和標籤
](#cliv2-docker-upgrade)
+ [

## 更新至最新的官方映像
](#cliv2-docker-update)
+ [

## 分享主機檔案、憑證、環境變數和組態
](#cliv2-docker-share-files)
+ [

## 縮短 docker run 命令
](#cliv2-docker-aliases)

## 先決條件
<a name="cliv2-docker-prereq"></a>

您必須已安裝 Docker。如需安裝說明，請參閱 [Docker 網站](https://docs.docker.com/install/)。

若要驗證 Docker 的安裝，請執行下列命令並確認有輸出。

```
$ docker --version
Docker version 19.03.1
```

## 在 Amazon ECR Public 和 Docker Hub 之間進行選擇
<a name="cliv2-docker-versus"></a>

我們建議您透過 Docker Hub 使用 Amazon ECR Public 進行 AWS CLI 映像。Docker Hub 對於大眾消費者的速率限制更嚴格，可能會導致限流問題。此外，Amazon ECR Public 會在多個區域複寫映像，以提供強大的可用性並處理區域中斷問題。

如需 Docker Hub 速率限制的詳細資訊，請參閱 *Docker* 網站上的[了解 Docker Hub 速率限制](https://www.docker.com/increase-rate-limits/)。

## 執行官方第 2 AWS CLI 版映像
<a name="cliv2-docker-install"></a>

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

若要執行第 2 AWS CLI 版 Docker 映像，請使用 `docker run`命令。

------
#### [ Amazon ECR Public ]

官方第 2 AWS CLI 版 Amazon ECR Public 映像託管在 [`aws-cli/aws-cli`儲存庫](https://gallery.ecr.aws/aws-cli/aws-cli)的 Amazon ECR Public 上。

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

------
#### [ Docker Hub ]

官方第 2 AWS CLI 版 Docker 映像託管在 `amazon/aws-cli`儲存庫的 Docker Hub 上。

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

------

這是命令的運作方式：
+ `docker run --rm -it repository/name` – 相當於 `aws` 可執行檔。每次執行此命令時，Docker 都會加速運轉已下載映像檔的容器，並執行您的 `aws` 命令。根據預設，映像會使用最新版本的 第 2 AWS CLI 版。

  例如，若要呼叫 Docker 中的 `aws --version` 命令，您會執行下列命令。

------
#### [ Amazon ECR Public ]

  ```
  $ docker run --rm -it public.ecr.aws/aws-cli/aws-cli --version
  aws-cli/2.27.41 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.27.41 Python/3.7.3 Linux/4.9.184-linuxkit botocore/2.4.5dev10
  ```

------
+ `--rm` – 會指定在命令結束後清理容器。
+ `-it` – 會指定使用 `stdin` 開啟 pseudo-TTY。這可讓您在容器執行時提供第 2 AWS CLI 版的輸入，例如使用 `aws configure`和 `aws help`命令。當選擇是否省略 `-it` 時，請考慮下列事項：
  + 如果您正在執行指令碼，則不需要 `-it`。
  + 如果您的指令碼發生錯誤，省略 Docker 呼叫中的 `-it` 也許可以解決問題。
  + 如果您嘗試管道輸出，`-it` 可能會導致錯誤，省略 Docker 呼叫中的 `-it` 也許可以解決此問題。如果您希望保留 `-it` 標誌，但仍然想管道輸出，在預設情況下停用[用户端分頁程式](cli-usage-pagination.md#cli-usage-pagination-clientside)該 AWS CLI 使用應該可以解決問題。

如需有關 `docker run` 命令的詳細資訊，請參閱《[Docker 參考指南](https://docs.docker.com/engine/reference/run/)》。

## 關於官方映像的介面和向後相容性的說明
<a name="cliv2-docker-install-notes"></a>
+ 映像上唯一支援的工具是 AWS CLI。只有 `aws` 可執行檔案應該直接運行。例如，即使 `less`和 `groff` 明確安裝在映像上，也不應在 AWS CLI 命令外部直接執行。
+ 此 `/aws` 工作目錄由使用者控制。除非使用者在執行 AWS CLI 命令時指示，否則映像不會寫入此目錄。
+ 依賴最新標籤時沒有向後相容性保證。為了保證向後相容性，您必須固定到特定 `<major.minor.patch>` 標籤，因為這些標籤是不可變的；它們只會被推送一次。

## 使用特定版本和標籤
<a name="cliv2-docker-upgrade"></a>

官方 AWS CLI 第 2 版映像具有多個您可以使用的版本，從版本 開始`2.0.6`。若要執行第 2 AWS CLI 版的特定版本，請將適當的標籤附加到您的`docker run`命令。第一次使用 `docker run` 命令搭配標籤時，會將該標籤的最新映像下載到您的電腦。後續每次使用 `docker run` 搭配該標籤命令時，都會從您的本機複本執行。

您可以使用兩種類型的標籤：
+ `latest` – 定義映像的最新版本 第 2 AWS CLI 版。建議您在需要 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。如果您計劃在生產環境中使用官方映像，我們建議您使用 第 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
  ```

------

## 更新至最新的官方映像
<a name="cliv2-docker-update"></a>

由於最新的映像只有在您第一次使用 `docker run` 命令時才會下載到您的電腦，因此您需要手動提取更新的映像檔。若要手動更新至最新版本，建議您提取標記 `latest` 的映像檔。提取映像會將最新版本下載到您的電腦。

------
#### [ Amazon ECR Public ]

```
$ docker pull public.ecr.aws/aws-cli/aws-cli:latest
```

------
#### [ Docker Hub ]

```
$ docker pull amazon/aws-cli:latest
```

------

## 分享主機檔案、憑證、環境變數和組態
<a name="cliv2-docker-share-files"></a>

由於第 2 AWS CLI 版是在容器中執行，因此 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 參考指南](https://docs.docker.com/storage/volumes/)》。

**注意**  
如需關於 `config` 與 `credentials` 檔案的資訊，請參閱 [中的組態和登入資料檔案設定 AWS CLI](cli-configure-files.md)。

### 範例 1：提供憑證和組態
<a name="cliv2-docker-share-files-config"></a>

在此範例中，我們在執行 `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 檔案下載到主機系統
<a name="cliv2-docker-share-files-s3"></a>

對於某些第 2 AWS CLI 版命令，您可以從容器中的主機系統讀取檔案，或將檔案從容器寫入主機系統。

在這個範例中，我們透過將目前的工作目錄掛載到容器的 `/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
```

**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\$1PROFILE 環境變數
<a name="cliv2-docker-share-files-envvars"></a>

您可以使用 `-e` 旗標呼叫特定系統的環境變數。呼叫您要使用的每個環境變數。在此範例中，我們在執行 `s3 ls` 命令時提供主機憑證、組態和 *AWS\$1PROFILE* 環境變數，以列出您在 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
```

**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 命令
<a name="cliv2-docker-aliases"></a>

若要縮短 `docker run` 命令，建議您使用作業系統的功能在 Linux 和 macOS 中建立 [https://www.linux.com/topic/desktop/understanding-linux-links/](https://www.linux.com/topic/desktop/understanding-linux-links/) (符號連結) 或 [https://www.linux.com/topic/desktop/aliases-diy-shell-commands/](https://www.linux.com/topic/desktop/aliases-diy-shell-commands/)，或在 Windows 中建立 [https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/doskey](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/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 $*
  ```

  **Windows 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 $*
  ```

  **Windows 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 $*
  ```

  **Windows 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 $*
  ```

  **Windows 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 $*
  ```

  **Windows 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 $*
  ```

  **Windows 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
  ```

------

設定別名後，您可以從容器內執行第 2 AWS CLI 版，就像在主機系統上安裝一樣。

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