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

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

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

如果您是第一次使用 Amazon ECR,請使用下列步驟搭配 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。如果您已在使用 Amazon EC2,則可以啟動 Amazon Linux 2023 執行個體,並安裝 Docker 以開始使用。

如果您已經安裝 Docker,請跳到「步驟 1:建立 Docker 映像」。

使用 Amazon Linux 2023 AMI 在 Amazon EC2 執行個體上 安裝 Docker
  1. 使用最新版 Amazon Linux 2023 AMI 啟動執行個體。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的啟動執行個體

  2. 連線到您的執行個體。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的連線至您的 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 終端機視窗中重新連接至執行個體。新的 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

    該 Dockerfile 使用在 Amazon ECR 公共上託管的 Amazon Linux 2 映像。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 執行個體,則這是伺服器的「公有 DNS」值,這是您使用 SSH 來連線至執行個體的同個地址。請確定您執行個體的安全群組允許連接埠 80 上的入站流量。

    • 如果您在本機執行 Docker,請將瀏覽器指向 http://localhost/

    • 如果您在 Windows 或 Mac 電腦上使用 docker-machine,則請使用 docker-machine ip 指令找到託管 Docker 之 VirtualBox VM 的 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,請驗證 Docker CLI 與您的預設登錄檔。docker 命令可以透過該方法使用 Amazon ECR 來推送和提取映像。 AWS CLI 提供get-login-password命令來簡化身分驗證程序。

若要使用 get-login-password 向 Amazon ECR 登錄檔驗證 Docker,請執行 aws ecr get-login-password 命令。將身分驗證字符傳遞給 docker login 命令時,使用 AWS 的值作為使用者名稱並指定您要驗證的 Amazon ECR 登錄檔 URI。如果是向多個登錄進行驗證,您必須針對每個登錄重複此命令。

重要

若您收到錯誤,請安裝或升級至最新版本的 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
  • Get-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 儲存庫。在符合下列先決條件之後,使用 docker CLI 推送映像:

  • 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 儲存庫後,您可以從其他位置提取映像。在符合下列先決條件之後,使用 docker CLI 提取映像:

  • 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:刪除映像

如果您不再需要其中一個儲存庫中的映像,則可以刪除映像。若要刪除映像,請指定其所在的儲存庫,以及映像的 imageTagimageDigest值。下列範例會刪除儲存hello-repository庫中具有映像標籤 的映像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