Partilhar via


Utilizar contentores para criar aplicações do Azure Sphere

Nota

Este tópico descreve como utilizar o Docker Desktop para Windows para criar aplicações do Azure Sphere num contentor. Para criar aplicações num contentor do Docker no Linux, pode utilizar o mesmo contentor azurespheresdk do Registo de Artefatos da Microsoft ou MAR (também conhecido como Microsoft Container Registry ou MCR).

Instalar o Docker Desktop

Pode utilizar o Docker para executar um contentor autónomo do Linux com o SDK do Azure Sphere pré-instalado. Esta imagem também pode ser utilizada como base para as suas próprias implementações. A etiqueta de imagem refere-se à versão do SDK que contém.

Antes de poder transferir e executar um contentor do Docker, tem de instalar o Docker Desktop no Windows ou Linux.

Depois de instalar o Docker Desktop para Windows, certifique-se de que ativa as funcionalidades do Windows hyper-V e contentores. Poderá ter de reiniciar após a instalação.

Depois de instalado, inicie o Docker Desktop a partir do menu Iniciar do Windows ou a partir do ícone de atalho adicionado ao ambiente de trabalho.

O Linux é o tipo de contentor predefinido para o Docker Desktop no Windows. O Azure Sphere utiliza contentores do Linux. Para executar contentores do Linux, tem de se certificar de que o Docker está a filtrar o daemon correto. Para verificar se o Linux é o tipo predefinido atual de contentor, clique com o botão direito do rato no ícone de baleia docker no tabuleiro do sistema. Se vir a opção Mudar para contentores do Windows, significa que já está a filtrar o daemon do Linux. Se estiver no contentor do Windows, pode alternar esta opção ao selecionar Mudar para contentores do Linux no menu de ação quando clicar com o botão direito do rato no ícone de baleia docker no tabuleiro do sistema. Para obter mais informações, veja Alternar entre contentores do Windows e do Linux.

Nota

Aguarde até que a animação do ícone de baleia do Docker Desktop pare. O ícone pode estar na área Notificações oculta. Paire o cursor sobre o ícone para ver o estado do Docker Desktop.

Utilizar o contentor de ambiente de compilação do SDK do Azure Sphere para criar aplicações de exemplo

Pode utilizar um contentor interativamente ao introduzi-lo e ao emitir o comando; No entanto, é mais eficiente capturar os passos necessários para criar as suas aplicações num ficheiro que o Docker pode utilizar para criar uma imagem personalizada com base na imagem original do Azure Sphere. Isto garante que o processo de compilação é repetível e consistente. Por predefinição, este ficheiro tem de ter o nome Dockerfile e estar no $PATH onde o comando docker é executado.

Os passos seguintes fornecem um destaque para a criação de instruções do Dockerfile para criar exemplos do Azure Sphere. Pode ajustar estes passos para as suas próprias necessidades.

  1. Crie um novo contentor com base no contentor mcr.microsoft.com/azurespheresdk.

  2. Clone o repositório de exemplos do Azure Sphere a partir do GitHub.

  3. Crie um diretório para armazenar o seu exemplo no quando for criado.

  4. Crie uma variável de ambiente para especificar o exemplo que pretende criar.

  5. Execute 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 compilação personalizada, crie um ficheiro de texto (sem extensão de ficheiro) 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 ficheiro utiliza a variável de ambiente ENV para especificar o exemplo a criar. Defina um novo valor para ENV para criar um exemplo diferente do HelloWorld/HelloWorld_HighLevelApp.

Veja Debate linha a linha das instruções do Dockerfile para obter mais detalhes sobre as instruções do Dockerfile.

Criar a aplicação de exemplo predefinida com o Dockerfile

Existem três passos necessários para criar uma aplicação de exemplo com um Dockerfile personalizado:

  1. Crie a imagem a partir do Dockerfile com uma interface de linha de comandos, como o PowerShell, a Linha de Comandos do Windows ou a shell de comandos do Linux:

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

    A --target opção especifica a parte de uma compilação em várias fases que deve ser utilizada. A --tag opção especifica um nome da imagem e só tem de estar em minúsculas. As imagens do Docker têm sempre de utilizar apenas letras minúsculas. Se 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. Pode listar as imagens com o docker images comando .

    O Docker criará uma imagem com o nome azsphere-sampleapp-build com base no ficheiro com o nome "Dockerfile". Se o seu Dockerfile tiver outro nome, utilize a opção --file para especificar o nome.

  2. Atribua um nome mais simples ao contentor com a opção --name . O run comando irá introduzir o contentor e compilar o exemplo especificado pela variável de ambiente ENV . Utilize a interface da linha de comandos para introduzir este comando:

    docker run --name hello_hl azsphere-sampleapp-build
    

    A aplicação de exemplo (HelloWorld/HelloWorld_HighLevelApp) será criada e será colocada no /build diretório dentro do contentor. Quando o contentor terminar de ser executado, este sairá e irá levá-lo de volta para a interface de linha de comandos.

    Nota

    Este comando cria a aplicação sem qualquer interação e sai do contentor após a conclusão da compilação. O contentor continua ativo depois de sair. Isto acontece porque não especificou as -it opções ou --rm . Mais tarde, pode utilizar o docker run comando novamente no contentor sem o reconstruir, desde que o Docker Desktop esteja em execução.

  3. Copie os resultados da compilação do seu contentor para o ambiente do computador anfitrião. Utilize a interface da linha de comandos para introduzir este comando:

    docker cp hello_hl:/build .
    

    Este comando copia o conteúdo do /build diretório dentro do contentor hello_h1 para o diretório no computador anfitrião a partir do qual emite o comando. O /build diretório é especificado como o diretório de trabalho (WORKDIR) para o qual o exemplo deve ser compilado. Tenha em atenção que ainda está fora do contentor, mas a emitir comandos para o mesmo com o comando docker cp . Não se esqueça do período no final do comando.

Criar um exemplo diferente com o Dockerfile personalizado

Para criar um exemplo diferente, por exemplo, o exemplo GPIO, forneça o caminho para o exemplo GPIO.

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

Após a conclusão da compilação, copie o resultado do interior do contentor para o ambiente do computador anfitrião:

docker cp gpio_hl:/build .

Não se esqueça do período no final do comando.

Depois de o pacote ter sido copiado para o ambiente do computador anfitrião, pode utilizar comandos da CLI do Azure do Windows ou Linux para implementar a sua aplicação. Para obter mais informações, veja Implementar a Aplicação.

A interação do dispositivo através de USB a partir de um contentor não é suportada.

Debate linha a linha das instruções do Dockerfile

Cada parte do Dockerfile criado em Criar um Dockerfile para criar exemplos é explicada abaixo.

Preparar para várias construções

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

Esta linha configura uma nova compilação, azsphere-samples-repo, com base no contentor de microsoft.com/azurespheresdk original.

Transferir os exemplos do Azure Sphere

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

Esta linha clona todos os exemplos do repositório de exemplos do Azure Sphere.

Adicionar outra compilação de várias fases direcionada

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

Esta linha adiciona uma nova compilação com base na compilação azsphere-samples-repo .

Definir o diretório de trabalho dentro do contentor

RUN mkdir /build
WORKDIR /build

Estas linhas criam um novo diretório de trabalho.

Criar uma variável de ambiente predefinida para especificar o exemplo

ENV sample=HelloWorld/HelloWorld_HighLevelApp

Esta linha cria uma variável de ambiente que especifica o exemplo a ser criado. Neste 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 secção utiliza CMake para especificar os parâmetros utilizados ao invocar Ninja para criar o pacote.

Após a conclusão da compilação, o contentor deixará de ser executado.

Sugestões do Docker

Estas sugestões podem ajudá-lo a trabalhar com o Docker de forma mais eficaz.

Utilizar o comando docker run para explorar o contentor base interativamente

Utilize a interface da linha de comandos para introduzir este comando:

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

Neste exemplo, mcr.microsoft.com/azurespheresdk é o nome da imagem a partir da qual o contentor é criado. Tenha em atenção que a opção --rm encerra o contentor depois de ser executado e a opção especifica o -it acesso interativo ao contentor.

O contentor docker do ambiente de compilação do SDK do Azure Sphere é fornecido pelo Registo de Artefatos da Microsoft (MAR) e está disponível para o público.

Se o contentor já estiver no computador local, não será transferido novamente.

A transferência e a configuração podem demorar vários minutos. O ambiente de compilação inclui tudo o que é necessário para criar um pacote com o SDK Linux do Azure Sphere.

Após a conclusão do run comando, a linha de comandos será alterada para um sinal "#". Está agora dentro de um contentor do Docker baseado em Linux. Escrever ls irá mostrar-lhe o diretório do Linux atual dentro do contentor, 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

Escreva exit para sair do contentor. O contentor deixará de estar disponível para si e terá de criá-lo novamente com este comando:

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

Se não utilizar a opção --rm , o contentor não será eliminado quando sair.

Identificação de contentor

Quando cria um novo contentor, este terá um ID como a250ade97090 (o seu ID será diferente). Para muitos comandos do Docker, tem de utilizar o ID em vez do endereço microsoft.com/azurespheresdk .

Eis uma listagem típica de informações básicas sobre os contentores no seu sistema com este comando:

docker ps --all

O resultado terá um aspeto semelhante ao seguinte:

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

O seu ID será diferente. Tenha em atenção que o Docker compõe nomes aleatórios para o proprietário do contentor. Tenha em atenção que, neste exemplo, existe apenas um contentor.

Trabalhar dentro do contentor

Se quiser trabalhar dentro de um contentor no computador sem utilizar o comando executar , utilize o comando exec com o ID do contentor e o script no contentor que pretende executar (/bin/bash) ao escrever:

docker exec -t a250ade97090 /bin/bash

A linha de comandos será alterada para um sinal "#". Está agora num contentor do Docker baseado em Linux. Escrever ls irá mostrar-lhe o diretório do Linux atual dentro do contentor:

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 sair do contentor, escreva o exit comando .

Limitações do contentor de compilação do SDK do Azure Sphere

O contentor de compilação do SDK do Azure Sphere foi concebido para criar apenas pacotes do Azure Sphere. Não foi concebido para executar comandos da CLI do Azure, recuperação ou sideload de dispositivos ou depuração. O contentor não tem acesso às funções USB.

Limitações de contentores do Docker Linux

Um contentor do Docker Linux não é o mesmo que uma instalação completa do Linux. Por exemplo, não pode executar aplicações GUI do Linux num contentor do Docker Linux.

Utilizar contentores de compilação de várias fases para reduzir as dependências

A funcionalidade de compilação de várias fases do Docker permite-lhe utilizar múltiplas instruções FROM no dockerfile para reduzir as dependências. Cada instrução FROM pode utilizar uma base diferente e cada uma delas inicia uma nova fase da compilação.

Para obter mais informações sobre compilações em várias fases do Docker, veja Utilizar compilações em várias fases.

As compilações em várias fases são recomendadas pelo Docker como melhor prática. Para obter mais informações sobre as melhores práticas do Docker, veja Guia de Introdução às Melhores Práticas do Dockerfile.

Adicionar um nome significativo à fase com o argumento AS

Por predefinição, as fases não têm o nome, mas têm um número de ID. Pode tornar o dockerfile mais legível ao adicionar um nome significativo à fase ao acrescentar AS e um nome. Por exemplo:

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

Para obter mais informações sobre como utilizar o argumento AS em comandos de várias fases, veja Atribuir um nome às fases de compilação.

Criar o destino com um nome significativo como melhor prática

Quando cria um destino, pode dar-lhe um nome significativo através da 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 utilizar nomes com o comando de compilação do Docker, veja a referência de compilação do Docker.