Usar contêineres para criar aplicativos do Azure Sphere
Nota
Este tópico descreve como usar o Docker Desktop para Windows para criar aplicativos do Azure Sphere em um contêiner. Para criar aplicativos em um contêiner do Docker no Linux, você pode usar o mesmo contêiner azurespheresdk do Registro de Artefato da Microsoft ou MAR (também conhecido como Registro de Contêiner da Microsoft ou MCR).
Instalar o Docker Desktop
Você pode usar o Docker para executar um contêiner Linux autônomo com o SDK do Azure Sphere pré-instalado. Essa imagem também pode ser usada como base para suas próprias implantações. A marca de imagem refere-se à versão do SDK que ela contém.
Antes de baixar e executar um contêiner do Docker, você deve instalar a Área de Trabalho do Docker no Windows ou no Linux.
Depois de instalar o Docker Desktop para Windows, habilite os recursos do Windows do Hyper-V e contêineres. Talvez seja necessário reiniciar após a instalação.
Depois de instalado, inicie o Docker Desktop no menu Iniciar do Windows ou no ícone de atalho adicionado à sua área de trabalho.
Linux é o tipo de contêiner padrão do Docker Desktop no Windows. O Azure Sphere usa contêineres linux. Para executar contêineres do Linux, você precisa ter certeza de que o Docker está mirando o daemon correto. Para verificar se o Linux é o tipo padrão atual de contêiner, clique com o botão direito do mouse no ícone baleia do Docker na bandeja do sistema. Se você vir Alternar para contêineres do Windows, já está mirando o daemon do Linux. Se você estiver no contêiner do Windows, poderá alterná-lo selecionando Alternar para contêineres linux no menu de ação quando clicar com o botão direito do mouse no ícone baleia do Docker na bandeja do sistema. Para obter mais informações, consulte Alternar entre contêineres windows e Linux.
Nota
Aguarde até que a animação do ícone de baleia do Docker Desktop pare. O ícone pode estar na área Notificações ocultas. Passe o mouse sobre o ícone para ver o status da Área de Trabalho do Docker.
Usar o contêiner de ambiente de build do SDK do Azure Sphere para criar aplicativos de exemplo
Você pode usar um contêiner interativamente inserindo-o e emitindo comando; no entanto, é mais eficiente capturar as etapas necessárias para criar seus aplicativos em um arquivo que o Docker pode usar para criar uma imagem personalizada com base na imagem original do Azure Sphere. Isso garante que o processo de build seja repetível e consistente. Por padrão, esse arquivo deve ser chamado de Dockerfile e estar no $PATH em que o comando docker é executado.
As etapas a seguir fornecem um tópico para criar instruções do Dockerfile para criar exemplos do Azure Sphere. Você pode ajustar essas etapas para suas próprias necessidades.
Crie um novo contêiner com base no contêiner mcr.microsoft.com/azurespheresdk.
Clone o repositório de exemplos do Azure Sphere do GitHub.
Crie um diretório para armazenar seu exemplo quando ele for criado.
Crie uma variável de ambiente para especificar o exemplo que você deseja compilar.
Execute o CMake para criar o exemplo e colocá-lo no diretório especificado.
Criar um Dockerfile para criar exemplos
Para criar uma imagem do Docker com base na imagem do Azure Sphere, mas com a funcionalidade de build personalizada, crie um arquivo de texto (sem extensão de arquivo) com as seguintes instruções do 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
Este arquivo usa a variável de ambiente ENV para especificar o exemplo a ser criado. Defina um novo valor para ENV para criar um exemplo diferente do HelloWorld/HelloWorld_HighLevelApp.
Consulte Discussão linha a linha das instruções do Dockerfile para obter mais detalhes sobre as instruções do Dockerfile.
Criar o aplicativo de exemplo padrão usando o Dockerfile
Há três etapas necessárias para criar um aplicativo de exemplo usando um Dockerfile personalizado:
Crie a imagem do Dockerfile usando uma interface de linha de comando, como PowerShell, Prompt de Comando do Windows ou shell de comando linux:
docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .
A
--target
opção especifica qual parte de um build de vários estágios deve ser usada. A--tag
opção especifica um nome da imagem e deve ser apenas minúscula. As imagens do Docker sempre devem usar letras minúsculas. Se você não especificar um nome com--tag
, a imagem terá um número de 12 dígitos que não é fácil de trabalhar. Não se esqueça do período no final do comando. Você pode listar as imagens com odocker images
comando.O Docker criará uma imagem chamada azsphere-sampleapp-build com base no arquivo chamado "Dockerfile". Se o Dockerfile for nomeado outra coisa, use a opção
--file
para especificar o nome.Dê ao contêiner um nome mais simples usando a opção
--name
. Orun
comando inserirá o contêiner e criará o exemplo especificado pela variável de ambiente ENV . Use a interface de linha de comando para inserir este comando:docker run --name hello_hl azsphere-sampleapp-build
O aplicativo de exemplo (HelloWorld/HelloWorld_HighLevelApp) será criado e será colocado no
/build
diretório dentro do contêiner. Quando o contêiner terminar de ser executado, ele sairá e o levará de volta para a interface de linha de comando.Nota
Esse comando cria o aplicativo sem qualquer interação e sai do contêiner após a conclusão do build. O contêiner ainda está ativo após a saída. Isso ocorre porque você não especificou as
-it
opções ou--rm
. Posteriormente, você pode usar odocker run
comando novamente no contêiner sem recompilá-lo, desde que o Docker Desktop esteja em execução.Copie os resultados do build de dentro do contêiner para o ambiente do computador host. Use a interface de linha de comando para inserir este comando:
docker cp hello_hl:/build .
Esse comando copia o conteúdo do
/build
diretório dentro do contêiner hello_h1 para o diretório em seu computador host do qual você emite o comando. O/build
diretório é especificado como o WORKDIR (diretório de trabalho) ao qual o exemplo deve ser compilado. Observe que você ainda está fora do contêiner, mas emitindo comandos para ele usando o comando cp do docker. Não se esqueça do período no final do comando.
Criar um exemplo diferente usando o Dockerfile personalizado
Para criar um exemplo diferente, por exemplo, o exemplo de GPIO, forneça o caminho para o exemplo GPIO.
docker run --name gpio_hl --env sample=GPIO/GPIO_HighLevelApp azsphere-sampleapp-build
Depois que o build for concluído, copie o resultado de dentro do contêiner para o ambiente do computador host:
docker cp gpio_hl:/build .
Não se esqueça do período no final do comando.
Depois que o pacote tiver sido copiado para o ambiente do computador host, você poderá usar comandos da CLI do Azure do Windows ou linux para implantar seu aplicativo. Para obter mais informações, consulte Implantar o Aplicativo.
Não há suporte para interação do dispositivo via USB de um contêiner.
Discussão linha a linha das instruções do Dockerfile
Cada parte do Dockerfile criado em Criar um Dockerfile para exemplos de construção é explicada abaixo.
Preparar para vários builds
FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo
Essa linha configura um novo build, azsphere-samples-repo, com base no contêiner de microsoft.com/azurespheresdk original.
Baixar os exemplos do Azure Sphere
RUN git clone https://github.com/Azure/azure-sphere-samples.git
Essa linha clona todos os exemplos do repositório de exemplos do Azure Sphere.
Adicionar outro build de vários estágios direcionável
FROM azsphere-samples-repo AS azsphere-sampleapp-build
Essa linha adiciona um novo build com base no build azsphere-samples-repo .
Definir o diretório de trabalho dentro do contêiner
RUN mkdir /build
WORKDIR /build
Essas linhas criam um novo diretório de trabalho.
Criar uma variável de ambiente padrão para especificar exemplo
ENV sample=HelloWorld/HelloWorld_HighLevelApp
Essa linha cria uma variável de ambiente que especifica o exemplo a ser criado. Nesse caso, é o exemplo HelloWorld_HighLevelApp. A variável de ambiente pode ser substituída para especificar qualquer nome e caminho de exemplo.
Executar CMake e Ninja para criar um pacote
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
Esta seção usa o CMake para especificar parâmetros usados ao invocar o Ninja para criar o pacote.
Depois que o build for concluído, o contêiner deixará de ser executado.
Dicas do Docker
Essas dicas podem ajudá-lo a trabalhar com o Docker de forma mais eficaz.
Use o comando de execução do docker para explorar o contêiner base interativamente
Use a interface de linha de comando para inserir este comando:
docker run --rm -it mcr.microsoft.com/azurespheresdk
Neste exemplo, mcr.microsoft.com/azurespheresdk
é o nome da imagem da qual o contêiner é criado. Observe que a opção --rm
desliga o contêiner depois que ele é executado e a opção especifica o -it
acesso interativo ao contêiner.
O contêiner do Docker do ambiente de compilação do SDK do Azure Sphere é fornecido pelo MAR (Registro de Artefato da Microsoft) e está disponível para o público.
Se o contêiner já estiver no computador local, ele não será baixado novamente.
O download e a configuração podem levar vários minutos. O ambiente de build inclui tudo o que é necessário para criar um pacote usando o SDK do Linux do Azure Sphere.
Depois que o comando for concluído, o run
prompt de comando será alterado para um sinal "#". Agora você está dentro de um contêiner do Docker baseado em Linux. Digitar ls mostrará o diretório linux atual dentro do contêiner, semelhante a esta listagem:
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
Digite exit
para deixar o contêiner. O contêiner não estará mais disponível para você e você precisará criá-lo novamente com este comando:
docker run --rm -it mcr.microsoft.com/azurespheresdk
Se você não usar a opção --rm
, o contêiner não será excluído quando você sair.
Identificação de contêiner
Quando você cria um novo contêiner, ele terá uma ID como a250ade97090
(sua ID será diferente). Para muitos comandos do Docker, você deve usar a ID em vez do endereço microsoft.com/azurespheresdk .
Aqui está uma listagem típica de informações básicas sobre os contêineres em seu sistema usando este comando:
docker ps --all
O resultado será semelhante a este:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a250ade97090 microsoft.com/azurespheresdk "/bin/bash" 15 minutes ago Up 9 seconds pedantic_kilby
Sua ID será diferente. Observe que o Docker compõe nomes aleatórios para o proprietário do contêiner. Observe que, neste exemplo, há apenas um contêiner.
Trabalhando dentro do contêiner
Se você quiser trabalhar dentro de um contêiner em seu computador sem usar o comando de execução , use o comando executivo com a ID do contêiner e o script no contêiner que você deseja executar (/bin/bash) digitando:
docker exec -t a250ade97090 /bin/bash
O prompt de comando será alterado para um sinal "#". Agora você está em um contêiner do Docker baseado em Linux. Digitar ls mostrará o diretório linux atual dentro do contêiner:
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
Para deixar o contêiner, digite o exit
comando.
Limitações de contêiner de compilação do SDK do Azure Sphere
O contêiner de compilação do SDK do Azure Sphere foi projetado apenas para criar pacotes do Azure Sphere. Ele não foi projetado para executar comandos da CLI do Azure, recuperar ou carregar dispositivos ou depurar. O contêiner não tem acesso a funções USB.
Limitações de contêiner do Docker Linux
Um contêiner do Docker Linux não é o mesmo que uma instalação completa do Linux. Por exemplo, você não pode executar aplicativos GUI do Linux em um contêiner do Docker Linux.
Usar contêineres de build de vários estágios para reduzir dependências
O recurso de build de vários estágios do Docker permite que você use várias instruções FROM em seu Dockerfile para reduzir as dependências. Cada instrução FROM pode usar uma base diferente e cada uma delas inicia um novo estágio do build.
Para obter mais informações sobre builds de vários estágios do Docker, consulte Usar builds de vários estágios.
Builds de vários estágios são recomendados pelo Docker como uma prática recomendada. Para obter mais informações sobre as práticas recomendadas do Docker, consulte Guia de Introdução para Práticas Recomendadas do Dockerfile.
Adicionar um nome significativo ao seu estágio com o argumento AS
Por padrão, os estágios não são nomeados, mas têm um número de ID. Você pode tornar seu Dockerfile mais legível adicionando um nome significativo ao estágio acrescentando AS e um nome. Por exemplo:
FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo
Para obter mais informações sobre como usar o argumento AS em comandos de vários estágios, consulte Nomear seus estágios de build.
Criar o destino com um nome significativo como uma prática recomendada
Ao criar um destino, você pode dar a ele um nome significativo usando a opção --tag . Nomes significativos são úteis. Por exemplo:
docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .
Para obter mais informações sobre como usar nomes com o comando de build do Docker, consulte a referência de build do Docker.