本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在內部 CloudShell建置 Docker 容器,並將其推送至 Amazon ECR儲存庫
本教學課程說明如何在 中定義和建置 Docker 容器, AWS CloudShell 並將其推送至 Amazon ECR儲存庫。
必要條件
您必須具有必要的許可,才能建立並推送至 Amazon ECR儲存庫。如需使用 Amazon 儲存庫的詳細資訊ECR,請參閱 Amazon ECR使用者指南 中的 Amazon ECR私有儲存庫。如需使用 Amazon 推送映像所需的許可的詳細資訊ECR,請參閱 Amazon ECR使用者指南 中的推送映像所需的IAM許可。
教學程序
下列教學課程概述如何使用 CloudShell 介面建置 Docker 容器,並將其推送至 Amazon ECR儲存庫。
在主目錄中建立新資料夾。
mkdir ~/docker-cli-tutorial
導覽至您建立的資料夾。
cd ~/docker-cli-tutorial
建立空的 Dockerfile。
touch Dockerfile
使用文字編輯器,例如
nano Dockerfile
,開啟 檔案並將下列內容貼到其中。# Dockerfile # Base this container on the latest Amazon Linux version FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Install the cowsay binary RUN dnf install --assumeyes cowsay # Default entrypoint binary ENTRYPOINT [ "cowsay" ] # Default argument for the cowsay entrypoint CMD [ "Hello, World!" ]
Dockerfile 現在已準備好建置。透過執行 建置容器
docker build
。使用 easy-to-type 名稱標記容器,以供未來命令使用。docker build --tag test-container .
請務必包含追蹤期間 (
.
)。您現在可以測試容器,以檢查其是否在 中正確執行 AWS CloudShell。
docker container run test-container
現在您擁有正常運作的 Docker 容器,您需要將其推送至 Amazon ECR儲存庫。如果您有現有的 Amazon ECR儲存庫,可以略過此步驟。
執行下列命令來建立本教學課程的 Amazon ECR儲存庫。
ECR_REPO_NAME=docker-tutorial-repo aws ecr create-repository --repository-name ${ECR_REPO_NAME}
建立 Amazon ECR儲存庫之後,您可以將 Docker 容器推送到該儲存庫。
執行下列命令以取得 Docker 的 Amazon ECR登入憑證。
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text) ECR_URL=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com aws ecr get-login-password | docker login --username AWS --password-stdin ${ECR_URL}
注意
如果AWS_REGION環境變數未在 中設定, CloudShell 或您想要與其他 中的資源互動 AWS 區域,請執行下列命令:
AWS_REGION=<your-desired-region>
使用目標 Amazon ECR儲存庫標記映像,然後將其推送至該儲存庫。
docker tag test-container ${ECR_URL}/${ECR_REPO_NAME} docker push ${ECR_URL}/${ECR_REPO_NAME}
如果您在嘗試完成本教學課程時遇到錯誤或遇到問題,請參閱本指南的疑難排解一節以取得協助。
清除
您現在已成功將 Docker 容器部署至 Amazon ECR儲存庫。若要從 AWS CloudShell 環境中移除您在本教學課程中建立的檔案,請執行下列命令。
cd ~ rm -rf ~/docker-cli-tutorial
刪除 Amazon ECR儲存庫。
aws ecr delete-repository --force --repository-name ${ECR_REPO_NAME}