Создание пользовательского образа контейнера с помощью скрипта
Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Вы можете создать и создать образ на основе стандартного образа ADE и отправить его в реестр контейнеров с помощью скрипта быстрого запуска, предоставленного корпорацией Майкрософт. Скрипт можно найти в репозитории сред развертывания. Чтобы использовать скрипт быстрого запуска, введите репозиторий и запустите скрипт локально.
Скрипт создает изображение и отправляет его в указанный Реестр контейнеров Azure (ACR) в репозитории "ade" и тег "latest". Для этого скрипта требуется имя реестра и каталог для пользовательского образа, установлен Azure CLI и Docker Desktop и в переменных PATH, а также требуется, чтобы у вас были разрешения на отправку в указанный реестр.
Чтобы использовать скрипт быстрого запуска для быстрой сборки и отправки этого примера образа в Реестр контейнеров Azure, вам потребуется:
- Вилку этого репозитория в личная учетная запись.
- Убедитесь, что azure CLI и классическое приложение Docker установлены на компьютере и в переменных PATH.
- Убедитесь, что у вас есть разрешения на отправку образов в выбранный Реестр контейнеров Azure.
Скрипт можно вызвать с помощью следующей команды в PowerShell:
.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'
Кроме того, если вы хотите отправить в определенный репозиторий и имя тега, можно выполнить следующее:
.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'
Чтобы использовать образ в развертываниях среды, необходимо добавить расположение изображения в файл манифеста , чтобы подключить образ к определению среды, и вам может потребоваться настроить разрешения для ACR, чтобы сделать настраиваемый образ доступным для ADE.
Создание пользовательского образа контейнера вручную
Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Вы можете создавать пользовательские образы на основе стандартных образов ADE.
После завершения настройки образа можно создать образ и отправить его в реестр контейнеров вручную.
Вы создаете пользовательские образы с помощью стандартных образов ADE в качестве основы с интерфейсом командной строки ADE, который предварительно установлен на стандартных образах. Дополнительные сведения о интерфейсе командной строки ADE см. в справочнике по пользовательскому образу запуска интерфейса командной строки.
В этом примере вы узнаете, как создать образ Docker для использования развертываний ADE и доступа к интерфейсу командной строки ADE, базируя образ из одного из созданных образов ADE.
Чтобы создать образ, настроенный для ADE, выполните следующие действия.
- Создайте пользовательский образ на основе стандартного образа.
- Установите нужные пакеты.
- Настройте скрипты оболочки операций.
- Создайте скрипты оболочки операций для развертывания шаблонов ARM или Bicep.
1. Создание пользовательского образа на основе стандартного образа
Создайте DockerFile, включающую инструкцию FROM, указывающую на стандартный образ, размещенный на Реестр артефактов Microsoft.
Ниже приведен пример инструкции FROM, ссылающейся на стандартный основной образ:
FROM mcr.microsoft.com/deployment-environments/runners/core:latest
Эта инструкция извлекает последний опубликованный основной образ и делает его основой для пользовательского образа.
2. Установка обязательных пакетов
На этом шаге вы устанавливаете все пакеты, необходимые для образа, включая Bicep. Пакет Bicep можно установить с помощью Azure CLI с помощью инструкции RUN, как показано в следующем примере:
RUN az bicep install
Стандартные образы ADE основаны на образе Azure CLI и предварительно установлены пакеты ADE CLI и JQ. Дополнительные сведения о Azure CLI и пакете JQ можно узнать больше.
Чтобы установить все пакеты, необходимые в образе, используйте инструкцию RUN.
3. Настройка скриптов оболочки операций
В стандартных образах операции определяются и выполняются на основе имени операции. В настоящее время поддерживаются два имена операций развертывания и удаления.
Чтобы настроить пользовательский образ для использования этой структуры, укажите папку на уровне именованных скриптов Dockerfile и укажите два файла, deploy.sh и delete.sh. Скрипт оболочки развертывания запускается при создании или повторном развертывании среды, а сценарий оболочки удаления запускается при удалении среды. Примеры скриптов оболочки можно просмотреть в репозитории в папке Runner-Images для образа ARM-Bicep .
Чтобы убедиться, что эти скрипты оболочки являются исполняемыми, добавьте в Dockerfile следующие строки:
COPY scripts/* /scripts/
RUN find /scripts/ -type f -iname "*.sh" -exec dos2unix '{}' '+'
RUN find /scripts/ -type f -iname "*.sh" -exec chmod +x {} \;
4. Создание скриптов оболочки операций для развертывания шаблонов ARM или Bicep
Чтобы обеспечить успешное развертывание инфраструктуры ARM или Bicep через ADE, необходимо:
- Преобразование параметров ADE в допустимые для ARM параметры
- Разрешить связанные шаблоны, если они используются в развертывании
- Использование привилегированного управляемого удостоверения для выполнения развертывания
Во время точки входа основного образа все параметры, заданные для текущей среды, хранятся в переменной $ADE_OPERATION_PARAMETERS
. Чтобы преобразовать их в допустимые параметры ARM, можно выполнить следующую команду с помощью JQ:
# format the parameters as arm parameters
deploymentParameters=$(echo "$ADE_OPERATION_PARAMETERS" | jq --compact-output '{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": (to_entries | if length == 0 then {} else (map( { (.key): { "value": .value } } ) | add) end) }' )
Затем, чтобы устранить все связанные шаблоны, используемые в шаблоне на основе JSON ARM, можно декомпилировать основной файл шаблона, который разрешает все файлы локальной инфраструктуры, используемые во многих модулях Bicep. Затем перестройте эти модули обратно в один шаблон ARM с связанными шаблонами, внедренными в основной шаблон ARM в виде вложенных шаблонов. Этот шаг необходим только во время операции развертывания. Основной файл шаблона можно указать с помощью $ADE_TEMPLATE_FILE
набора во время точки входа основного образа, и эту переменную следует сбросить с помощью файла шаблона повторной компиляции. См. следующий пример.
if [[ $ADE_TEMPLATE_FILE == *.json ]]; then
hasRelativePath=$( cat $ADE_TEMPLATE_FILE | jq '[.. | objects | select(has("templateLink") and (.templateLink | has("relativePath")))] | any' )
if [ "$hasRelativePath" = "true" ]; then
echo "Resolving linked ARM templates"
bicepTemplate="${ADE_TEMPLATE_FILE/.json/.bicep}"
generatedTemplate="${ADE_TEMPLATE_FILE/.json/.generated.json}"
az bicep decompile --file "$ADE_TEMPLATE_FILE"
az bicep build --file "$bicepTemplate" --outfile "$generatedTemplate"
# Correctly reassign ADE_TEMPLATE_FILE without the $ prefix during assignment
ADE_TEMPLATE_FILE="$generatedTemplate"
fi
fi
Чтобы предоставить разрешения для развертывания, необходимо выполнить развертывание и удаление ресурсов в подписке, используйте привилегированное управляемое удостоверение, связанное с типом среды проекта ADE. Если для развертывания требуются специальные разрешения, например определенные роли, назначьте эти роли удостоверениям среды проекта. Иногда управляемое удостоверение не сразу доступно при вводе контейнера; Повторите попытку до успешного входа.
echo "Signing into Azure using MSI"
while true; do
# managed identity isn't available immediately
# we need to do retry after a short nap
az login --identity --allow-no-subscriptions --only-show-errors --output none && {
echo "Successfully signed into Azure"
break
} || sleep 5
done
Чтобы начать развертывание шаблонов ARM или Bicep, выполните az deployment group create
команду. При выполнении этой команды в контейнере выберите имя развертывания, которое не переопределяет предыдущие развертывания, и используйте --no-prompt true
--only-show-errors
флаги и убедитесь, что развертывание не завершится сбоем или сбоем при ожидании ввода данных пользователем, как показано в следующем примере:
deploymentName=$(date +"%Y-%m-%d-%H%M%S")
az deployment group create --subscription $ADE_SUBSCRIPTION_ID \
--resource-group "$ADE_RESOURCE_GROUP_NAME" \
--name "$deploymentName" \
--no-prompt true --no-wait \
--template-file "$ADE_TEMPLATE_FILE" \
--parameters "$deploymentParameters" \
--only-show-errors
Чтобы удалить среду, выполните развертывание в полном режиме и укажите пустой шаблон ARM, который удаляет все ресурсы в указанной группе ресурсов ADE, как показано в следующем примере:
deploymentName=$(date +"%Y-%m-%d-%H%M%S")
az deployment group create --resource-group "$ADE_RESOURCE_GROUP_NAME" \
--name "$deploymentName" \
--no-prompt true --no-wait --mode Complete \
--only-show-errors \
--template-file "$DIR/empty.json"
Вы можете проверить состояние подготовки и сведения, выполнив приведенные ниже команды. ADE использует некоторые специальные функции для чтения и предоставления дополнительных контекстов на основе сведений о подготовке, которые можно найти в папке Runner-Images . Простая реализация может быть следующей:
if [ $? -eq 0 ]; then # deployment successfully created
while true; do
sleep 1
ProvisioningState=$(az deployment group show --resource-group "$ADE_RESOURCE_GROUP_NAME" --name "$deploymentName" --query "properties.provisioningState" -o tsv)
ProvisioningDetails=$(az deployment operation group list --resource-group "$ADE_RESOURCE_GROUP_NAME" --name "$deploymentName")
echo "$ProvisioningDetails"
if [[ "CANCELED|FAILED|SUCCEEDED" == *"${ProvisioningState^^}"* ]]; then
echo -e "\nDeployment $deploymentName: $ProvisioningState"
if [[ "CANCELED|FAILED" == *"${ProvisioningState^^}"* ]]; then
exit 11
else
break
fi
fi
done
fi
Наконец, чтобы просмотреть выходные данные развертывания и передать их в ADE, чтобы сделать их доступными через Azure CLI, можно выполнить следующие команды:
deploymentOutput=$(az deployment group show -g "$ADE_RESOURCE_GROUP_NAME" -n "$deploymentName" --query properties.outputs)
if [ -z "$deploymentOutput" ]; then
deploymentOutput="{}"
fi
echo "{\"outputs\": $deploymentOutput}" > $ADE_OUTPUTS
Создание пользовательского образа
Вы можете создать образ с помощью интерфейса командной строки Docker. Убедитесь, что подсистема Docker установлена на компьютере. Затем перейдите в каталог Dockerfile и выполните следующую команду:
docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}
Например, если вы хотите сохранить образ в репозитории в реестре с именем customImage
и отправить с помощью версии тега 1.0.0
, выполните следующие действия:
docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0