

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

# 使用 Amazon Elastic Container Registry
<a name="ecr-working"></a>

您可以直接從 VS Code 中的 AWS Explorer 存取 Amazon Elastic Container Registry (Amazon ECR) 服務，並使用它將程式映像推送到 Amazon ECR 儲存庫。若要開始使用，您需要執行下列步驟：

1. 建立一個 Dockerfile，其中包含建置映像檔所需的資訊。

1. 從該 Dockerfile 建置映像檔並標記映像檔以進行處理。

1. 在 Amazon ECR 執行個體內建立儲存庫。

1. 將映像檔推送到您的儲存庫。

## 先決條件
<a name="prereqs-awstoolkit-vscode-ecr"></a>

您需要完成這些步驟，才能從 VS Code Explorer 存取 Amazon ECR 服務。

### 建立 IAM 使用者
<a name="create-an-iam-user"></a>

您必須先提供登入資料，才能存取 AWS 服務，例如 Amazon ECR。這是為了讓服務可以判斷您是否具有存取其資源的許可。我們不建議您透過根 AWS 帳戶的登入資料 AWS 直接存取 。反之，請使用 AWS Identity and Access Management (IAM) 建立 IAM 使用者，然後將該使用者新增至具有管理許可的 IAM 群組。然後，您可以使用 AWS 特殊 URL 和 IAM 使用者的登入資料來存取 。

如果您註冊 ， AWS 但未自行建立 IAM 使用者，您可以使用 IAM 主控台建立一個使用者。

若要建立管理員使用者，請選擇下列其中一個選項。


****  

| 選擇一種管理管理員的方式 | 到 | 根據 | 您也可以 | 
| --- | --- | --- | --- | 
| 在 IAM Identity Center (建議) | 使用短期憑證存取 AWS。這與安全性最佳實務一致。有關最佳實務的資訊，請參閱 *IAM 使用者指南*中的 [IAM 安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。 | 請遵循 AWS IAM Identity Center 使用者指南的[入門](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html)中的說明。 | 透過在 AWS Command Line Interface 使用者指南中設定 [AWS CLI 以使用 來設定 AWS IAM Identity Center](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-sso.html)程式設計存取。 | 
| 在 IAM 中 (不建議使用) | 使用長期憑證存取 AWS。 | 請遵循《IAM 使用者指南》中[建立 IAM 使用者以進行緊急存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started-emergency-iam-user.html) 的指示。 | 請依照《IAM 使用者指南》中的[管理 IAM 使用者的存取金鑰](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html)設定以程式設計方式存取。 | 

若要以此新 IAM 使用者身分登入，請登出 AWS 主控台，然後使用下列 URL。在下列 URL 中，其中 *your\$1aws\$1account\$1id* 是沒有連字號 AWS 的帳號 （例如，如果 AWS 您的帳戶號碼是 `1234-5678-9012`，則 AWS 您的帳戶 ID 為 `123456789012`)：

```
https://your_aws_account_id.signin.aws.amazon.com/console/
```

輸入您剛才建立的 IAM 使用者名稱和密碼。登入時導覽列會顯示「*your\$1user\$1name* @ *your\$1aws\$1account\$1id*」。

如果您不希望登入頁面的 URL 包含 AWS 您的帳戶 ID，您可以建立帳戶別名。從 IAM 儀表板中，選擇**自訂**並輸入**帳戶別名**。這可以是您的公司名稱。如需詳細資訊，請參閱《IAM 使用者指南》中的[AWS 您的帳戶 ID 及其別名](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html)。

若要在建立帳戶別名後登入，請使用下列 URL：

```
https://your_account_alias.signin.aws.amazon.com/console/
```

若要驗證帳戶的 IAM 使用者的登入連結，請開啟 IAM 主控台，然後在儀表板的 **IAM users sign-in link (IAM 使用者登入連結)** 下方檢查。

如需 IAM 的詳細資訊，請參閱《[AWS Identity and Access Management 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)》。

### 安裝和設定 Docker
<a name="create-an-iam-user"></a>

您可以從安裝 Docker [引擎使用者指南中選取您偏好的作業系統，並遵循指示來安裝和設定 Docker](https://docs.docker.com/engine/install/)。

### 安裝和設定 AWS CLI 第 2 版
<a name="create-an-iam-user"></a>

從安裝、更新和解除安裝 AWS CLI 第 2 版使用者指南中選取您偏好的作業系統，以安裝和設定 CLI 第 2 版。 [AWS](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)

## 1. 建立 Dockerfile。
<a name="dockerfile-ecr-vsctoolkit"></a>

Docker 使用稱為 Dockerfile 的檔案來定義可在遠端儲存庫上推送和存放的映像。您必須先建立 Dockerfile，然後從該 Dockerfile 建置映像，才能將映像上傳至 ECR 儲存庫。

**建立 Dockerfile。**

1. 使用 Toolkit for VS Code Explorer 導覽至您要存放 Dockerfile 的目錄。

1. 建立稱為 **Dockerfile** 的新檔案。
**注意**  
VS 程式碼可能會提示您選取檔案類型或副檔名。如果發生這種情況，請選取**純文字**。Vs Code 具有「dockerfile」副檔名。不過，我們建議您不要使用它。這是因為副檔名可能會導致與特定版本的 Docker 或其他相關應用程式發生衝突。

**使用 VS 程式碼編輯 Dockerfile**

如果 Dockerfile 有副檔名，請開啟該檔案的內容 (按一下滑鼠右鍵) 選單，然後移除副檔名。

從 Dockerfile 中刪除副檔名後：

1. 直接在 VS 程式碼中開啟空的 Dockerfile。

1. 將下列範例的內容複製到 Dockerfile：  
**Example Dockerfile 映像檔範本**  

   ```
   FROM ubuntu:18.04
   
   # Install dependencies
   RUN apt-get update && \
    apt-get -y install apache2
   
   # Install apache and write hello world message
   RUN echo 'Hello World!' > /var/www/html/index.html
   
   # Configure apache
   RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
    echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
    echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ 
    echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ 
    chmod 755 /root/run_apache.sh
   
   EXPOSE 80
   
   CMD /root/run_apache.sh
   ```

   這是使用 Ubuntu 18.04 映像檔的 Dockerfile。**RUN** 指令會更新套件快取。安裝 Web 伺服器的軟體套件服務，然後寫入「Hello World\$1」 內容至 Web 伺服器的文件根目錄。**EXPOSE** 指令會公開容器上的連接埠 80，而 **CMD** 指令會啟動 Web 伺服器。

1. 儲存 Dockerfile。
**重要**  
請確定您的 Dockerfile 沒有連接至名稱的副檔名。具有副檔名的 Dockerfile 可能會導致與 Docker 或其他相關應用程式的某些版本發生衝突。

## 2. 從 Dockerfile 建置映像
<a name="build-docker-image"></a>

您建立的 Dockerfile 包含建置程式映像所需的資訊。您必須先建置映像，才能將該映像推送至 Amazon ECR 執行個體。

**從 Dockerfile 建置映像**

1. 使用 Docker CLI 或與您的 Docker 執行個體整合的 CLI，導覽至包含 Dockerfile 的目錄。

1. 執行 **Docker build** 命令來建置 Dockerfile 中定義的映像。

   ```
             docker build -t hello-world .
   ```

1. 執行 **Docker 映像**命令來驗證映像是否正確建立。

   ```
   docker images --filter reference=hello-world
   ```  
**Example 範例輸出：**  

   ```
   REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
   hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
   ```

1. 
**注意**  
此步驟並非建立或推送映像的必要步驟，但您可以查看程式映像在執行時的運作方式。

   若要執行新建置的映像，請使用 **Docker run** 命令。

   ```
   docker run -t -i -p 80:80 hello-world
   ```

   上述範例中指定的 **-p** 選項會將容器上的公開**連接埠 80** 映射至主機系統的**連接埠 80**。如果您在本機執行 Docker，請使用 Web 瀏覽器導覽至 [http：//localhost：80](http://localhost:80)。如果程式正確執行，則為「Hello World！」 隨即顯示 陳述式。

   如需 **Docker run** 命令的詳細資訊，請參閱 Docker 網站上的 [Docker run 參考資料](https://docs.docker.com/engine/reference/run/)。

## 3. 建立新的儲存庫
<a name="create-repository"></a>

若要將映像檔上傳到 Amazon ECR 執行個體，請建立可存放它的新儲存庫。

**建立新的 Amazon ECR 儲存庫**

1. 從 VS 程式碼**活動列**中，選擇 **AWS Toolkit 圖示**。

1. 展開 ** AWS Explorer** 選單。

1. 找到與 AWS 您的帳戶相關聯的預設 AWS 區域。然後，選取它以查看透過 Toolkit for VS 程式碼的服務清單。

1. 選擇 **ECR \$1** 選項以開始**建立新儲存庫**程序。

1. 依照提示完成程序。

1. 完成後，您可以從 AWS Explorer 功能表的 **ECR** 區段存取您的新儲存庫。

## 4. 推送、提取和刪除映像
<a name="push-image"></a>

從 Dockerfile 建立映像檔並建立儲存庫之後，您可以將映像檔推送到 Amazon ECR 儲存庫。此外，使用 AWS Explorer 搭配 Docker 和 AWS CLI，您可以執行下列動作：
+ 從儲存庫中提取映像檔。
+ 刪除儲存庫中儲存的映像檔。
+ 刪除您的儲存庫。

**使用預設登錄檔驗證 Docker**

在 Amazon ECR 和 Docker 執行個體之間交換資料時，需要進行身分驗證。若要向您的登錄檔驗證 Docker：

1. 開啟連接至 CLI AWS 執行個體的命令列作業系統。

1. 使用 **get-login-password** 方法來驗證您的私人 ECR 登錄檔。

   ```
   aws ecr get-login-password --region region | docker login --username AWS --password-stdin AWS_account_id.dkr.ecr.region.amazonaws.com
   ```
**重要**  
在上述命令中，您必須同時將 **region**和 更新**AWS\$1account\$1id**為 AWS 帳戶特有的資訊。

**標記並推送映像到您的儲存庫**

使用 執行個體驗證 Docker 之後 AWS，請將映像推送到您的儲存庫。

1. 使用 **Docker 映像**命令來檢視您儲存在本機的映像，並識別您要標記的映像。

   ```
   docker images
   ```  
**Example 範例輸出：**  

   ```
   REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
   hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
   ```

1. 使用 **Docker tag** 命令標記 Docker 映像檔。

   ```
   docker tag hello-world:latest AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
   ```

1. 使用 **Docker** 標籤命令將標記的映像推送到您的儲存庫。

   ```
   docker push AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
   ```  
**Example 範例輸出：**  

   ```
   The push refers to a repository [AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world] (len: 1)
   e9ae3c220b23: Pushed
   a6785352b25c: Pushed
   0998bf8fb9e9: Pushed
   0a85502c06c9: Pushed
   latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b size: 6774
   ```

標記的映像成功上傳至儲存庫後，它就會顯示在 AWS Explorer 功能表中。

**從 Amazon ECR 提取映像**
+ 您可以將映像檔提取到 **Docker tag** 命令的本機執行個體。

  ```
  docker pull AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
  ```  
**Example 範例輸出：**  

  ```
  The push refers to a repository [AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world] (len: 1)
  e9ae3c220b23: Pushed
  a6785352b25c: Pushed
  0998bf8fb9e9: Pushed
  0a85502c06c9: Pushed
  latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b size: 6774
  ```

**從 Amazon ECR 儲存庫刪除映像**

有兩種方法可從 VS 程式碼刪除映像。第一個方法是使用 AWS Explorer。

1. 從 AWS Explorer 展開 **ECR** 功能表

1. 展開您要從中刪除映像的儲存庫

1. 開啟內容選單 （按一下滑鼠右鍵），選擇與要刪除之影像相關聯的影像標籤

1. 選擇**刪除標籤...**選項，以刪除與該標籤相關聯的所有預存映像

**使用 CLI AWS 刪除映像**
+ 您也可以使用 **AWS ecr batch-delete-image** 命令刪除儲存庫中的映像檔。

  ```
  AWS ecr batch-delete-image \
        --repository-name hello-world \
        --image-ids imageTag=latest
  ```  
**Example 範例輸出：**  

  ```
  {
      "failures": [],
      "imageIds": [
          {
              "imageTag": "latest",
              "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b"
          }
      ]
  }
  ```

**從 Amazon ECR 執行個體刪除儲存庫**

有兩種方法可從 VS 程式碼刪除儲存庫。第一個方法是使用 AWS Explorer。

1. 從 AWS Explorer 展開 **ECR** 功能表

1. 開啟內容 （按一下滑鼠右鍵） 選單，選擇您要刪除的儲存庫

1. 選擇所選**儲存庫的刪除儲存庫...**選項

**從 CLI 刪除 Amazon ECR AWS 儲存庫**
+ 您可以使用 **AWS ecr delete-repository** 命令刪除儲存庫。
**注意**  
根據預設，您無法刪除包含映像的儲存庫。不過， **--force** 旗標允許此操作。

  ```
   AWS ecr delete-repository \
        --repository-name hello-world \
        --force
  ```  
**Example 範例輸出：**  

  ```
  {
      "failures": [],
      "imageIds": [
          {
              "imageTag": "latest",
              "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b"
          }
      ]
  }
  ```