為私有 Docker 映像檔設定 Amazon ECS 容器執行個體 - Amazon Elastic Container Service

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

為私有 Docker 映像檔設定 Amazon ECS 容器執行個體

Amazon ECS 容器代理程式可以使用基本身份驗證,透過私有登錄進行驗證。當您啟用私有登錄檔身分驗證時,您可以使用您任務定義中的私有 Docker 影像。只有使用EC2啟動類型的工作才支援此功能。

啟用私人登錄驗證的另一種方法,會用 AWS Secrets Manager 來安全地儲存您的私人登錄認證,然後在容器定義中參考它們。這可讓您的任務使用來自私有儲存庫的映像。此方法支援使用EC2或 Fargate 啟動類型的工作。如需詳細資訊,請參閱在 Amazon 中使用非AWS 容器圖像 ECS

Amazon ECS 容器代理程式會在啟動時尋找兩個環境變數:

  • ECS_ENGINE_AUTH_TYPE 可指定要傳送之身分驗證資料的類型。

  • ECS_ENGINE_AUTH_DATA 包含實際身分驗證的登入資料。

Amazon ECS 優化的 Linux 變體會在容器執行個體啟動時AMI掃描/etc/ecs/ecs.config檔案中是否有這些變數,以及每次啟動服務時 (使用命sudo start ecs令)。AMIs未經 Amazon ECS 優化的應將這些環境變量存儲在文件中,並將其與--env-file path_to_env_file選項一起傳遞給啟動容器代理的docker run命令。

重要

我們不建議您在執行個體啟動時EC2使用 Amazon 使用者資料插入這些身份驗證環境變數,也不建議您將這些身份驗證環境變數傳遞給docker run命令。--env這些方法不適合用於敏感性資料,例如身分驗證登入資料。如需將安全地將身分驗證登入資料新增至容器執行個體的詳細資訊,請參閱 在 Amazon S3 中存儲亞馬遜ECS容器實例配置

身分驗證格式

私有登錄檔身分驗證有兩種可用的格式,dockercfgdocker

dockercfg 身分驗證格式

dockercfg 格式使用存放在執行 docker login 命令時建立之組態檔中的身分驗證資訊。您可以透過在您的本機系統上執行 docker login,輸入您的登錄使用者名稱、密碼及電子郵件地址來建立此檔案。您也可以登入容器執行個體,並在該處執行命令。根據您的 Docker 版本,這個檔案會做為 ~/.dockercfg~/.docker/config.json 儲存。

cat ~/.docker/config.json

輸出:

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "zq212MzEXAMPLE7o6T25Dk0i"
    }
  }
}
重要

較新版本的 Docker 會如上所示,使用外部 auths 物件建立組態檔。Amazon ECS 代理程式僅支援以下格式的dockercfg身份驗證資料,而不支援auths物件。如果您已安裝 jq 公用程式,即可使用以下命令擷取此資料:cat ~/.docker/config.json | jq .auths

cat ~/.docker/config.json | jq .auths

輸出:

{
  "https://index.docker.io/v1/": {
    "auth": "zq212MzEXAMPLE7o6T25Dk0i",
    "email": "email@example.com"
  }
}

在上述範例中,應將下列環境變數新增至 Amazon ECS 容器代理程式在執行時期載入的環境變數檔案 (ECS針/etc/ecs/ecs.config對 Amazon 最佳化AMI)。如果您未使用 Amazon ECS 優化,而AMI且您要使用手動啟動代理程式docker run,請在啟動代理程式時使用--env-file path_to_env_file選項指定環境變數檔案。

ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}

您可以使用以下語法設定多個私有登錄檔:

ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example-01.com"},"repo.example-02.com":{"auth":"fQ172MzEXAMPLEoF7225DU0j","email":"email@example-02.com"}}
docker 身分驗證格式

docker格式會使用JSON代理程式應該用來驗證之登錄伺服器的表示法。它也包含了該登錄所需要的身分驗證參數 (例如該帳戶的使用者名稱、密碼和電子郵件地址)。對於 Docker Hub 帳戶,JSON表示如下所示:

{ "https://index.docker.io/v1/": { "username": "my_name", "password": "my_password", "email": "email@example.com" } }

在此範例中,下列環境變數應新增至 Amazon ECS 容器代理程式在執行時期載入的環境變數檔案 (ECS針/etc/ecs/ecs.config對 Amazon 最佳化AMI)。如果您未使用 Amazon ECS 優化AMI,並且您要使用手動啟動代理程式docker run,請在啟動代理程式時使用--env-file path_to_env_file選項指定環境變數檔案。

ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}

您可以使用以下語法設定多個私有登錄檔:

ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"username":"my_name","password":"my_password","email":"email@example-01.com"},"repo.example-02.com":{"username":"another_name","password":"another_password","email":"email@example-02.com"}}

程序

使用以下程序,開啟容器執行個體的私有登錄檔。

在 Amazon ECS 優化中啟用私有註冊表 AMI
  1. 使用登入您的容器執行個體SSH。

  2. 開啟 /etc/ecs/ecs.config 檔案,為您的登錄檔和帳戶新增 ECS_ENGINE_AUTH_TYPEECS_ENGINE_AUTH_DATA 值:

    sudo vi /etc/ecs/ecs.config

    此範例會驗證 Docker Hub 使用者帳戶:

    ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
  3. 檢查您的代理程式是否是使用 ECS_DATADIR 環境變數儲存其狀態:

    docker inspect ecs-agent | grep ECS_DATADIR

    輸出:

    "ECS_DATADIR=/data",
    重要

    若先前的命令並未傳回 ECS_DATADIR 環境變數,您必須停止任何在此容器執行個體上執行的任務,才能停止您的代理。較新的代理會使用 ECS_DATADIR 環境變數儲存其狀態,讓您可以在任務執行中時停止和啟動它們,而不會有任何問題。如需詳細資訊,請參閱更新 Amazon ECS 容器代理

  4. 停止 ecs 服務:

    sudo stop ecs

    輸出:

    ecs stop/waiting
  5. 重新啟動 ecs 服務。

    • 對於 Amazon ECS 優化的 Amazon Linux 2AMI:

      sudo systemctl restart ecs
    • 對於 Amazon ECS 優化的 Amazon LinuxAMI:

      sudo stop ecs && sudo start ecs
  6. (選擇性) 您可以查詢代理程式內部檢API查作業,以確認代理程式是否正在執行,並查看有關新容器執行個體的一些資訊。如需詳細資訊,請參閱Amazon ECS 容器內省

    curl http://localhost:51678/v1/metadata