Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Решение Задачи ACR поддерживает автоматическую сборку образа контейнера при обновлении базового образа контейнера, например, когда вы исправляете ОС или исполняющую среду в одном из базовых образов.
Из этого учебника вы узнаете, как создать задачу ACR, которая запускает сборку в облаке при отправке базового образа контейнера в тот же реестр. Вы также можете попробовать учебник, чтобы создать задачу ACR, которая запускает сборку образа при отправке базового образа в другой реестр контейнеров Azure.
В этом руководстве рассматриваются следующие темы:
- создание базового образа;
- Создайте образ приложения в том же реестре для отслеживания базового образа
- обновление базового образа для запуска задачи образа приложения;
- отображение активированной задачи;
- проверка обновленного образа приложения.
Предварительные условия
Завершение работы с предыдущими руководствами
В этом руководстве предполагается, что вы уже настроили среду и выполнили следующие шаги, описанные в первых двух руководствах в серии:
- Создание реестра контейнеров Azure
- Форкнуть образец репозитория
- Клонируйте репозиторий с примером.
- Создали личный маркер доступа GitHub.
Если вы еще этого не сделали, завершите следующие учебные курсы, прежде чем продолжить.
Создание образов контейнеров в облаке с помощью задач Azure Container Registry
Автоматизация сборок образов контейнеров с помощью задач Azure Container Registry
Настройка среды
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Для работы с этой статьей требуется Azure CLI версии 2.0.46 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.
Заполните эти переменные среды оболочки значениями, подходящими для вашей среды. Этот шаг не является обязательным, но он упрощает выполнение многолинейных команд Azure CLI в этом руководстве. Если вы не заполните эти переменные среды, вам придется вручную заменять каждое значение в примерах команд.
ACR_NAME=<registry-name> # The name of your Azure container registry
GIT_USER=<github-username> # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the second tutorial
Сценарий обновления базового образа
В этом учебнике описывается базовый сценарий обновления образа, в котором базовый образ и образ приложения хранятся в одном реестре.
Пример кода включает два файла Docker: образ приложения и образ, который определяется как базовый. В следующих разделах вы создадите задачу ACR, которая автоматически запустит сборку образа приложения, когда новая версия базового образа будет отправлена в тот же реестр контейнеров.
Dockerfile-app: небольшое Node.js веб-приложение, которое отображает статическую веб-страницу с версией Node.js, на которой оно работает. Строка версии моделируется: она отображает содержимое переменной среды (
NODE_VERSION
), которая определена в базовом образе.Dockerfile-base: образ, который приложение
Dockerfile-app
определяет как свою базу. Сам он основан на образе узла и включает переменную средыNODE_VERSION
.
В следующих разделах вы создадите задачу, обновите значение NODE_VERSION
в Dockerfile базового образа, а затем используете ACR Tasks для создания базового образа. Когда задача ACR принудительно отправит новый базовый образ в реестр, он автоматически запустит сборку образа приложения. При желании можно запустить образ контейнера приложения локально, чтобы увидеть различные строки версии в созданных образах.
В этом руководстве задача ACR создает и отправляет образ контейнера приложения, указанный в Dockerfile. С помощью решения "Задачи ACR" можно также запускать многошаговые задачи, используя файл YAML для определения действий по созданию, отправке и тестированию (при необходимости) нескольких контейнеров.
создание базового образа;
Для начала создайте базовый образ с помощью функции быстрой задачи в решении "Задачи ACR", выполнив команду az acr build. Как обсуждалось в первом руководстве этой серии, этот процесс позволит не только создать образ, но и отправить его в реестр контейнеров (при успешном выполнении сборки).
az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .
Создать задачу
Далее с помощью команды az acr task create создайте задачу:
az acr task create \
--registry $ACR_NAME \
--name baseexample1 \
--image helloworld:{{.Run.ID}} \
--arg REGISTRY_NAME=$ACR_NAME.azurecr.io \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
--file Dockerfile-app \
--git-access-token $GIT_PAT
Эта задача аналогична той, которую вы создали при работе с предыдущим учебником. Она инструктирует задачи ACR активировать сборку образа, когда коммиты передаются в репозиторий, указанный с помощью --context
. В то время как Dockerfile, использованный для создания образа в предыдущем руководстве, определяет общедоступный базовый образ (FROM node:15-alpine
), Dockerfile в этой задаче Dockerfile-app задает базовый образ в том же реестре:
FROM ${REGISTRY_NAME}/baseimages/node:15-alpine
Эта конфигурация позволяет легко симулировать исправление фреймворка в базовом образе позже в этом руководстве.
Создание контейнера приложения
Используйте команду az acr task run, чтобы вручную запустить задачу и создать образ приложения. Этот шаг нужно выполнить для того, чтобы задача отслеживала зависимость образа приложения от базового образа.
az acr task run --registry $ACR_NAME --name baseexample1
По завершении задачи запишите ИД запуска (например, "da6"), если вы хотите выполнить следующий необязательный шаг.
Необязательно. Локальный запуск контейнера приложения
Если вы работаете локально (а не в облачной среде Cloud Shell) и у вас установлен Docker, запустите контейнер, чтобы увидеть приложение, отображаемое в веб-браузере, а затем восстановите его базовый образ. Если вы используете Cloud Shell, пропустите этот раздел (Cloud Shell не поддерживает az acr login
или docker run
).
Сначала выполните проверку подлинности реестра контейнеров с помощью команды az acr login:
az acr login --name $ACR_NAME
Затем локально запустите контейнер с помощью docker run
. Замените код <run-id> на ИД запуска, полученный в выходных данных на предыдущем шаге (например, "da6"). В этом примере задается имя контейнера myapp
и включен параметр --rm
для удаления контейнера при его остановке.
docker run -d -p 8080:80 --name myapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>
Перейдите по адресу http://localhost:8080
в вашем браузере, и вы увидите номер версии Node.js, отображаемый на веб-странице, похожим на приведенный ниже. На более позднем этапе вы увеличиваете версию, добавив "a" в строку версии.
Чтобы остановить и удалить контейнер, выполните следующую команду:
docker stop myapp
Список сборок
Далее перечислите запуски заданий, которые Задачи ACR выполнили для реестра, с помощью команды az acr task list-runs:
az acr task list-runs --registry $ACR_NAME --output table
Если вы закончили работу с предыдущим руководством (и не удалили реестр), вы должны увидеть выходные данные, похожие на приведенные ниже. Обратите внимание на количество запусков задач и последний идентификатор выполнения, чтобы сравнить результаты после обновления базового образа в следующем разделе.
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- --------- -------------------- ----------
cax baseexample1 linux Succeeded Manual 2020-11-20T23:33:12Z 00:00:30
caw taskhelloworld linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:29
cav example2 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:55
cau example1 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:40
cat taskhelloworld linux Succeeded Manual 2020-11-20T23:07:29Z 00:00:27
Обновление базового образа
Здесь вы эмулируете исправление (патч) фреймворка в базовом образе. Измените файл Dockerfile-base, добавив "a" после номера версии, определенного в NODE_VERSION
:
ENV NODE_VERSION 15.2.1a
Запустите функцию быстрой задачи, чтобы создать измененный базовый образ. Обратите внимание на ИД запуска в выходных данных.
az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .
После завершения сборки и отправки решением "Задача ACR" нового базового образа в реестр оно запустит сборку образа приложения. Задаче, созданной ранее, может потребоваться несколько минут, чтобы запустить сборку образа приложения, так как она должна обнаружить недавно созданный и переданный базовый образ.
Список обновленной версии сборки
Теперь, когда вы обновили базовый образ, заново перечислите запуски задач, чтобы сравнить их с прежним списком. Если сначала выходные данные не отличаются, периодически запускайте команду, пока новое выполнение задачи не появится в списке.
az acr task list-runs --registry $ACR_NAME --output table
Результат аналогичен приведенному ниже. Триггером для последней выполненной сборки должно быть "обновление образа", что означает, что задача была запущена с помощью вашей быстрой задачи с базовым образом.
Run ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- ------------ -------------------- ----------
ca11 baseexample1 linux Succeeded Image Update 2020-11-20T23:38:24Z 00:00:34
ca10 taskhelloworld linux Succeeded Image Update 2020-11-20T23:38:24Z 00:00:24
cay linux Succeeded Manual 2020-11-20T23:38:08Z 00:00:22
cax baseexample1 linux Succeeded Manual 2020-11-20T23:33:12Z 00:00:30
caw taskhelloworld linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:29
cav example2 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:55
cau example1 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:40
cat taskhelloworld linux Succeeded Manual 2020-11-20T23:07:29Z 00:00:27
Если вы хотите выполнить следующий необязательный шаг — запуск только что созданного контейнера, чтобы увидеть обновленный номер версии, запишите значение RUN ID для сборки, инициируемой обновлением образа (в предыдущих выходных данных — ca11).
Необязательно. Запуск только что созданного образа
Если вы работаете локально (не в облачной среде Cloud Shell) и у вас установлен Docker, запустите новый образ приложения после завершения его сборки. Замените код <run-id>
идентификатором запуска, полученным на предыдущем шаге. Если вы используете Cloud Shell, пропустите этот раздел (Cloud Shell не поддерживает docker run
).
docker run -d -p 8081:80 --name updatedapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>
Перейдите по адресу http://localhost:8081 в браузере, и вы увидите обновленный номер версии Node.js (с добавленным значением "а") на веб-странице:
Важно отметить, что вы обновили базовый образ с помощью нового номера версии, но новая версия отображается в последнем созданном образе приложения. Решение "Задачи ACR" обнаружило изменение базового образа и автоматически перестроило образ приложения.
Чтобы остановить и удалить контейнер, выполните следующую команду:
docker stop updatedapp
Следующие шаги
Из этого руководства вы узнали, как использовать задачу, чтобы автоматически запускать сборку образа контейнера, когда обновляется базовый образ.
Полный рабочий процесс управления базовыми образами, полученными из общедоступного источника, см. в статье Использование и обслуживание общедоступного содержимого с помощью задач Реестра контейнеров Azure.
Теперь перейдите к следующему учебнику, чтобы узнать, как активировать задачи по определенному расписанию.