Поделиться через


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

Azure DevOps Services

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

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

Категория Требования
Azure DevOps проект Azure DevOps.
— способность запуска потоков на хостинговых агентах Microsoft. Вы можете приобрести параллельное задание или запросить бесплатный уровень.
— Базовые знания о YAML и Azure Pipelines. Дополнительные сведения см. в статье "Создание первого конвейера".
- Разрешения:
     Чтобы создать пайплайн, пользователи должны находиться в группе "Участники", а для группы должно быть установлено разрешение Создать пайплайн сборки с значением 'Разрешено'. Члены групп администраторов сборки и администраторов проектов также могут управлять пайплайнами.
Сайт GitHub — учетная запись GitHub.
- Подключение службы GitHub для авторизации Azure Pipelines.
Лазурный Подписка Azure.

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

В браузере перейдите к следующему примеру репозитория и введите его в учетную запись 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 Hub или Реестр контейнеров Azure. Дополнительные сведения см. в статье "Отправка изображения в Docker Hub" или "Реестр контейнеров Google" или отправка образа в Реестр контейнеров Azure.

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

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

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

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

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

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

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

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

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

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

Разделы справки задать переменную 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 перед задачей Docker.

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

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

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

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

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

При использовании агентов, предоставляемых Microsoft, каждое задание отправляется на свежесозданную виртуальную машину на основе образа, генерируемого из шаблонов репозитория 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. Чтобы узнать, как отправить образ в реестр контейнеров, ознакомьтесь со следующими статьями: