在 Amazon 的生命週期中移動圖像 ECR - Amazon ECR

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

在 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
  1. 使用最新的 Amazon Linux 2023 AMI 啟動執行個體。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的啟動執行個體

  2. 連線到您的執行個體。如需詳細資訊,請參閱 Amazon EC2 使用者指南的 Connect 到 Linux 執行個體

  3. 更新已安裝的套裝服務,並在執行個體上封裝快取。

    sudo yum update -y
  4. 安裝最新的 Docker Community Edition 套裝服務。

    sudo yum install docker
  5. 啟動 Docker 服務。

    sudo service docker start
  6. ec2-user 新增至 docker 群組,讓您可以在不使用 sudo 的情況下執行 Docker 命令。

    sudo usermod -a -G docker ec2-user
  7. 登出並重新登入,以取得新的 docker 群組許可。您可以關閉目前的SSH終端機視窗,然後以新的執行個體重新連線至執行個體來達成此目的。您的新SSH工作階段將具有適當的docker群組權限。

  8. 驗證 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 映像
  1. 建立稱為 Dockerfile 的檔案。Dockerfile 是一種資訊清單,說明用於您 Docker 映像的基本映像,以及您要安裝並在其上執行的項目。如需 Dockerfile 的詳細資訊,請前往「Dockerfile 參考」。

    touch Dockerfile
  2. 編輯您剛建立的 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 伺服器。

  3. 從 Dockerfile 建置 Docker 映像。

    注意

    在下列命令中,有些 Docker 版本可能需要 Dockerfile 的完整路徑,而不是下面所示的相對路徑。

    docker build -t hello-world .
  4. 列出您的容器映像。

    docker images --filter reference=hello-world

    輸出:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       194MB
  5. 執行新建置的映像。-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" 訊息。

  6. 開啟瀏覽器,然後指向執行 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!" 陳述式。

  7. 輸入 Ctrl + c,以停止 Docker 容器。

步驟 2:建立儲存庫

現在,您已經有了要推送到 Amazon 的映像ECR,您必須創建一個存儲庫來保存它。在此範例中,您建立一個稱為 hello-repository 的儲存庫,以在稍後推送 hello-world:latest 映像。若要建立一個儲存庫,請執行下列命令:

aws ecr create-repository \ --repository-name hello-repository \ --region region

步驟 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 aws_account_id.dkr.ecr.region.amazonaws.com
  • 得到-ECRLoginCommand(AWS Tools for Windows PowerShell)

    (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

第 4 步:將圖像推送到 Amazon ECR

現在,您可以將映像推送到您在上一節中創建的 Amazon ECR 存儲庫。使用在符合下列必dockerCLI要條件之後推送映像:

  • 已安裝的docker最低版本:1.7。

  • Amazon ECR 授權令牌配置了docker login.

  • Amazon ECR 儲存庫存在,且使用者可以存取推送到儲存庫。

在那些必要條件滿足後,您可推送映像至您帳戶預設登錄檔中新建立的儲存庫。

標記並將圖像推送到 Amazon ECR
  1. 列出您在本機儲存的映像以識別欲標記與推送的映像。

    docker images

    輸出:

    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
  2. 標記映像以推送至您的儲存庫。

    docker tag hello-world:latest aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
  3. 推送映像。

    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 for aws_account_id.dkr.region.amazonaws.com/hello-repository:latest

步驟 6:刪除映像

如果您在其中一個儲存庫中不再需要映像檔,可以刪除該映像檔。若要刪除影像,請指定影像所在的儲存庫,以及影像的imageDigestimageTag或值。下列範例會刪除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