Sdílet prostřednictvím


Použití kontejnerů k vytváření aplikací Azure Sphere

Poznámka

Toto téma popisuje, jak pomocí Desktopu Dockeru pro Windows vytvářet aplikace Azure Sphere v kontejneru. Pokud chcete vytvářet aplikace v kontejneru Dockeru v Linuxu, můžete použít stejný kontejner azurespheresdk z Registr artefaktů Microsoft nebo MAR (označovaného také jako Microsoft Container Registry nebo MCR).

Instalace Docker Desktopu

Pomocí Dockeru můžete spustit samostatný kontejner Linuxu s předinstalovanou sadou Azure Sphere SDK. Tuto image můžete také použít jako základ pro vaše vlastní nasazení. Značka image odkazuje na verzi sady SDK, která obsahuje.

Před stažením a spuštěním kontejneru Dockeru musíte nainstalovat Docker Desktop ve Windows nebo Linuxu.

Po instalaci Docker Desktopu pro Windows se ujistěte, že jste povolili funkce Systému Windows hyper-V a kontejnery. Po instalaci možná budete muset restartovat počítač.

Po instalaci spusťte Docker Desktop z nabídky Start ve Windows nebo z ikony zástupce přidané na plochu.

Linux je výchozí typ kontejneru pro Docker Desktop ve Windows. Azure Sphere používá kontejnery Linuxu. Abyste mohli spouštět linuxové kontejnery, musíte se ujistit, že Docker cílí na správného démona. Pokud chcete ověřit, že linux je aktuálním výchozím typem kontejneru, klikněte pravým tlačítkem na ikonu Docker whale na hlavním panelu systému. Pokud se zobrazí možnost Přepnout na kontejnery Windows, pak už cílíte na linuxový proces démon. Pokud jste v kontejneru Windows, můžete to přepnout tak, že v nabídce akcí vyberete Přepnout na kontejnery Linuxu , když kliknete pravým tlačítkem na ikonu Docker whale na hlavním panelu systému. Další informace najdete v tématu Přepínání mezi kontejnery Windows a Linuxu.

Poznámka

Počkejte, až se zastaví animace ikony velryby na ploše Dockeru. Ikona může být ve skryté oblasti Oznámení. Když najedete myší na ikonu, zobrazí se stav Docker Desktopu.

Použití kontejneru prostředí sestavení sady Azure Sphere SDK k sestavení ukázkových aplikací

Kontejner můžete používat interaktivně tak, že ho zadáte a vydáte příkaz. Je však efektivnější zachytit kroky potřebné k sestavení aplikací v souboru, který Docker může použít k vytvoření vlastní image založené na původní imagi Azure Sphere. Tím se zajistí, že proces sestavení bude opakovatelný a konzistentní. Ve výchozím nastavení musí mít tento soubor název Dockerfile a musí být v $PATH, kde je spuštěn příkaz dockeru.

Následující kroky poskytují osnovu pro vytvoření pokynů k vytvoření souboru Dockerfile pro sestavení ukázek Azure Sphere. Tyto kroky můžete upravit pro vlastní potřeby.

  1. Na základě kontejneru mcr.microsoft.com/azurespheresdk vytvořte nový kontejner.

  2. Naklonujte úložiště ukázek Azure Sphere z GitHubu.

  3. Vytvořte adresář, do něhož se bude ukázka ukládat, když se sestaví.

  4. Vytvořte proměnnou prostředí pro určení ukázky, kterou chcete sestavit.

  5. Spuštěním CMake sestavte ukázku a umístěte ji do zadaného adresáře.

Vytvoření souboru Dockerfile pro sestavení ukázek

Pokud chcete vytvořit image Dockeru založenou na imagi Azure Sphere, ale s vlastními funkcemi sestavení, vytvořte textový soubor (bez přípony souboru) s následujícími pokyny k Dockeru:

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

Tento soubor používá proměnnou prostředí ENV k určení ukázky, která se má sestavit. Nastavte novou hodnotu pro ENV , abyste vytvořili ukázku odlišnou od HelloWorld/HelloWorld_HighLevelApp.

Další podrobnosti o pokynech k souboru Dockerfile najdete v podrobné diskuzi o pokynech k souboru Dockerfile.

Sestavení výchozí ukázkové aplikace pomocí souboru Dockerfile

K vytvoření ukázkové aplikace pomocí vlastního souboru Dockerfile je potřeba provést tři kroky:

  1. Sestavte image ze souboru Dockerfile pomocí rozhraní příkazového řádku, jako je PowerShell, příkazový řádek Windows nebo příkazové prostředí Linuxu:

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

    Možnost --target určuje, která část vícefázového sestavení se má použít. Možnost --tag určuje název obrázku a musí být pouze malá písmena. Image Dockeru musí vždy používat jenom malá písmena. Pokud nezadáte název pomocí --tag, bude mít obrázek 12místné číslo, se kterým se nebude moc dobře pracovat. Nezapomeňte na tečku na konci příkazu. Pomocí příkazu můžete zobrazit seznam imagí docker images .

    Docker sestaví image s názvem azsphere-sampleapp-build na základě souboru s názvem "Dockerfile". Pokud má váš soubor Dockerfile jiný název, zadejte ho --file pomocí možnosti .

  2. Dejte kontejneru jednodušší název pomocí --name možnosti . Příkaz run zadá kontejner a sestaví ukázku určenou proměnnou prostředí ENV . Pomocí rozhraní příkazového řádku zadejte tento příkaz:

    docker run --name hello_hl azsphere-sampleapp-build
    

    Vytvoří se ukázková aplikace (HelloWorld/HelloWorld_HighLevelApp) a umístí se do /build adresáře uvnitř kontejneru. Po dokončení spuštění kontejneru se kontejner ukončí a vrátí se zpět do rozhraní příkazového řádku.

    Poznámka

    Tento příkaz sestaví aplikaci bez jakékoli interakce a po dokončení sestavení kontejner ukončí. Kontejner je i po ukončení stále aktivní. Je to proto, že jste nezadali -it možnosti nebo --rm . Později můžete příkaz znovu použít docker run v kontejneru, aniž byste ho znovu sestavili, pokud je Docker Desktop spuštěný.

  3. Zkopírujte výsledky sestavení z kontejneru do prostředí hostitelského počítače. Pomocí rozhraní příkazového řádku zadejte tento příkaz:

    docker cp hello_hl:/build .
    

    Tento příkaz zkopíruje obsah /build adresáře uvnitř kontejneru hello_h1 do adresáře na hostitelském počítači, ze kterého příkaz vydáváte. Adresář /build je určený jako pracovní adresář (WORKDIR), do kterého se má ukázka zkompilovat. Všimněte si, že jste stále mimo kontejner, ale vydáváte do něj příkazy pomocí příkazu docker cp . Nezapomeňte na tečku na konci příkazu.

Vytvoření jiné ukázky pomocí vlastního souboru Dockerfile

Pokud chcete vytvořit jinou ukázku, například ukázku GPIO, zadejte cestu k ukázce GPIO.

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

Po dokončení sestavení zkopírujte výsledek z kontejneru do prostředí hostitelského počítače:

docker cp gpio_hl:/build .

Nezapomeňte na tečku na konci příkazu.

Po zkopírování balíčku do prostředí hostitelského počítače můžete k nasazení aplikace použít příkazy Azure CLI z Windows nebo Linuxu. Další informace najdete v tématu Nasazení aplikace.

Interakce zařízení z kontejneru přes USB se nepodporuje.

Řádková diskuze s pokyny k souboru Dockerfile

Jednotlivé části souboru Dockerfile vytvořené v části Vytvoření souboru Dockerfile pro sestavení ukázek jsou vysvětleny níže.

Příprava na více sestavení

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

Tento řádek nastaví nový build azsphere-samples-repo na základě původního kontejneru microsoft.com/azurespheresdk .

Stažení ukázek Azure Sphere

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

Tento řádek naklonuje všechny ukázky z úložiště ukázek Azure Sphere.

Přidání dalšího vícefázového sestavení s možností cílení

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

Tento řádek přidá nový build založený na sestavení azsphere-samples-repo .

Nastavení pracovního adresáře uvnitř kontejneru

RUN mkdir /build
WORKDIR /build

Tyto řádky vytvoří nový pracovní adresář.

Vytvoření výchozí proměnné prostředí pro zadání ukázky

ENV sample=HelloWorld/HelloWorld_HighLevelApp

Tento řádek vytvoří proměnnou prostředí, která určuje ukázku, která se má sestavit. V tomto případě je to HelloWorld_HighLevelApp ukázka. Proměnnou prostředí je možné přepsat a zadat libovolný ukázkový název a cestu.

Spuštěním CMake a Ninja vytvořte balíček.

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

Tato část používá CMake k určení parametrů, které se použijí při vyvolání Ninja k sestavení balíčku.

Po dokončení sestavení se kontejner přestane spouštět.

Tipy k Dockeru

Tyto tipy vám můžou pomoct efektivněji pracovat s Dockerem.

Interaktivní prozkoumání základního kontejneru pomocí příkazu docker run

Pomocí rozhraní příkazového řádku zadejte tento příkaz:

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

V tomto příkladu je název image, mcr.microsoft.com/azurespheresdk ze které je kontejner vytvořen. Všimněte si, že možnost --rm po spuštění kontejneru vypne a -it možnost určuje interaktivní přístup ke kontejneru.

Kontejner Dockeru prostředí sestavení sady Azure Sphere SDK poskytuje Registr artefaktů Microsoft (MAR) a je dostupný pro veřejnost.

Pokud je kontejner již na místním počítači, nebude se znovu stahovat.

Stažení a nastavení může trvat několik minut. Prostředí sestavení obsahuje vše potřebné k sestavení balíčku pomocí sady Azure Sphere Linux SDK.

run Po dokončení příkazu se příkazový řádek změní na znaménko "#". Teď jste v kontejneru Dockeru založeném na Linuxu. Když zadáte ls , zobrazí se aktuální linuxový adresář v kontejneru, podobně jako v tomto výpisu:

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

Zadáním exit příkazu kontejner opustíte. Kontejner už nebude k dispozici a budete ho muset znovu vytvořit pomocí tohoto příkazu:

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

Pokud tuto možnost nepoužijete --rm , kontejner se po ukončení neodstraní.

Identifikace kontejneru

Když vytvoříte nový kontejner, bude mít ID, například a250ade97090 (vaše ID se bude lišit). U mnoha příkazů Dockeru musíte místo microsoft.com/azurespheresdk adresy použít ID.

Tady je typický seznam základních informací o kontejnerech ve vašem systému pomocí tohoto příkazu:

docker ps --all

Výsledek bude vypadat nějak takto:

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

Vaše ID se bude lišit. Všimněte si, že Docker vytváří pro vlastníka kontejneru náhodná jména. Všimněte si, že v tomto příkladu je pouze jeden kontejner.

Práce uvnitř kontejneru

Pokud chcete pracovat v kontejneru na počítači bez použití příkazu run , použijte příkaz exec s ID kontejneru a skript v kontejneru, který chcete spustit (/bin/bash), zadáním:

docker exec -t a250ade97090 /bin/bash

Příkazový řádek se změní na znaménko "#". Teď jste v kontejneru Dockeru založeném na Linuxu. Když zadáte ls , zobrazí se aktuální adresář Linuxu uvnitř kontejneru:

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

Pokud chcete kontejner opustit, zadejte příkaz exit .

Omezení kontejneru sestavení sady Azure Sphere SDK

Kontejner sestavení sady Azure Sphere SDK je navržený jenom pro sestavování balíčků Azure Sphere. Není určen pro spouštění příkazů Azure CLI, obnovení nebo zkušební načtení zařízení ani ladění. Kontejner nemá přístup k funkcím USB.

Omezení kontejneru Dockeru Linux

Kontejner Dockeru Pro Linux není totéž jako úplná instalace Linuxu. Nemůžete například spouštět aplikace grafického uživatelského rozhraní pro Linux v kontejneru Dockeru Linux.

Použití vícefázových kontejnerů sestavení k omezení závislostí

Funkce vícefázového sestavení Dockeru umožňuje použít v souboru Dockerfile více příkazů FROM, abyste snížili závislosti. Každá instrukce FROM může používat jiný základ a každá z nich začíná novou fázi sestavení.

Další informace o vícefázových buildech Dockeru najdete v tématu Použití vícefázových sestavení.

Docker doporučuje vícefázová sestavení jako osvědčený postup. Další informace o osvědčených postupech pro Docker najdete v úvodní příručce k osvědčeným postupům pro Dockerfile.

Přidání smysluplného názvu do fáze pomocí argumentu AS

Ve výchozím nastavení nejsou fáze pojmenované, ale mají číslo ID. Soubor Dockerfile můžete lépe přečíst tak, že do fáze přidáte smysluplný název tak, že připojíte AS a název. Příklad:

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

Další informace o použití argumentu AS ve vícefázových příkazech najdete v tématu Pojmenování fází sestavení.

Osvědčeným postupem vytvoření cíle se smysluplným názvem

Když vytváříte cíl, můžete mu dát smysluplný název pomocí možnosti --tag . Smysluplné názvy jsou užitečné. Příklad:

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

Další informace o používání názvů s příkazem docker build najdete v referenčních informacích k sestavení Dockeru.