本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon 的生命週期中移動圖像 ECR
如果您是第一次使ECR用 Amazon,請使用 Docker CLI 和以下步驟 AWS CLI 來建立範例映像、對預設登錄進行驗證,然後建立私有存放庫。然後將映像推送到私有存儲庫並從中提取圖像。當您完成範例影像時,請刪除範例影像和存放庫。
若要使用 AWS Management Console 而不是 AWS CLI,請參閱建立 Amazon ECR私有儲存庫以存放映像。
如需有關可用於管理 AWS 資源的其他工具 (包括不同 AWS SDKs工IDE具組和 Windows PowerShell 命令列工具) 的詳細資訊,請參閱 http://aws.amazon.com/tools/
必要條件
如果您尚未安裝最新版 AWS CLI 和 Docker,並且可以使用,請使用下列步驟來安裝這兩個工具。
安裝 AWS CLI
要 AWS CLI 與 Amazon 一起使用ECR,請安裝最新 AWS CLI 版本。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。
安裝 Docker
Docker 可在多個不同的作業系統上使用,包括大部分的現代 Linux 發行版本,例如 Ubuntu,甚至是 macOS 和 Windows。如需如何在特定作業系統上安裝 Docker 的詳細資訊,請前往「Docker 安裝指南
您不需要本機開發系統,就能使用 Docker。如果您EC2已經在使用 Amazon,則可以啟動 Amazon Linux 2023 實例並安裝 Docker 以開始使用。
如果您已經安裝 Docker,請跳到「步驟 1:建立 Docker 映像」。
使用 Amazon Linux 2023 在 Amazon EC2 實例上安裝碼頭 AMI
-
使用最新的 Amazon Linux 2023 AMI 啟動執行個體。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的啟動執行個體。
-
連線到您的執行個體。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的 Connect 到 Linux 執行個體。
-
更新已安裝的套裝服務,並在執行個體上封裝快取。
sudo yum update -y
-
安裝最新的 Docker Community Edition 套裝服務。
sudo yum install docker
-
啟動 Docker 服務。
sudo service docker start
-
將
ec2-user
新增至docker
群組,讓您可以在不使用sudo
的情況下執行 Docker 命令。sudo usermod -a -G docker ec2-user
-
登出並重新登入,以取得新的
docker
群組許可。您可以關閉目前的SSH終端機視窗,然後以新的執行個體重新連線至執行個體來達成此目的。您的新SSH工作階段將具有適當的docker
群組權限。 -
驗證
ec2-user
可以在不使用sudo
的情況下執行 Docker 命令。docker info
注意
在某些情況下,您可能需要重新啟動執行個體,才能提供
ec2-user
存取 Docker 常駐程式的許可。如果您看到下列錯誤,請嘗試重新啟動執行個體:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
步驟 1:建立 Docker 映像
在此步驟中,您會建立簡單 Web 應用程式的 Docker 映像檔,並在本機系統或 Amazon EC2 執行個體上進行測試。
建立簡單 Web 應用程式的 Docker 映像
-
建立稱為
Dockerfile
的檔案。Dockerfile 是一種資訊清單,說明用於您 Docker 映像的基本映像,以及您要安裝並在其上執行的項目。如需 Dockerfile 的詳細資訊,請前往「Dockerfile 參考」。 touch Dockerfile
-
編輯您剛建立的
Dockerfile
,並新增下列內容。FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Install dependencies RUN yum update -y && \ yum install -y httpd # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \ echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh
這個碼頭文件使用 Amazon 公共 Amazon Linux 2 託管在亞馬遜ECR公共圖像。
RUN
指令會更新套件快取,並安裝 Web 伺服器的一些軟體套件服務,然後寫入 "Hello World!" 內容至 Web 伺服器文件根目錄。EXPOSE
指令會公開容器上的連接埠 80,而CMD
指令會啟動 Web 伺服器。 -
從 Dockerfile 建置 Docker 映像。
注意
在下列命令中,有些 Docker 版本可能需要 Dockerfile 的完整路徑,而不是下面所示的相對路徑。
docker build -t hello-world .
-
列出您的容器映像。
docker images --filter reference=hello-world
輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 194MB
-
執行新建置的映像。
-p 80:80
選項會將容器上的公開連接埠 80 映射至主機系統上的連接埠 80。如需 docker run 的詳細資訊,請前往「Docker run 參考」。 docker run -t -i -p 80:80 hello-world
注意
Apache Web 伺服器中的輸出會顯示在終端機視窗中。您可以忽略 "
Could not reliably determine the fully qualified domain name
" 訊息。 -
開啟瀏覽器,然後指向執行 Docker 並託管容器的伺服器。
-
如果您正在使用EC2執行個體,這是伺服器的 Pub lic DNS 值,這與您用來連線執行個體的位址相同SSH。請確定您執行個體的安全群組允許連接埠 80 上的入站流量。
-
如果您在本機執行 Docker,請將瀏覽器指向 http://localhost/
。 -
如果您在 Windows 或 Mac 計算機docker-machine上使用,請使用該docker-machine ip命令找到託管 Docker 的 VirtualBox 虛擬機器的 IP 地址,替代
machine-name
使用您正在使用 docker 機器的名稱。docker-machine ip
machine-name
您應該會看到網頁,內含您的 "Hello World!" 陳述式。
-
-
輸入 Ctrl + c,以停止 Docker 容器。
步驟 2:建立儲存庫
現在,您已經有了要推送到 Amazon 的映像ECR,您必須創建一個存儲庫來保存它。在此範例中,您建立一個稱為 hello-repository
的儲存庫,以在稍後推送 hello-world:latest
映像。若要建立一個儲存庫,請執行下列命令:
aws ecr create-repository \ --repository-name
hello-repository
\ --regionregion
步驟 3:對您的預設登錄進行身份驗證
安裝並設定之後 AWS CLI,CLI請向您的預設登錄驗證 Docker。這樣,該docker命令可以通過 Amazon 推拉圖像ECR。提 AWS CLI 供簡化驗證程序的get-login-password命令。
要使用向 Amazon ECR 註冊表驗證 Docker get-login-password,請運行該aws ecr get-login-password命令。將身份驗證令牌傳遞給命docker login令時,請使用用戶名AWS
的值並指定URI要對其進行身份驗證的 Amazon ECR 註冊表。如果是向多個登錄進行驗證,您必須針對每個登錄重複此命令。
重要
若您收到錯誤,請安裝或升級至最新版本的 AWS CLI。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface。
-
get-login-password (AWS CLI)
aws ecr get-login-password --region
region
| docker login --username AWS --password-stdin
.dkr.ecr.aws_account_id
region
.amazonaws.com -
得到-ECRLoginCommand(AWS Tools for Windows PowerShell)
(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin
.dkr.ecr.aws_account_id
region
.amazonaws.com
第 4 步:將圖像推送到 Amazon ECR
現在,您可以將映像推送到您在上一節中創建的 Amazon ECR 存儲庫。使用在符合下列必dockerCLI要條件之後推送映像:
-
已安裝的docker最低版本:1.7。
-
Amazon ECR 授權令牌配置了docker login.
-
Amazon ECR 儲存庫存在,且使用者可以存取推送到儲存庫。
在那些必要條件滿足後,您可推送映像至您帳戶預設登錄檔中新建立的儲存庫。
標記並將圖像推送到 Amazon ECR
-
列出您在本機儲存的映像以識別欲標記與推送的映像。
docker images
輸出:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
-
標記映像以推送至您的儲存庫。
docker tag hello-world:latest
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository -
推送映像。
docker push
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository:latest輸出:
The push refers to a repository [
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository] (len: 1) e9ae3c220b23: Pushed a6785352b25c: Pushed 0998bf8fb9e9: Pushed 0a85502c06c9: Pushed latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636EXAMPLE size: 6774
第 5 步:從 Amazon 拉圖像 ECR
將映像推送到 Amazon ECR 儲存庫之後,您可以從其他位置提取映像。符合下列先決條件後,使用dockerCLI來提取影像:
-
已安裝的docker最低版本:1.7。
-
Amazon ECR 授權令牌配置了docker login.
-
Amazon 存ECR放庫存在,使用者可以存取從儲存庫中提取。
在滿足那些必要條件後,您可提取您的映像。要從 Amazon 提取示例圖像ECR,請運行以下命令:
docker pull
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository:latest
輸出:
latest: Pulling from hello-repository 0a85502c06c9: Pull complete 0998bf8fb9e9: Pull complete a6785352b25c: Pull complete e9ae3c220b23: Pull complete Digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636EXAMPLE Status: Downloaded newer image foraws_account_id
.dkr.region
.amazonaws.com/hello-repository:latest
步驟 6:刪除映像
如果您在其中一個儲存庫中不再需要映像檔,可以刪除該映像檔。若要刪除影像,請指定影像所在的儲存庫,以及影像的imageDigest
值imageTag
或值。下列範例會刪除hello-repository
儲存庫中含有 image 標籤的影像latest
。若要從儲存庫中刪除範例影像,請執行下列命令:
aws ecr batch-delete-image \ --repository-name hello-repository \ --image-ids imageTag=latest \ --region
region
步驟 7:刪除儲存庫
如果您不再需要整個影像儲存庫,您可以刪除儲存庫。下列範例會使用--force
旗標來刪除包含影像的儲存庫。若要刪除包含映像的儲存庫 (以及其中所有的映像),您可執行以下命令:
aws ecr delete-repository \ --repository-name hello-repository \ --force \ --region
region