使用 Amazon 彈性容器註冊表服務 AWS Cloud9 - AWS Cloud9

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

使用 Amazon 彈性容器註冊表服務 AWS Cloud9

您可以直接從 AWS Cloud9 IDE 中的 AWS 資源管理器訪問 Amazon Elastic Container Registry (Amazon ECR) 服務。您可以使用 Amazon ECR 將程式映像檔推送至 Amazon ECR 儲存庫。若要開始使用,請依照下列步驟執行:

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

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

  3. 建立位於 Amazon ECR 執行個體內的儲存庫。

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

必要條件

在您可以使用 AWS 工具組的 Amazon ECR 功能之前 AWS Cloud9,請先確定您符合這些先決條件。這些先決條件已預先安裝在適用於 AWS Cloud9 Amazon EC2 環境的 AWS Cloud9 IDE 中,且必須存取 Amazon ECR。

1. 建立 Dockerfile。

Docker 使用稱為 Dockerfile 的檔案來定義可以推送和儲存於遠端儲存庫上的映像檔。在您可以將映像檔上傳到 ECR 儲存庫之前,請先建立一個 Dockerfile,然後從該 Dockerfile 建置映像檔。

建立 Dockerfile。
  1. 若要導覽到要儲存 Dockerfile 的目錄,請在 AWS Cloud9 IDE 中的左側導覽列中選擇 Toggle Tree (切換樹狀檢視) 選項。

  2. 建立名為 Dockerfile 的新檔案。

    注意

    AWS Cloud9 IDE 可能會提示您選取檔案類型或檔案副檔名。如果發生這種情況,請選取純文字。 AWS Cloud9 IDE 有一個「碼頭文件」擴展名。不過,我們建議您不要使用它。這是因為副檔名可能會導致與特定版本的 Docker 或其他相關應用程式發生衝突。

使用 IDE 編輯碼頭文件 AWS Cloud9

如果 Dockerfile 有副檔名,請開啟該檔案的內容 (按一下滑鼠右鍵) 選單,然後移除副檔名。具有副檔名的 Dockerfile 可能會導致與 Docker 或其他相關應用程式的某些版本發生衝突。

從 Dockerfile 中刪除副檔名後:

  1. 直接在 AWS Cloud9 IDE 中打開空的碼頭文件。

  2. 將以下範例的內容複製到您的 Dockerfile 中。

    範例 Dockerfile 映像檔範本
    FROM ubuntu:22.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 22.04 圖像的碼頭文件。RUN 指令會更新套件快取。安裝 Web 伺服器的軟體套件服務,然後寫入「Hello World!」 內容至 Web 伺服器的文件根目錄。EXPOSE 指令會公開容器上的連接埠 80,而 CMD 指令會啟動 Web 伺服器。

  3. 儲存 Dockerfile。

2. 從 Dockerfile 建置映像檔

您建立的 Dockerfile 包含建置映像檔的必要資訊。將該映像檔推送到 Amazon ECR 執行個體之前,請先建立映像檔。

從 Dockerfile 建置映像檔
  1. 若要瀏覽至包含 Dockerfile 的目錄,請使用 Docker CLI 或與 Docker 執行個體整合的 CLI。

  2. 若要建置 Dockerfile 中定義的映像檔,請從與 Dockerfile 相同的目錄中運行 Docker build 命令。

    docker build -t hello-world .
  3. 若要驗證映像檔已正確建立,請執行 Docker images 命令。

    docker images --filter reference=hello-world

    輸出如下。

    REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
  4. 要運行基於 Ubuntu 22.04 的新構建的映像,請使用迴聲命令。

    注意

    建立或推送映像檔不需要此步驟。但是,您可以看到程式映像檔在運行時如何工作。

    FROM ubuntu:22.04 CMD ["echo", "Hello from Docker in Cloud9"]

    然後,運行並建置 Dockerfile。您必須從 Dockerfile 所在的目錄執行此命令。

    docker build -t hello-world . docker run --rm hello-world

    輸出如下。

    Hello from Docker in Cloud9

    如需 Docker run 命令的詳細資訊,請參閱 Docker 網站上的 Docker run 參考資料

3. 建立新的儲存庫

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

建立新的 Amazon ECR 儲存庫
  1. 從 AWS Cloud9 IDE 導覽列中,選擇「AWS 工具組」圖示

  2. 展開 AWS Explorer 選單。

  3. 找出與您關聯的預設值 AWS 區域 AWS 帳戶。然後,選擇它以查看通過 AWS Cloud9 IDE 的服務列表。

  4. 開啟 ECR 選項的內容選單 (按一下滑鼠右鍵),以啟動建立新儲存庫程序。然後,選取 Create Repository (建立儲存庫)。

  5. 要完成該過程,請按照提示進行操作。

  6. 程序完成後,您可以從「檔案總管」( AWS Explorer) 功能表的 ECR 區段存取新的存放庫。

4. 推送、提取和刪除映像檔

從 Dockerfile 建立映像檔並建立儲存庫之後,您可以將映像檔推送到 Amazon ECR 儲存庫。此外,將 AWS 資源管理器與 Docker 和 AWS CLI 一起使用,您可以執行以下操作:

  • 從儲存庫中提取映像檔。

  • 刪除儲存庫中儲存的映像檔。

  • 刪除您的儲存庫。

使用您的預設登錄檔驗證 Docker

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

  1. 在 AWS Cloud9 IDE 中開啟終端機。

  2. 使用此方get-login-password法向您的私人 ECR 登錄進行驗證,並輸入您的地區和 AWS 帳戶 ID。

    aws ecr get-login-password \ --region <region> \ | docker login \ --username AWS \ --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
    重要

    在上述命令中,將 regionAWS_account_id 取代為您 AWS 帳戶的特定資訊。有效的 region 值是 us-east-1

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

使用的執行個體驗證 Docker 之後 AWS,請將映像檔推送至您的存放庫。

  1. 使用 docker image 指令檢視儲存在本機的影像,並識別您要標記的影像。

    docker images

    輸出如下。

    REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
  2. 使用 Docker tag 命令標記 Docker 映像檔。

    docker tag hello-world:latest AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
  3. 使用 Docker push 命令將標記的映像檔推送到儲存庫。

    重要

    請確定本機儲存庫的名稱與 AWS Amazon EC2 儲存庫的名稱相同。在此範例中,兩個儲存庫都必須稱為 hello-world。有關使用 Docker 推送映像檔的詳細資訊,請參閱推送 Docker 映像檔

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

    輸出如下。

    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 工具組。 AWS 然後在 AWS Cloud9 IDE 的 AWS 資源管理器菜單中可見。

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

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

    輸出如下。

    azonaws.com/hello-world:latest latest: Pulling from hello-world Digest: sha256:e02c521fd65eae4ef1acb746883df48de85d55fc85a4172a09a124b11b339f5e Status: Image is up to date for 922327013870.dkr.ecr.us-west-2.amazonaws.com/hello-world.latest
從 Amazon ECR 儲存庫刪除映像檔

有兩種從 AWS Cloud9 IDE 刪除映像的方法。第一種方法是使用 AWS 資源管理器。

  1. 從 AWS 檔案總管中,展開 ECR 功能表。

  2. 展開您要從中刪除映像檔的儲存庫。

  3. 開啟與您要刪除的映像檔關聯的映像檔標籤的內容選單 (按一下滑鼠右鍵)。

  4. 若要刪除與該標記關聯的所有已儲存映像檔,請選擇 Delete Tag… (刪除標記...)。

使用 AWS CLI 刪除映像
  • 您也可以使用 AWS ecr batch-delete-image 指令從儲存庫中刪除影像。

    aws ecr batch-delete-image \ --repository-name hello-world \ --image-ids imageTag=latest

    輸出如下。

    { "failures": [], "imageIds": [ { "imageTag": "latest", "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b" } ] }
從您的 Amazon ECR 執行個體刪除儲存庫

有兩種從 AWS Cloud9 IDE 刪除存儲庫的方法。第一種方法是使用 AWS 資源管理器:

  1. 從 AWS 檔案總管中,展開 ECR 功能表。

  2. 開啟您要刪除之儲存庫的內容選單 (按一下滑鼠右鍵)。

  3. 選擇 Delete Repository… (刪除儲存庫...)。

從 CLI 刪除 Amazon ECR 儲存庫 AWS
  • 您可以使用 AWS ecr delete-repository 命令刪除儲存庫。

    注意

    如果不先刪除儲存庫中包含的映像檔,通常無法刪除儲存庫。然而,如果您新增 —force 旗標,則可在一個步驟內刪除儲存庫及其所有映像檔。

    aws ecr delete-repository \ --repository-name hello-world \ --force

    輸出如下。

    --repository-name hello-world --force { "repository": { "repositoryUri": "922327013870.dkr.ecr.us-west-2.amazonaws.com/hello-world", "registryId": "922327013870", "imageTagMutability": "MUTABLE", "repositoryArn": "arn:aws:ecr:us-west-2:922327013870:repository/hello-world", "repositoryName": "hello-world", "createdAt": 1664469874.0 } }