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


Использование контейнеров для создания приложений Azure Sphere

Примечание

В этом разделе описывается использование Docker Desktop для Windows для создания приложений Azure Sphere в контейнере. Для создания приложений в контейнере Docker в Linux можно использовать один и тот же контейнер azurespheresdk из Реестр артефактов Microsoft или MAR (также известного как Реестр контейнеров Майкрософт или MCR).

Установка Docker Desktop

Docker можно использовать для запуска автономного контейнера Linux с предустановленным пакетом SDK для Azure Sphere. Этот образ также можно использовать в качестве основы для собственных развертываний. Тег image ссылается на версию пакета SDK, который он содержит.

Прежде чем скачать и запустить контейнер Docker, необходимо установить Рабочий стол Docker в Windows или Linux.

После установки Docker Desktop для Windows убедитесь, что вы включили функции Hyper-V и контейнеров Windows. После установки может потребоваться перезагрузка.

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

Linux — это тип контейнера по умолчанию для Docker Desktop в Windows. Azure Sphere использует контейнеры Linux. Чтобы запустить контейнеры Linux, необходимо убедиться, что Docker использует правильную управляющую программу. Чтобы убедиться, что Linux является текущим типом контейнера по умолчанию, щелкните правой кнопкой мыши значок кита Docker на панели задач. Если вы видите переключение на контейнеры Windows, вы уже ориентируейтесь на управляющую программу Linux. Если вы используете контейнер Windows, его можно переключить, выбрав Переключиться на контейнеры Linux в меню действий, щелкнув правой кнопкой мыши значок кита Docker в области задач. Дополнительные сведения см. в разделе Переключение между контейнерами Windows и Linux.

Примечание

Подождите, пока не остановится анимация значка кита Docker Desktop. Значок может находиться в скрытой области Уведомлений. Наведите указатель мыши на значок, чтобы увидеть состояние Docker Desktop.

Использование контейнера среды сборки пакета SDK Для Azure Sphere для создания примеров приложений

Контейнер можно использовать в интерактивном режиме, введя его и выполнив команду; Однако более эффективно записывать шаги, необходимые для создания приложений, в файле, который Docker может использовать для создания пользовательского образа на основе исходного образа Azure Sphere. Это гарантирует, что процесс сборки будет повторяемым и согласованным. По умолчанию этот файл должен иметь имя Dockerfile и находиться в $PATH, где выполняется команда Docker.

Ниже приведены инструкции по созданию dockerfile для создания примеров Azure Sphere. Эти действия можно настроить в соответствии с собственными потребностями.

  1. Создайте новый контейнер на основе контейнера mcr.microsoft.com/azurespheresdk.

  2. Клонируйте репозиторий примеров Azure Sphere из GitHub.

  3. Создайте каталог для хранения примера при его сборке.

  4. Создайте переменную среды, чтобы указать пример, который требуется создать.

  5. Запустите CMake, чтобы создать пример и поместить его в указанный каталог.

Создание файла Dockerfile для примеров сборки

Чтобы создать образ Docker на основе образа Azure Sphere, но с пользовательскими функциями сборки, создайте текстовый файл (без расширения файла) с помощью следующих инструкций Docker:

FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo

RUN git clone https://github.com/Azure/azure-sphere-samples.git

FROM azsphere-samples-repo AS azsphere-sampleapp-build

RUN mkdir /build
WORKDIR /build

ENV sample=HelloWorld/HelloWorld_HighLevelApp

CMD cmake -G "Ninja" \
-DCMAKE_TOOLCHAIN_FILE="/opt/azurespheresdk/CMakeFiles/AzureSphereToolchain.cmake" \
-DAZURE_SPHERE_TARGET_API_SET="latest-lts" \
-DCMAKE_BUILD_TYPE="Debug" \
/azure-sphere-samples/Samples/${sample} && \
ninja

В этом файле используется переменная среды ENV для указания образца для сборки. Задайте новое значение для ENV , чтобы создать пример, отличный от HelloWorld или HelloWorld_HighLevelApp.

Дополнительные сведения о инструкциях Dockerfile см. в разделе Пошаговое обсуждение инструкций Dockerfile .

Создание примера приложения по умолчанию с помощью Dockerfile

Для создания примера приложения с помощью пользовательского файла Dockerfile необходимо выполнить три шага.

  1. Создайте образ из Dockerfile с помощью интерфейса командной строки, например PowerShell, командной строки Windows или командной оболочки Linux:

    docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .
    
    

    Параметр --target указывает, какая часть многоэтапной сборки будет использоваться. Параметр --tag указывает имя изображения и должен быть только строчным регистром. Образы Docker всегда должны использовать только строчные буквы. Если не указать имя с --tagпомощью , изображение будет иметь 12-значный номер, с которым не легко работать. Не забывайте период в конце команды. Вы можете получить список образов с помощью docker images команды .

    Docker создаст образ с именем azsphere-sampleapp-build на основе файла Dockerfile. Если файл Dockerfile имеет другое --file имя, используйте параметр , чтобы указать имя.

  2. Присвойте контейнеру более простое --name имя с помощью параметра . Команда run введет контейнер и создаст пример, указанный переменной среды ENV . Используйте интерфейс командной строки, чтобы ввести следующую команду:

    docker run --name hello_hl azsphere-sampleapp-build
    

    Пример приложения (HelloWorld/HelloWorld_HighLevelApp) будет создан и будет помещен в /build каталог внутри контейнера. Когда контейнер завершит работу, он завершит работу и вернется к интерфейсу командной строки.

    Примечание

    Эта команда создает приложение без какого-либо взаимодействия и выходит из контейнера после завершения сборки. После выхода контейнер по-прежнему активен. Это связано с тем, что вы не указали -it параметры или --rm . Позже вы сможете docker run снова использовать команду в контейнере, не перестраивая его, пока запущен Docker Desktop.

  3. Скопируйте результаты сборки из контейнера в среду хост-компьютера. Используйте интерфейс командной строки, чтобы ввести следующую команду:

    docker cp hello_hl:/build .
    

    Эта команда копирует содержимое /build каталога в контейнере hello_h1 в каталог на хост-компьютере, из которой выполняется команда. Каталог /build указывается как рабочий каталог (WORKDIR), в который будет компилироваться пример. Обратите внимание, что вы по-прежнему находитесь за пределами контейнера, но выдаете ему команды с помощью команды docker cp . Не забывайте период в конце команды.

Создание другого примера с помощью пользовательского файла Dockerfile

Чтобы создать другой пример, например пример GPIO, укажите путь к примеру GPIO.

docker run --name gpio_hl --env sample=GPIO/GPIO_HighLevelApp azsphere-sampleapp-build

После завершения сборки скопируйте результат из контейнера в среду хост-компьютера:

docker cp gpio_hl:/build .

Не забывайте период в конце команды.

После копирования пакета в среду хост-компьютера можно использовать команды Azure CLI из Windows или Linux для развертывания приложения. Дополнительные сведения см. в разделе Развертывание приложения.

Взаимодействие с устройством через USB из контейнера не поддерживается.

Построчное обсуждение инструкций Dockerfile

Ниже описана каждая часть файла Dockerfile, созданного в разделе Создание Dockerfile для примеров сборки .

Подготовка к нескольким сборкам

FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo

Эта строка настраивает новую сборку azsphere-samples-repo на основе исходного контейнера microsoft.com/azurespheresdk .

Скачивание примеров Azure Sphere

RUN git clone https://github.com/Azure/azure-sphere-samples.git

Эта строка клонирует все примеры из репозитория примеров Azure Sphere.

Добавление другой целевой многоэтапной сборки

FROM azsphere-samples-repo AS azsphere-sampleapp-build

Эта строка добавляет новую сборку на основе сборки azsphere-samples-repo .

Установка рабочего каталога внутри контейнера

RUN mkdir /build
WORKDIR /build

Эти строки создают новый рабочий каталог.

Создание переменной среды по умолчанию для указания примера

ENV sample=HelloWorld/HelloWorld_HighLevelApp

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

Запустите CMake и Ninja, чтобы создать пакет

CMD cmake -G "Ninja" \
-DCMAKE_TOOLCHAIN_FILE="/opt/azurespheresdk/CMakeFiles/AzureSphereToolchain.cmake" \
-DAZURE_SPHERE_TARGET_API_SET="latest-lts" \
-DCMAKE_BUILD_TYPE="Debug" \
/azure-sphere-samples/Samples/${sample} && \
ninja

В этом разделе используется CMake для указания параметров, используемых при вызове Ninja для сборки пакета.

После завершения сборки контейнер перестанет работать.

Советы По Docker

Эти советы помогут вам более эффективно работать с Docker.

Использование команды docker run для интерактивного изучения базового контейнера

Используйте интерфейс командной строки, чтобы ввести следующую команду:

docker run --rm -it mcr.microsoft.com/azurespheresdk

В этом примере — это имя образа, mcr.microsoft.com/azurespheresdk из который создается контейнер. Обратите внимание, что --rm параметр завершает работу контейнера после его запуска, а -it параметр задает интерактивный доступ к контейнеру.

Контейнер Docker среды сборки Пакета SDK для Azure Sphere предоставляется Реестр артефактов Microsoft (MAR) и доступен для общественности.

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

Скачивание и настройка могут занять несколько минут. Среда сборки включает в себя все необходимое для сборки пакета с помощью пакета SDK для Linux для Azure Sphere.

run После завершения команды командная строка изменится на знак "#". Теперь вы находитесь в контейнере Docker под управлением Linux. При вводе ls отобразится текущий каталог Linux в контейнере, как в следующем описании:

bin   cmake-3.14.5-Linux-x86_64  etc   lib    makeazsphere.sh  mnt    opt   root  sbin  sys  usr
boot  dev                        home  lib64  media            ninja  proc  run   srv   tmp  var

Введите , exit чтобы покинуть контейнер. Контейнер больше не будет доступен для вас, и вам потребуется создать его снова с помощью следующей команды:

docker run --rm -it mcr.microsoft.com/azurespheresdk

Если параметр не используется --rm , контейнер не будет удален при выходе.

Идентификация контейнера

При создании нового контейнера он будет иметь идентификатор, например a250ade97090 (ваш идентификатор будет отличаться). Для многих команд Docker вместо адреса microsoft.com/azurespheresdk необходимо использовать идентификатор.

Ниже приведен типичный список основных сведений о контейнерах в системе с помощью этой команды:

docker ps --all

Результат будет выглядеть примерно так:

CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
a250ade97090        microsoft.com/azurespheresdk   "/bin/bash"         15 minutes ago      Up 9 seconds                            pedantic_kilby

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

Работа внутри контейнера

Если вы хотите работать внутри контейнера на компьютере без команды run , используйте команду exec с идентификатором контейнера и скриптом в контейнере, который вы хотите запустить (/bin/bash), введя:

docker exec -t a250ade97090 /bin/bash

Командная строка изменится на знак "#". Теперь вы находитесь в контейнере Docker под управлением Linux. При вводе ls отобразится текущий каталог Linux в контейнере:

bin   cmake-3.14.5-Linux-x86_64  etc   lib    makeazsphere.sh  mnt    opt   root  sbin  sys  usr
boot  dev                        home  lib64  media            ninja  proc  run   srv   tmp  var

Чтобы покинуть контейнер, введите exit команду .

Ограничения контейнера сборки пакета SDK для Azure Sphere

Контейнер сборки пакета SDK для Azure Sphere предназначен только для сборки пакетов Azure Sphere. Он не предназначен для выполнения команд Azure CLI, восстановления или загрузки неопубликованных устройств или отладки. Контейнер не имеет доступа к функциям USB.

Ограничения контейнеров Docker Linux

Контейнер Docker Linux не совпадает с полной установкой Linux. Например, нельзя запускать приложения с графическим интерфейсом Linux в контейнере Docker Linux.

Использование многоэтапных контейнеров сборки для уменьшения зависимостей

Функция многоэтапной сборки Docker позволяет использовать несколько инструкций FROM в файле Dockerfile для уменьшения зависимостей. Каждая инструкция FROM может использовать разные базы, и каждая из них начинает новый этап сборки.

Дополнительные сведения о многоэтапных сборках Docker см. в разделе Использование многоэтапных сборок.

В качестве рекомендации Docker рекомендует многоэтапные сборки. Дополнительные сведения о рекомендациях по Docker см. в разделе Введение в рекомендации по Dockerfile.

Добавление понятного имени в этап с помощью аргумента AS

По умолчанию этапы не называются, но имеют идентификатор. Вы можете сделать Dockerfile более удобочитаемым, добавив понятное имя в этап, добавив AS и имя. Например:

FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo

Дополнительные сведения об использовании аргумента AS в многоэтапных командах см. в разделе Имя этапов сборки.

Рекомендуется создать целевой объект с осмысленным именем.

При создании целевого объекта можно присвоить ему понятное имя с помощью параметра --tag . Полезны осмысленные имена. Например:

docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .

Дополнительные сведения об использовании имен с командой docker build см. в справочнике по сборке Docker.