← Containers / containers / platform-details
Управление изображениями
Отправка образов во время wrangler deploy
При выполнении wrangler deploy, если вы зададите image атрибут в вашем Конфигурация Wrangler на путь к Dockerfile, Wrangler соберёт образ контейнера локально с помощью Docker, а затем отправит его в реестр, которым управляет Cloudflare.
Этот реестр интегрирован с вашей учётной записью Cloudflare и использует R2. Вся аутентификация выполняется автоматически
Cloudflare как при отправке, так и при получении образов.
Просто укажите путь к вашему Dockerfile:
{
"containers": [
{
"image": "./Dockerfile"
}
]
}[[containers]]
image = "./Dockerfile"И разверните Worker с помощью wrangler deploy. Никакого другого управления образом не требуется.
При последующих развёртываниях Wrangler отправляет только изменившиеся слои образа, что экономит место и время.
Использование готовых образов контейнеров
Containers поддерживают образы из управляемого реестра Cloudflare по адресу registry.cloudflare.com, Docker Hub ↗, Amazon ECR ↗, а также Google Artifact Registry ↗.
Использование публичных образов Docker Hub
Чтобы использовать публичный образ Docker Hub, задайте image на полностью определённую ссылку на образ Docker Hub в конфигурации Wrangler.
Например:
{
"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, Wrangler предложит сначала создать его.
Используйте --secret-name чтобы назвать секрет или использовать существующий, --secret-store-id чтобы указать конкретное хранилище Secrets Store, и --skip-confirmation для неинтерактивных запусков. В CI или скриптах передавайте секрет через stdin.
Использование приватных образов Docker Hub
Настройте Docker Hub в Wrangler, используя следующие значения:
- домен реестра:
docker.io - флаг имени пользователя:
--dockerhub-username=<YOUR_DOCKERHUB_USERNAME> - секрет: персональный токен доступа Docker Hub с доступом только для чтения
Чтобы создать личный токен доступа Docker Hub:
- Войдите в Docker Home ↗.
- Перейдите в Account settings > Персональные токены доступа.
- Выберите Создать новый токен.
- Предоставьте токену Чтение доступ, затем скопируйте значение токена.
Интерактивно:
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
Настройте Amazon ECR в Wrangler, используя следующие значения:
- домен реестра:
<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>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После настройки реестра укажите полный путь к образу Amazon ECR в конфигурации Wrangler:
{
"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
Настройте Google Artifact Registry в Wrangler, используя следующие значения:
- домен реестра:
<REGION>-docker.pkg.dev - Флаг email сервисного аккаунта Google:
--gar-email=<SERVICE_ACCOUNT_EMAIL> - секрет: JSON-ключ сервисного аккаунта
В качестве открытых учётных данных используется email сервисного аккаунта, который передаётся с помощью --gar-email. Он должен совпадать с client_email поле в ключе сервисного аккаунта.
В качестве закрытых учётных данных используется JSON-ключ сервисного аккаунта.
Передайте их через stdin (путь к файлу, необработанный JSON или base64) либо интерактивный запрос (путь к файлу или base64).
Wrangler сохраняет ключ в Secrets Store в кодировке base64.
Чтобы сгенерировать необходимые учётные данные, создайте сервисный аккаунт с Artifact Registry Reader роль и загрузите её JSON-ключ:
- В Google Cloud console ↗, перейдите в IAM & Admin > Сервисные аккаунты.
- Выберите Создание сервисного аккаунта, затем введите имя, ID и необязательное описание.
- Предоставьте сервисному аккаунту Artifact Registry Reader роль, затем выберите Готово.
- Выберите сервисный аккаунт, затем откройте Ключи на вкладке.
- Выберите Добавить ключ > Создать новый ключ, выберите JSON, затем выберите Создание. Файл ключа скачивается на ваш компьютер.
Интерактивно: Wrangler запросит ключ, где вы вводите путь к файлу или JSON в кодировке base64:
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После настройки реестра укажите полный путь к образу Google Artifact Registry в конфигурации Wrangler:
{
"$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>Либо можно использовать -p флаг с wrangler containers build чтобы собрать и отправить образ за один шаг:
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 затем
соберите и отправьте образы с помощью wrangler containers build на --push флаг, либо
используя wrangler containers push команда.
Ограничения реестра
Размер образов ограничен объёмом доступного диска у настроенного тип инстанса для Container.
Удаляйте образы с помощью wrangler containers images delete чтобы освободить место, но откат
Worker к предыдущей версии, использующей удалённый образ, приведёт к ошибке.