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.
Crie um novo contentor com base no contentor mcr.microsoft.com/azurespheresdk.
Clone o repositório de exemplos do Azure Sphere a partir do GitHub.
Crie um diretório para armazenar o seu exemplo no quando for criado.
Crie uma variável de ambiente para especificar o exemplo que pretende criar.
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:
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 odocker 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.Atribua um nome mais simples ao contentor com a opção
--name
. Orun
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 odocker run
comando novamente no contentor sem o reconstruir, desde que o Docker Desktop esteja em execução.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.