Краткое руководство. Создание образа контейнера для развертывания приложений с помощью Azure Pipelines

Azure DevOps Services

В этом кратком руководстве показано, как создать образ контейнера для развертывания приложений с помощью Azure Pipelines. Чтобы создать этот образ, вам потребуется Dockerfile в репозитории. Вы можете создать контейнеры Linux или Windows на основе агента, используемого в конвейере.

Необходимые компоненты

Создание вилки репозитория с примером

В браузере перейдите к следующему примеру репозитория и введите его в учетную запись GitHub.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Создание образа Linux или Windows

  1. Войдите в свою организацию Azure DevOps и перейдите в проект.

  2. Перейдите к конвейерам и выберите "Создать конвейер" или "Создать конвейер" при создании первого конвейера в проекте.

  3. Выберите GitHub в качестве расположения исходного кода.

  4. Выберите репозиторий и выберите конвейер Starter.

    • Если вы перенаправлены на GitHub для входа, введите учетные данные GitHub.
    • Если вы перенаправляетесь на GitHub, чтобы установить приложение Azure Pipelines, выберите " Утвердить и установить".
  5. Замените содержимое azure-pipelines.yml следующим кодом. В зависимости от того, развертываете ли вы приложение Linux или Windows, убедитесь в том, что для vmImage вас установлено значение ubuntu-latest или windows-latest.

     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest' 
    
     variables:
       imageName: 'pipelines-javascript-docker'
    
     steps:
     - task: Docker@2
       displayName: Build an image
       inputs:
         repository: $(imageName)
         command: build
         Dockerfile: app/Dockerfile
    
  6. По завершении нажмите кнопку "Сохранить и запустить".

  7. При добавлении файла azure-pipelines.yml в репозиторий появится запрос на добавление сообщения фиксации. Введите сообщение, а затем нажмите кнопку "Сохранить и запустить".

При использовании локальных агентов убедитесь, что Docker установлен на узле агента, а подсистема Или управляющая программа Docker работает с повышенными привилегиями.

Чтобы создать образ, Docker необходимо установить на узле агента, а подсистема и управляющая программа Docker должны работать с повышенными привилегиями. Выполните следующие действия, чтобы создать конвейер с помощью редактора конвейера YAML.

  1. Перейдите в коллекцию и создайте проект.
  2. В проекте выберите "Конвейеры".
  3. Выберите Создать конвейер.
  4. Выберите GitHub Enterprise Server в качестве расположения исходного кода.
  5. Если вы еще не сделали этого, авторизуйте Azure Pipelines для подключения к учетной записи GitHub Enterprise Server.
    1. Выберите Подключение на сервер GitHub Enterprise Server.
    2. Введите сведения о учетной записи, а затем нажмите кнопку "Проверить и сохранить".
  6. Выберите репозиторий. Если вы перенаправляетесь на GitHub, чтобы установить приложение Azure Pipelines, выберите " Утвердить и установить".
  7. Чтобы настроить конвейер, выберите шаблон образа Docker.
  8. В редакторе конвейера YAML замените содержимое ФАЙЛА YAML следующим кодом. Замените имя пула именем пула, содержащего локальный агент с возможностью Docker.
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

pool:
  name: default
  demands: docker

variables:
  imageName: 'pipelines-javascript-docker'

steps:
 - task: Docker@2
   displayName: Build an image
   inputs:
     repository: $(imageName)
     command: build
     Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'

  1. Выберите Сохранить и выполнить.
  2. На странице "Сохранить и запустить" нажмите кнопку "Сохранить и снова запустить".

Дополнительные сведения о создании образов Docker см. в задаче Docker, используемой этим примером приложения. Вы также можете напрямую вызывать команды Docker с помощью задачи командной строки.

Образы контейнеров создаются и хранятся в агенте. Вы можете отправить образ в реестр контейнеров Google, Центр Docker или Реестр контейнеров Azure. Дополнительные сведения см. в статье "Отправка изображения в Docker Hub" или "Реестр контейнеров Google" или отправка образа в Реестр контейнеров Azure.

Очистка ресурсов

Если вы не планируете продолжать использовать это приложение, удалите репозиторий конвейера и кода.

Вопросы и ответы

Какие агенты можно использовать для создания образов контейнеров?

  • Создавать образы контейнеров Linux можно с помощью размещенных в Майкрософт агентов Ubuntu или локальных агентов на основе платформы Linux.

  • Создавать образы контейнеров Windows можно с помощью размещенных в Майкрософт агентов Windows или локальных агентов на основе платформы Windows. Все агенты на основе платформы Windows, размещаемые в Майкрософт, поставляются с подсистемой и клиентом Moby, необходимыми для сборок Docker.

  • В настоящее время нельзя использовать агенты macOS, размещенные Корпорацией Майкрософт, для создания образов контейнеров, так как модуль Moby, необходимый для создания образов, не предварительно установлен на этих агентах.

Дополнительные сведения см. в разделе Варианты агентов Windows и Linux, доступные для агентов, размещенных в Майкрософт.

Какие предварительно подготовленные образы Docker доступны для размещенных агентов?

Чтобы избежать длительных интервалов извлечения образов Docker для каждого задания из реестра контейнеров, некоторые часто используемые образы предварительно кэшируются на размещенных майкрософт агентах. Список доступных предварительно подготовленных образов см. в разделе "Включенное программное обеспечение" для доступных образов виртуальных машин в репозитории создания образов azure-pipelines-image-generation.

Разделы справки задать переменную BuildKit для сборок Docker?

BuildKit предоставляет улучшения производительности, управления хранилищами, функциональных возможностей и безопасности. Сборка BuildKit в настоящее время не поддерживается на узлах Windows.

Чтобы включить сборки Docker с помощью BuildKit, задайте переменную DOCKER_BUILDKIT .

trigger:
- main
   
pool:
  vmImage: 'ubuntu-latest'
   

variables:
  imageName: 'pipelines-javascript-docker'
  DOCKER_BUILDKIT: 1
    
steps:
- task: Docker@2
  displayName: Build an image
  inputs:
    repository: $(imageName)
    command: build
    Dockerfile: app/Dockerfile

Как использовать локальный агент?

Docker необходимо установить и подсистему или управляющую программу, запущенную на узле агента. Если Docker не установлен на узле агента, можно добавить задачу установщика Docker в конвейер. Перед задачей Docker Installer необходимо добавить задачу установщика Docker.

Как создать сборку Docker на основе скрипта вместо использования задачи Docker?

Вы можете использовать build команду или любую другую команду Docker.

docker build -f Dockerfile -t foobar.azurecr.io/hello:world .

Эта команда создает образ, эквивалентный одному созданному с помощью задачи Docker. Во внутреннем плане задача Docker вызывает двоичный файл Docker в скрипте и объединяет несколько других команд, чтобы обеспечить несколько дополнительных преимуществ. Узнайте больше о задаче Docker.

Можно ли повторно использовать кэширование слоев во время сборки в Azure Pipelines?

Если вы используете агенты, размещенные Корпорацией Майкрософт, каждое задание отправляется на только что подготовленную виртуальную машину на основе образа, созданного из шаблонов репозитория azure-pipelines-image-generation. Эти виртуальные машины очищаются после завершения задания. Это временное время существования предотвращает повторное использование этих виртуальных машин для последующих заданий и повторное использование кэшированных слоев Docker. В качестве обходного решения можно настроить многоэтапную сборку, которая создает два образа и отправляет их в реестр образов на ранней стадии. Затем можно сообщить Docker использовать эти изображения в качестве источника кэша с аргументом --cache-from .

Если вы используете автономные агенты, вы можете кэшировать уровни Docker без каких-либо обходных решений, так как проблема с временным сроком существования не применяется к этим агентам.

Как создавать образы контейнеров Linux для архитектур, отличных от x64?

При использовании размещенных в Майкрософт агентов Linux образы контейнеров Linux создаются для архитектуры x64. Для создания образов для других архитектур, таких как процессоры x86 или ARM, можно использовать эмулятор компьютера, например QEMU.

Ниже показано, как создать образ контейнера процессора ARM с помощью QEMU:

  1. Создайте Dockerfile с базовым изображением, соответствующим целевой архитектуре:

    FROM arm64v8/alpine:latest
    
  2. Выполните следующий скрипт в задании перед сборкой образа:

    # register QEMU binary - this can be done by running the following image
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # build your image
    

Дополнительные сведения см. в разделе qemu-user-static на сайте GitHub.

Разделы справки выполнять тесты и публиковать результаты тестирования для контейнерных приложений?

Различные варианты тестирования контейнерных приложений и публикации полученных результатов теста см. в статье "Публикация результатов теста".

Следующие шаги

После создания образа контейнера отправьте образ в Реестр контейнеров Azure, Docker Hub или реестр контейнеров Google. Чтобы узнать, как отправить образ в реестр контейнеров, перейдите к любой из следующих статей: