Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

イメージ管理

最終更新 Markdown で表示Agent セットアップ

wrangler deploy 中にイメージをプッシュする

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 HubAmazon ECRGoogle Artifact Registry のイメージに対応します。

公開 Docker Hub イメージを使う

公開 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 経由でシークレットを渡します。

非公開 Docker Hub イメージを使う

Wrangler で Docker Hub を設定するときの値は次のとおりです。

  • レジストリドメイン: docker.io
  • ユーザー名フラグ: --dockerhub-username=<YOUR_DOCKERHUB_USERNAME>
  • シークレット: 読み取り専用アクセスの Docker Hub 個人用アクセストークン

Docker Hub の個人用アクセストークンを作成するには:

  1. Docker Home にサインインします。
  2. Account settings > Personal access tokens を開きます。
  3. Generate new token を選びます。
  4. トークンに Read アクセスを付与し、トークン値をコピーします。

対話実行:

npx 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 イメージ参照を使います。

非公開 Amazon ECR イメージを使う

Wrangler で Amazon ECR を設定するときの値は次のとおりです。

  • レジストリドメイン: <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com
  • アクセスキーフラグ: --aws-access-key-id=<AWS_ACCESS_KEY_ID>
  • シークレット: 対応する AWS シークレットアクセスキー

公開 ECR イメージはサポートされません。 必要な認証情報を作るには、読み取り専用ポリシーを持つ IAM ユーザーを作成します。次の例は、AWS アカウント 123456789012us-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>

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>"

非公開 Google Artifact Registry イメージを使う

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 キーをダウンロードします。

  1. Google Cloud consoleIAM & Admin > Service Accounts を開きます。
  2. Create service account を選び、名前、ID、任意の説明を入力します。
  3. サービスアカウントに Artifact Registry Reader ロールを付与し、Done を選びます。
  4. サービスアカウントを選び、Keys タブを開きます。
  5. Add key > Create new key を選び、JSON を選んで Create を選びます。キーファイルがマシンにダウンロードされます。

対話実行: Wrangler はキーの入力を求めます。ファイルパスまたは base64 エンコードした JSON を入力します。

npx 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>

または、wrangler containers build-p フラグを付けて、ビルドとプッシュを 1 ステップで行えます。

npx 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>"

CI でイメージをプッシュする

継続的インテグレーション環境でビルドしたイメージを使うには、wrangler をインストールしたあと、--push フラグ付きの wrangler containers build、または wrangler containers push コマンドでイメージをビルドしてプッシュします。

レジストリの制限

イメージのサイズは、Container に設定した インスタンスタイプ で利用できるディスク容量によって制限されます。

容量を空けるには wrangler containers images delete でイメージを削除します。ただし、削除したイメージを使う以前のバージョンへ Worker を戻すと、エラーになります。

役に立ちましたか?