「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
コンテナインスタンスのプライベートレジストリの認証
Amazon ECS コンテナエージェントは、基本認証を使用して、Docker Hub などのプライベートレジストリで認証できます。プライベートレジストリ認証を有効にすると、タスク定義のプライベート Docker イメージを使用できます。この機能は、EC2 起動タイプを使用するタスクでのみサポートされています。
プライベートレジストリ認証を有効にする別の方法では、AWS Secrets Manager を使用して、プライベートレジストリ認証情報を安全に保存してから、コンテナの定義で参照します。これにより、プライベートリポジトリのイメージをタスクで使用できるようになります。このメソッドは、EC2 または Fargate 起動タイプのいずれかを使用するタスクをサポートします。詳細については、「タスクのプライベートレジストリの認証」を参照してください。
Amazon ECS コンテナエージェントでは、起動時に次の 2 つの環境変数を検索します。
-
ECS_ENGINE_AUTH_TYPE
。送信する認証データのタイプを指定します。 -
ECS_ENGINE_AUTH_DATA
。実際の認証情報が含まれます。
Amazon ECS-optimized AMI の Linux バリアントは、コンテナインスタンスの起動時とサービスの各起動時 (sudo start
ecs コマンドを使用) に、これらの変数を /etc/ecs/ecs.config
ファイル内でスキャンします。Amazon ECS 最適化されていない AMI では、これらの環境変数をファイルに保存し、--env-file
オプションを使用して、コンテナエージェントを起動する docker
run コマンドに渡す必要があります。
path_to_env_file
これらの認証環境変数を、Amazon EC2 ユーザーデータを使用してインスタンス起動時に挿入することや、--env
オプションを使用して docker run コマンドに渡すことはお勧めしません。これらの方法は、認証情報などの機密データには適していません。認証情報をコンテナインスタンスに安全に追加する方法については、「Amazon S3 にコンテナインスタンスの構成を保存する」を参照してください。
認証形式
プライベートレジストリ認証には、dockercfg
と docker
の 2 つの形式を使用できます。
dockercfg 認証形式
dockercfg
形式は、docker
login コマンドの実行時に作成した設定ファイルに保存されている認証情報を使用します。このファイルを作成するには、ローカルシステムで docker
login を実行し、レジストリのユーザー名、パスワード、および E メールアドレスを入力します。コンテナインスタンスにログインして、そこでコマンドを実行することもできます。Docker
のバージョンによって、ファイルは ~/.dockercfg
または ~/.docker/config.json
として保存されます。
cat ~/.docker/config.json
出力:
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "zq212MzEXAMPLE7o6T25Dk0i
"
}
}
}
Docker の新しいバージョンは、外部 auths
オブジェクトを使用して、上に示したような設定ファイルを作成します。Amazon ECS エージェントは、auths
オブジェクトを持たない、以下の形式の dockercfg
認証データのみをサポートします。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 コンテナエージェントが実行時にロードする環境変数ファイル (Amazon ECS-optimized AMI
の場合は /etc/ecs/ecs.config
) に追加する必要があります。Amazon ECS-optimized 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 表現を使用します。また、そのレジストリに必要な認証パラメータ (ユーザー名、パスワード、およびそのアカウントの
E メールアドレスなど) も含まれます。Docker Hub アカウントの場合、JSON 表現は次のようになります。
{ "https://index.docker.io/v1/": { "username": "
my_name
", "password": "my_password
", "email": "email@example.com
" } }
上記の例では、Amazon ECS コンテナエージェントが実行時にロードする環境変数ファイル (Amazon ECS-optimized AMI の場合は /etc/ecs/ecs.config
) に以下の環境変数を追加する必要があります。Amazon ECS-optimized 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-optimized AMI でプライベートレジストリを有効にするには
-
SSH を使用してコンテナインスタンスにログインします。
-
/etc/ecs/ecs.config
ファイルを開いて、レジストリとアカウントのECS_ENGINE_AUTH_TYPE
値とECS_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
"}} -
エージェントが
ECS_DATADIR
環境変数を使用して状態を保存しているかどうかを確認します。docker inspect ecs-agent | grep ECS_DATADIR
出力:
"ECS_DATADIR=/data",
重要 前のコマンドで
ECS_DATADIR
環境変数が返されない場合は、エージェントを停止する前に、このコンテナインスタンスで実行されているタスクをすべて停止する必要があります。より新しいエージェントはECS_DATADIR
環境変数を使用して状態を保存するため、タスクが実行中でも問題なく停止および起動できます。詳細については、「Amazon ECS コンテナエージェントの更新」を参照してください。 -
ecs
サービスを停止します。sudo stop ecs
出力:
ecs stop/waiting
-
ecs
サービスを再起動します。-
Amazon ECS-optimized Amazon Linux 2 AMI の場合:
sudo systemctl restart ecs
-
Amazon ECS-optimized Amazon Linux AMI の場合:
sudo stop ecs && sudo start ecs
-
-
(オプション) エージェント詳細分析 API オペレーションをクエリして、エージェントが実行されていることを確認し、新しいコンテナインスタンスに関する情報の一部を表示できます。詳細については、「Amazon ECS コンテナエージェントの詳細分析」を参照してください。
curl http://localhost:51678/v1/metadata