Использование контейнеров для создания приложений 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. Эти действия можно настроить в соответствии с собственными потребностями.
Создайте новый контейнер на основе контейнера mcr.microsoft.com/azurespheresdk.
Клонируйте репозиторий примеров Azure Sphere из GitHub.
Создайте каталог для хранения примера при его сборке.
Создайте переменную среды, чтобы указать пример, который требуется создать.
Запустите 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 необходимо выполнить три шага.
Создайте образ из 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
имя, используйте параметр , чтобы указать имя.Присвойте контейнеру более простое
--name
имя с помощью параметра . Командаrun
введет контейнер и создаст пример, указанный переменной среды ENV . Используйте интерфейс командной строки, чтобы ввести следующую команду:docker run --name hello_hl azsphere-sampleapp-build
Пример приложения (HelloWorld/HelloWorld_HighLevelApp) будет создан и будет помещен в
/build
каталог внутри контейнера. Когда контейнер завершит работу, он завершит работу и вернется к интерфейсу командной строки.Примечание
Эта команда создает приложение без какого-либо взаимодействия и выходит из контейнера после завершения сборки. После выхода контейнер по-прежнему активен. Это связано с тем, что вы не указали
-it
параметры или--rm
. Позже вы сможетеdocker run
снова использовать команду в контейнере, не перестраивая его, пока запущен Docker Desktop.Скопируйте результаты сборки из контейнера в среду хост-компьютера. Используйте интерфейс командной строки, чтобы ввести следующую команду:
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.