wrangler deploy を実行するとき、Wrangler 設定 の image 属性に Dockerfile へのパスを指定すると、Wrangler は Docker を使ってローカルでコンテナイメージをビルドし、Cloudflare が運用するレジストリへプッシュします。
このレジストリは Cloudflare アカウントと統合され、R2 上にあります。イメージのプッシュとプルの認証は、どちらも Cloudflare が自動で処理します。
Dockerfile へのパスを指定するだけです。
{
"containers": [
{
"image": "./Dockerfile"
}
]
}[[containers]]
image = "./Dockerfile"wrangler deploy で Worker をデプロイします。ほかのイメージ管理は不要です。
以降のデプロイでは、Wrangler は変更があったイメージレイヤーだけをプッシュします。容量と時間を節約できます。
Containers は、registry.cloudflare.com の Cloudflare 管理レジストリ、Docker Hub ↗、Amazon ECR ↗、Google Artifact Registry ↗ のイメージに対応します。
公開 Docker Hub イメージを使うには、Wrangler 設定の image に、完全修飾の Docker Hub イメージ参照を指定します。
例:
{
"containers": [
{
"image": "docker.io/<NAMESPACE>/<REPOSITORY>:<TAG>"
}
]
}[[containers]]
image = "docker.io/<NAMESPACE>/<REPOSITORY>:<TAG>"公開 Docker Hub イメージでは、レジストリ設定は不要です。
非公開 Docker Hub イメージは、次に説明する非公開レジストリ設定の流れを使います。
Docker Hub の認証情報を設定済みの場合、公開イメージと非公開イメージの両方のプルにその認証情報を使います。
Docker Hub、Amazon ECR、Google Artifact Registry の非公開イメージを使うには、レジストリドメインに対して wrangler containers registries configure を実行します。
Wrangler はシークレットの入力を求め、Secrets Store に保存します。Secrets Store のストアがまだない場合は、先に作成するよう求められます。
シークレットの名前付けや再利用には --secret-name、特定の Secrets Store ストアを対象にするには --secret-store-id、非対話実行には --skip-confirmation を使います。CI またはスクリプトでは、stdin 経由でシークレットを渡します。
Wrangler で Docker Hub を設定するときの値は次のとおりです。
- レジストリドメイン:
docker.io - ユーザー名フラグ:
--dockerhub-username=<YOUR_DOCKERHUB_USERNAME> - シークレット: 読み取り専用アクセスの Docker Hub 個人用アクセストークン
Docker Hub の個人用アクセストークンを作成するには:
- Docker Home ↗ にサインインします。
- Account settings > Personal access tokens を開きます。
- Generate new token を選びます。
- トークンに Read アクセスを付与し、トークン値をコピーします。
対話実行:
npx wrangler containers registries configure docker.io --dockerhub-username=<YOUR_DOCKERHUB_USERNAME>yarn wrangler containers registries configure docker.io --dockerhub-username=<YOUR_DOCKERHUB_USERNAME>pnpm wrangler containers registries configure docker.io --dockerhub-username=<YOUR_DOCKERHUB_USERNAME>CI またはスクリプト:
printf '%s' "$DOCKERHUB_PAT" | npx wrangler containers registries configure docker.io --dockerhub-username=<YOUR_DOCKERHUB_USERNAME> --secret-name=<SECRET_NAME> --skip-confirmationレジストリを設定したあと、上と同じ完全修飾の Docker Hub イメージ参照を使います。
Wrangler で Amazon ECR を設定するときの値は次のとおりです。
- レジストリドメイン:
<AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com - アクセスキーフラグ:
--aws-access-key-id=<AWS_ACCESS_KEY_ID> - シークレット: 対応する AWS シークレットアクセスキー
公開 ECR イメージはサポートされません。
必要な認証情報を作るには、読み取り専用ポリシーを持つ IAM ユーザーを作成します。次の例は、AWS アカウント 123456789012 の us-east-1 にあるすべてのイメージリポジトリへのアクセスを許可します。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["ecr:GetAuthorizationToken"],
"Effect": "Allow",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage"
],
// arn:${Partition}:ecr:${Region}:${Account}:repository/${Repository-name}
"Resource": [
"arn:aws:ecr:us-east-1:123456789012:repository/*"
// "arn:aws:ecr:us-east-1:123456789012:repository/example-repo"
]
}
]
}IAM ユーザーを作成したあと、その認証情報で Wrangler にレジストリを設定します。ストアがまだない場合、Wrangler は Secrets Store のストア作成を求め、シークレットをそこに保存します。
対話実行:
npx wrangler containers registries configure <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com --aws-access-key-id=<AWS_ACCESS_KEY_ID>yarn wrangler containers registries configure <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com --aws-access-key-id=<AWS_ACCESS_KEY_ID>pnpm wrangler containers registries configure <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com --aws-access-key-id=<AWS_ACCESS_KEY_ID>CI またはスクリプト:
printf '%s' "$AWS_SECRET_ACCESS_KEY" | npx wrangler containers registries configure <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com --aws-access-key-id=<AWS_ACCESS_KEY_ID> --secret-name=<SECRET_NAME> --skip-confirmationレジストリを設定したあと、Wrangler 設定で完全修飾の Amazon ECR イメージ参照を使います。
{
"containers": [
{
"image": "<AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<REPOSITORY>:<TAG>"
}
]
}[[containers]]
image = "<AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<REPOSITORY>:<TAG>"Wrangler で Google Artifact Registry を設定するときの値は次のとおりです。
- レジストリドメイン:
<REGION>-docker.pkg.dev - Google サービスアカウントのメールフラグ:
--gar-email=<SERVICE_ACCOUNT_EMAIL> - シークレット: サービスアカウントの JSON キー
公開側の認証情報は、--gar-email で渡すサービスアカウントのメールです。サービスアカウントキーの client_email フィールドと一致する必要があります。
非公開側の認証情報は、サービスアカウントの JSON キーです。
stdin(ファイルパス、生 JSON、または base64)または対話プロンプト(ファイルパスまたは base64)で渡します。
Wrangler はキーを base64 エンコードして Secrets Store に保存します。
必要な認証情報を作るには、Artifact Registry Reader ロールを持つサービスアカウントを作成し、その JSON キーをダウンロードします。
- Google Cloud console ↗ で IAM & Admin > Service Accounts を開きます。
- Create service account を選び、名前、ID、任意の説明を入力します。
- サービスアカウントに Artifact Registry Reader ロールを付与し、Done を選びます。
- サービスアカウントを選び、Keys タブを開きます。
- Add key > Create new key を選び、JSON を選んで Create を選びます。キーファイルがマシンにダウンロードされます。
対話実行: Wrangler はキーの入力を求めます。ファイルパスまたは base64 エンコードした JSON を入力します。
npx wrangler containers registries configure <REGION>-docker.pkg.dev --gar-email=<SERVICE_ACCOUNT_EMAIL>yarn wrangler containers registries configure <REGION>-docker.pkg.dev --gar-email=<SERVICE_ACCOUNT_EMAIL>pnpm wrangler containers registries configure <REGION>-docker.pkg.dev --gar-email=<SERVICE_ACCOUNT_EMAIL>CI またはスクリプト:
stdin 経由でキーを渡します(生 JSON または base64 のキー内容、またはキーファイルへのパス)。
cat <PATH_TO_KEY> | npx wrangler containers registries configure <REGION>-docker.pkg.dev --gar-email=<SERVICE_ACCOUNT_EMAIL> --secret-name=<SECRET_NAME> --skip-confirmationキーをすでに Secrets Store に保存している場合は、既存のシークレットを参照し、キーは省略します。
npx wrangler containers registries configure <REGION>-docker.pkg.dev --gar-email=<SERVICE_ACCOUNT_EMAIL> --secret-name=<EXISTING_SECRET_NAME> --skip-confirmationレジストリを設定したあと、Wrangler 設定で完全修飾の Google Artifact Registry イメージ参照を使います。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"containers": [
{
"image": "<REGION>-docker.pkg.dev/<PROJECT_ID>/<REPOSITORY>/<IMAGE>:<TAG>"
}
]
}[[containers]]
image = "<REGION>-docker.pkg.dev/<PROJECT_ID>/<REPOSITORY>/<IMAGE>:<TAG>"別のレジストリプロバイダーの事前ビルド済みイメージを使う場合は、先にローカルに存在することを確認してから、Cloudflare Registry へプッシュします。
docker pull <PUBLIC_IMAGE>
docker tag <PUBLIC_IMAGE> <IMAGE>:<TAG>Wrangler には、Cloudflare Registry へイメージをプッシュするコマンドがあります。
npx wrangler containers push <IMAGE>:<TAG>yarn wrangler containers push <IMAGE>:<TAG>pnpm wrangler containers push <IMAGE>:<TAG>または、wrangler containers build に -p フラグを付けて、ビルドとプッシュを 1 ステップで行えます。
npx wrangler containers build -p -t <TAG> .yarn wrangler containers build -p -t <TAG> .pnpm wrangler containers build -p -t <TAG> .このコマンドはイメージレジストリ URI を出力します。Wrangler 設定で使えます。
{
"containers": [
{
"image": "registry.cloudflare.com/<YOUR_ACCOUNT_ID>/<IMAGE>:<TAG>"
}
]
}[[containers]]
image = "registry.cloudflare.com/<YOUR_ACCOUNT_ID>/<IMAGE>:<TAG>"継続的インテグレーション環境でビルドしたイメージを使うには、wrangler をインストールしたあと、--push フラグ付きの wrangler containers build、または wrangler containers push コマンドでイメージをビルドしてプッシュします。
イメージのサイズは、Container に設定した インスタンスタイプ で利用できるディスク容量によって制限されます。
容量を空けるには wrangler containers images delete でイメージを削除します。ただし、削除したイメージを使う以前のバージョンへ Worker を戻すと、エラーになります。