В этой статье подробно описывается, как контейнер бы приложение, создать службу приложений в Azure и настроить его, чтобы вытащить изображение Docker из реестра контейнеров Azure (ACR). То, как изображение Docker развертывается из нашего кода в ACR, является результатом того, что мы создаем конвейер развертывания с использованием Azure Tipelines.
Преимущество-вместо того, чтобы вручную нажимать на локально созданное изображение Docker к ACR после некоторых изменений кода, теперь у нас есть процесс автоматической непрерывной интеграции/непрерывного развертывания (CI/CD).
Рабочий процесс может быть описан следующим образом: мы пишем код на нашем компьютере DEV, строим и запускаем изображение Docker локально. Как только мы сделаем git
толчок кода к git
Repo, Azure Pipelines выполняет сборку на некоторой машине агента и развертывает изображение Docker в ACR. Поскольку служба приложений также уже была настроена для непрерывного развертывания, она автоматически вытянет изображение из ACR. По сути, у нас есть конвейер от кода до репо до Docker Image до ACR для службы приложений.
1) Начнем с написания приложения. Какое приложение написать не является центром этой статьи. Но чтобы иметь что-то, с чего можно начать, мы создадим приложение NextJS, используя NextJS, используя npx create-next-app
Анкет Мы могли бы сделать с приложением ASP.NET Core, и все будет таким же. Итак, начнем:
npx create-next-app mysample cd mysample npm run build
2) Мы создадим изображение Docker для этого и запустим в локальном контейнере Docker. Для этого мы создадим Dockerfile
и Docker-compose.yml
файл.
Вот Dockerfile
FROM node:14 as BUILD_IMAGE WORKDIR /var/www/app COPY package.json package-lock.json ./ RUN npm install COPY . . RUN yarn build # remove dev dependencies RUN npm prune --production FROM node:14 WORKDIR /var/www/app COPY --from=BUILD_IMAGE /var/www/app/package.json ./package.json COPY --from=BUILD_IMAGE /var/www/app/node_modules ./node_modules COPY --from=BUILD_IMAGE /var/www/app/.next ./.next COPY --from=BUILD_IMAGE /var/www/app/public ./public EXPOSE 3000 CMD ["yarn", "start"]
А также Docker-compose.yml
файл
version: '3.4' services: app: build: context: . dockerfile: ./Dockerfile ports: - 80:3000 env_file: .env command: sh -c 'yarn start'
3) Теперь мы можем запустить Docker локально с помощью команды
Docker-Compose Up-Build
Это должно работать, если вы укажите браузер на http://localhost
(Это порт 80 не 3000)
4) Все следующие шаги, которые мы собираемся сделать, могут быть сделаны с пользовательским интерфейсом в Портал Azure , но мы будем использовать Azure CLI насколько это возможно. Также я назову свой Ресурсная группа
и План обслуживания приложений
как Myresourcegroup
и Mylinuxplan
соответственно. Если у вас уже есть ресурсная группа и план обслуживания приложений, вы можете продолжать использовать их. Или вы можете следовать следующему шагу и заменить именами по вашему выбору.
Давайте создадим группу ресурсов под названием MyresourceGroup
az group create -l westus -n MyResourceGroup
Теперь мы создаем план обслуживания приложений Linux под названием Mylinuxplan
с 2 работниками
az appservice plan create -g MyResourceGroup -n MyLinuxPlan \ --is-linux --number-of-workers 2 --sku S1
Чтобы создать группу ресурсов, обратитесь к этому Ссылка Анкет Чтобы создать план службы приложений, см. Это ссылка на сайт
5) Теперь мы создаем реестр контейнеров Azure под названием mysamplecr
az acr create --name mysampleacr --resource-group \ MyResourceGroup --sku Basic --admin-enabled true
На данный момент у нас теперь есть ACR, но к нему не было натолкнуто изображение, и никакая служба приложений не была создана. Вот где мой подход начинает отличаться от того, что в документации Azure.
Это нормально, потому что мы не хотим толкать изображение Docker до ACR вручную. Вместо этого мы установим конвейер Azure сейчас.
6) Давайте перейдем к https://dev.azure.com , перейдите к Трубопровод
Страница и создайте новый трубопровод, как показано на следующей картинке:
7) Затем укажите Где вы код?
когда его подсказывают.
8) На странице Настройте свой трубопровод
Прокрутите вниз и нажмите «Показать больше». Затем выберите Docker Build and Pulp a Image в реестр контейнеров Azure
9) Выберите свою подписку и Продолжить
Анкет Вам может быть предложено снова войти в систему.
10) Теперь выберите свой реестр контейнеров. Если вы следите за этим примером, мы назовим его mysampleacr
Анкет Для имени изображения давайте назовите это MySampleImg
. Затем нажмите на Проверить и настроить
11) Мы должны получить сгенерированное Azure-Pipelines.yml
Файл со содержимым, аналогичным тому, что ниже
# Docker # Build and push an image to Azure Container Registry # https://docs.microsoft.com/azure/devops/pipelines/languages/docker trigger: - main resources: - repo: self variables: # Container registry service connection established during pipeline creation dockerRegistryServiceConnection: 'b0...a4' imageRepository: 'mysampleimg' containerRegistry: 'mysampleacr.azurecr.io' dockerfilePath: '**/Dockerfile' tag: '$(Build.BuildId)' # Agent VM image name vmImageName: 'ubuntu-latest' stages: - stage: Build displayName: Build and push stage jobs: - job: Build displayName: Build pool: vmImage: $(vmImageName) steps: - task: Docker@2 displayName: Build and push an image to container registry inputs: command: buildAndPush repository: $(imageRepository) dockerfile: $(dockerfilePath) containerRegistry: $(dockerRegistryServiceConnection) tags: | $(tag)
Нам нужно внести пару изменений, а затем мы можем Сохранить и запустить
Анкет
В приведенном выше файле ищите строку Tag: '$ (build.buildid)'
и добавьте линию под ней. Теперь он покажет
tag: '$(Build.BuildId)' latestTag: 'latest'
В последних 2 строках файла изменить от
tags: | $(tag)
к
tags: | $(latestTag)
Полученное/модифицированное Azure-Pipelines.yml
Файл должен теперь выглядеть как
# Docker # Build and push an image to Azure Container Registry # https://docs.microsoft.com/azure/devops/pipelines/languages/docker trigger: - main resources: - repo: self variables: # Container registry service connection established during pipeline creation dockerRegistryServiceConnection: 'b0...a4' imageRepository: 'mysampleimg' containerRegistry: 'mysampleacr.azurecr.io' dockerfilePath: '**/Dockerfile' tag: '$(Build.BuildId)' latestTag: 'latest' # Agent VM image name vmImageName: 'ubuntu-latest' stages: - stage: Build displayName: Build and push stage jobs: - job: Build displayName: Build pool: vmImage: $(vmImageName) steps: - task: Docker@2 displayName: Build and push an image to container registry inputs: command: buildAndPush repository: $(imageRepository) dockerfile: $(dockerfilePath) containerRegistry: $(dockerRegistryServiceConnection) tags: | $(latestTag)
Теперь мы можем Сохраните и беги
12) Когда пробег заканчивается, мы можем проверить, что в ACR есть изображение, выполнив следующие команды (одна за другим)
az acr repository list -n mysampleacr az acr repository show -n mysampleacr \ --repository mysampleimg az acr repository show -n mysampleacr \ --repository mysampleimg:latest
Для получения дополнительной помощи на AZ ACR Repository
Команды, пожалуйста, обратитесь к https://docs.microsoft.com/en-us/cli/azure/acr/repository?view=azure-cli-latest#az_acr_repository_list
13) Теперь мы можем создать сервис приложений и сказать ей, чтобы он вытащил с последнего изображения MySampleImg: Последний
от ACR mysampleacr
Анкет
az webapp create --resource-group MyResourceGroup --plan MyLinuxPlan --name mysample --deployment-container-image-name mysampleacr.azurecr.io/mysampleimg:latest
14) Чтобы убедиться, что когда новое изображение выдвигается на ACR, служба приложений автоматически вытянет последнее изображение, перейдите к Портал Azure перейдите к клинке услуг приложений и убедитесь Непрерывное развертывание
на.
Ссылки (немного трудно прочитать для меня, но это только мое мнение): https://docs.microsoft.com/en-us/azure/app-service/quickstart-nodejs?pivots=platform-linux
https://docs.microsoft.com/en-us/azure/architecture/example-scenario/apps/devops-dotnet-webapp
https://docs.microsoft.com/en-us/azure/developer/javascript/tutorial/deploy-nodejs-azure-app-service-with-visual-studio-code?tabs=bash
https://docs.microsoft.com/en-us/azure/app-service/quickstart-custom-container?tabs=node&pivots=container-linux
Оригинал: «https://dev.to/codeprototype/create-an-azure-pipelines-to-deploy-docker-image-for-azure-app-service-4f15»