Aracılığıyla paylaş


Azure Sphere uygulamaları derlemek için kapsayıcıları kullanma

Not

Bu konuda, bir kapsayıcıda Azure Sphere uygulamaları oluşturmak için Windows için Docker Desktop'ın nasıl kullanılacağı açıklanmaktadır. Linux üzerinde bir Docker kapsayıcısında uygulama oluşturmak için, Microsoft Yapıt Kayıt Defteri veya MAR'dan (Microsoft Container Registry veya MCR olarak da bilinir) aynı azurespheresdk kapsayıcısını kullanabilirsiniz.

Docker Desktop'ı yükleme

Docker'ı kullanarak Azure Sphere SDK'sı önceden yüklenmiş tek başına bir Linux kapsayıcısı çalıştırabilirsiniz. Bu görüntü kendi dağıtımlarınız için temel olarak da kullanılabilir. Görüntü etiketi, içerdiği SDK sürümüne başvurur.

Docker kapsayıcısını indirip çalıştırabilmeniz için önce Docker Desktop'ı Windows veya Linux'a yüklemeniz gerekir.

Windows için Docker Desktop'ı yükledikten sonra Hyper-V ve Kapsayıcılar Windows özelliklerini etkinleştirdiğinizden emin olun. Yüklemeden sonra yeniden başlatmanız gerekebilir.

Yüklendikten sonra Windows Başlat menüsünden veya masaüstünüzde eklenen kısayol simgesinden Docker Desktop'ı başlatın.

Linux, Windows'ta Docker Desktop için varsayılan kapsayıcı türüdür. Azure Sphere, Linux kapsayıcılarını kullanır. Linux kapsayıcılarını çalıştırmak için Docker'ın doğru daemon'u hedeflediğinden emin olmanız gerekir. Linux'un geçerli varsayılan kapsayıcı türü olduğunu doğrulamak için sistem tepsisindeki Docker balina simgesine sağ tıklayın. Windows kapsayıcılarına geçiş seçeneğini görüyorsanız Linux daemon'unu zaten hedeflemiş olursunuz. Windows kapsayıcısındaysanız, sistem tepsisindeki Docker balina simgesine sağ tıkladığınızda eylem menüsünden Linux kapsayıcılarına geç'i seçerek bunu değiştirebilirsiniz. Daha fazla bilgi için bkz. Windows ve Linux kapsayıcıları arasında geçiş yapma.

Not

Docker Desktop balina simgesi animasyonunun durmasını bekleyin. Simge gizli Bildirimler alanında olabilir. Docker Desktop durumunu görmek için simgenin üzerine gelin.

Örnek uygulamalar oluşturmak için Azure Sphere SDK derleme ortamı kapsayıcısını kullanma

Kapsayıcıyı girerek ve komut vererek etkileşimli olarak kullanabilirsiniz; Ancak, uygulamalarınızı Docker'ın özgün Azure Sphere görüntüsünü temel alan özel bir görüntü oluşturmak için kullanabileceği bir dosyada derlemek için gereken adımları yakalamak daha verimlidir. Bu, derleme işleminin yinelenebilir ve tutarlı olmasını sağlar. Varsayılan olarak bu dosya Dockerfile olarak adlandırılmalıdır ve docker komutunun çalıştırıldığı $PATH olmalıdır.

Aşağıdaki adımlar, Azure Sphere örnekleri oluşturmak için Dockerfile yönergeleri oluşturmaya yönelik bir ana hat sağlar. Bu adımları kendi ihtiyaçlarınıza göre ayarlayabilirsiniz.

  1. mcr.microsoft.com/azurespheresdk kapsayıcısını temel alan yeni bir kapsayıcı oluşturun.

  2. GitHub'dan Azure Sphere örnek deposunu kopyalayın.

  3. Örneğinizi oluşturulduğunda içinde depolamak için bir dizin oluşturun.

  4. Oluşturmak istediğiniz örneği belirtmek için bir ortam değişkeni oluşturun.

  5. Örneği oluşturmak ve belirtilen dizine yerleştirmek için CMake'yi çalıştırın.

Örnek oluşturmak için Dockerfile oluşturma

Azure Sphere görüntüsünü temel alan ancak özel derleme işlevselliğine sahip bir Docker görüntüsü oluşturmak için, aşağıdaki Docker yönergelerini içeren bir metin dosyası (dosya uzantısı olmadan) oluşturun:

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

Bu dosya, oluşturulacak örneği belirtmek için ENV ortam değişkenini kullanır. HelloWorld/HelloWorld_HighLevelApp'dan farklı bir örnek oluşturmak için ENV için yeni bir değer ayarlayın.

Dockerfile yönergeleri hakkında daha fazla ayrıntı için bkz. Dockerfile yönergelerinin satır satır tartışması .

Dockerfile kullanarak varsayılan örnek uygulamayı oluşturma

Özel bir Dockerfile kullanarak örnek uygulama oluşturmak için üç adım gerekir:

  1. Dockerfile'daki görüntüyü PowerShell, Windows Komut İstemi veya Linux komut kabuğu gibi bir komut satırı arabirimi kullanarak oluşturun:

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

    --target seçeneği, çok aşamalı derlemenin hangi bölümünün kullanılacağını belirtir. --tag seçeneği görüntünün adını belirtir ve yalnızca küçük harfle yazılmalıdır. Docker görüntüleri her zaman yalnızca küçük harf kullanmalıdır. ile --tagbir ad belirtmezseniz, resim üzerinde çalışması kolay olmayan 12 basamaklı bir sayıya sahip olur. Komutun sonundaki dönemi unutmayın. Komutunu kullanarak docker images görüntüleri listeleyebilirsiniz.

    Docker, "Dockerfile" adlı dosyayı temel alarak azsphere-sampleapp-build adlı bir görüntü oluşturur. Dockerfile'ınız başka bir adla adlandırılıyorsa, adı belirtmek için seçeneğini kullanın --file .

  2. seçeneğini kullanarak --name kapsayıcıya daha basit bir ad verin. run komutu kapsayıcıyı girer ve ENV ortam değişkeni tarafından belirtilen örneği oluşturur. Bu komutu girmek için komut satırı arabirimini kullanın:

    docker run --name hello_hl azsphere-sampleapp-build
    

    Örnek uygulama (HelloWorld/HelloWorld_HighLevelApp) oluşturulur ve kapsayıcının /build içindeki dizine yerleştirilir. Kapsayıcının çalışması tamamlandığında, kapsayıcı çıkar ve sizi komut satırı arabirimine geri götürür.

    Not

    Bu komut, herhangi bir etkileşim olmadan uygulamayı oluşturur ve derleme tamamlandıktan sonra kapsayıcıdan çıkar. Siz çıktıktan sonra kapsayıcı hala etkindir. Bunun nedeni veya --rm seçeneklerini belirtmemiş olmanızdır-it. Docker Desktop çalıştığı sürece kapsayıcıyı yeniden oluşturmadan komutunu daha sonra yeniden kullanabilirsiniz docker run .

  3. Derlemenizin sonuçlarını kapsayıcınızın içinden konak makine ortamınıza kopyalayın. Bu komutu girmek için komut satırı arabirimini kullanın:

    docker cp hello_hl:/build .
    

    Bu komut, hello_h1 kapsayıcısının içindeki dizinin içeriğini/build, komutu yayımladığınız konak makinenizdeki dizine kopyalar. Dizin /build , örneğin derlenecek çalışma dizini (WORKDIR) olarak belirtilir. Kapsayıcının dışında olduğunuzu ancak docker cp komutunu kullanarak bu kapsayıcıya komutlar gönderdiğinizi unutmayın. Komutun sonundaki dönemi unutmayın.

Özel Dockerfile kullanarak farklı bir örnek oluşturma

GpIO örneği gibi farklı bir örnek oluşturmak için GPIO örneğinin yolunu sağlayın.

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

Derleme tamamlandıktan sonra, sonucu kapsayıcınızın içinden konak makine ortamınıza kopyalayın:

docker cp gpio_hl:/build .

Komutun sonundaki dönemi unutmayın.

Paketiniz konak makine ortamınıza kopyalandıktan sonra, uygulamanızı dağıtmak için Windows veya Linux'tan Azure CLI komutlarını kullanabilirsiniz. Daha fazla bilgi için bkz. Uygulamayı dağıtma.

Bir kapsayıcıdan USB üzerinden cihaz etkileşimi desteklenmez.

Dockerfile yönergelerinin satır satır tartışması

Örnek oluşturmak için Dockerfile oluşturma bölümünde oluşturulan Dockerfile'ın her bölümü aşağıda açıklanmıştır.

Birden çok derlemeye hazırlanma

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

Bu satır, özgün microsoft.com/azurespheresdk kapsayıcısını temel alan azsphere-samples-repo adlı yeni bir derleme ayarlar.

Azure Sphere örneklerini indirme

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

Bu satır, Azure Sphere örnek deposundaki tüm örnekleri klonlar.

Başka bir hedeflenebilir çok aşamalı derleme ekleme

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

Bu satır , azsphere-samples-repo derlemesini temel alan yeni bir derleme ekler.

Kapsayıcının içindeki çalışma dizinini ayarlama

RUN mkdir /build
WORKDIR /build

Bu satırlar yeni bir çalışma dizini oluşturur.

Örneği belirtmek için varsayılan ortam değişkeni oluşturma

ENV sample=HelloWorld/HelloWorld_HighLevelApp

Bu satır, oluşturulacak örneği belirten bir ortam değişkeni oluşturur. Bu durumda, HelloWorld_HighLevelApp örneğidir. Ortam değişkeni, herhangi bir örnek adı ve yolu belirtmek için geçersiz kılınabilir.

Paket oluşturmak için CMake ve Ninja'yi çalıştırın

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

Bu bölümde, paketi derlemek için Ninja çağrılırken kullanılan parametreleri belirtmek için CMake kullanılır.

Derleme tamamlandıktan sonra kapsayıcı çalışmayı durdurur.

Docker ipuçları

Bu ipuçları Docker ile daha etkili çalışmanıza yardımcı olabilir.

Temel kapsayıcıyı etkileşimli olarak keşfetmek için docker run komutunu kullanın

Bu komutu girmek için komut satırı arabirimini kullanın:

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

Bu örnekte, mcr.microsoft.com/azurespheresdk kapsayıcının oluşturulduğu görüntünün adıdır. seçeneğinin --rm çalıştırıldıktan sonra kapsayıcıyı kapattığını ve seçeneğinin -it kapsayıcıya etkileşimli erişimi belirttiğini unutmayın.

Azure Sphere SDK derleme ortamı Docker kapsayıcısı Microsoft Yapıt Kayıt Defteri (MAR) tarafından sağlanır ve genel kullanıma sunulur.

Kapsayıcı zaten yerel makinenizdeyse, yeniden indirilmeyecektir.

İndirme ve kurulum birkaç dakika sürebilir. Derleme ortamı, Azure Sphere Linux SDK'sını kullanarak paket oluşturmak için gereken her şeyi içerir.

run Komut tamamlandıktan sonra komut isteminiz "#" işaretine dönüşür. Artık Linux tabanlı bir Docker kapsayıcısı içindesiniz. ls yazdığınızda kapsayıcının içindeki geçerli Linux dizini şu döküme benzer şekilde gösterilir:

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

Kapsayıcıdan çıkmak için yazın exit . Kapsayıcı artık kullanılamaz ve bu komutla kapsayıcıyı yeniden oluşturmanız gerekir:

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

seçeneğini kullanmazsanız --rm , çıkış yaptığınızda kapsayıcı silinmez.

Kapsayıcı belirleme

Yeni bir kapsayıcı oluşturduğunuzda gibi bir kimliği a250ade97090 olur (kimliğiniz farklı olacaktır). Birçok Docker komutu için microsoft.com/azurespheresdk adresi yerine kimliği kullanmanız gerekir.

Bu komutu kullanarak sisteminizdeki kapsayıcılar hakkındaki temel bilgilerin tipik bir listesi aşağıda verilmiştir:

docker ps --all

Sonuç şuna benzer olacaktır:

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

Kimliğiniz farklı olacaktır. Docker'ın kapsayıcı sahibi için rastgele adlar oluşturduğunu unutmayın. Bu örnekte yalnızca bir kapsayıcı olduğunu unutmayın.

Kapsayıcı içinde çalışma

Run komutunu kullanmadan makinenizdeki bir kapsayıcının içinde çalışmak istiyorsanız, şunu yazarak exec komutunu kapsayıcı kimliğiyle ve çalıştırmak istediğiniz kapsayıcıdaki betikle (/bin/bash) kullanın:

docker exec -t a250ade97090 /bin/bash

Komut isteminiz "#" işaretine dönüşür. Artık Linux tabanlı bir Docker kapsayıcısındasınız. ls yazdığınızda kapsayıcının içindeki geçerli Linux dizini gösterilir:

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

Kapsayıcıdan çıkmak için komutunu yazın exit .

Azure Sphere SDK derleme kapsayıcısı sınırlamaları

Azure Sphere SDK derleme kapsayıcısı yalnızca Azure Sphere paketlerini derlemek için tasarlanmıştır. Azure CLI komutlarını çalıştırmak, cihazları kurtarmak veya dışarıdan yüklemek ya da hata ayıklamak için tasarlanmamıştır . Kapsayıcının USB işlevlerine erişimi yok.

Docker Linux kapsayıcı sınırlamaları

Docker Linux kapsayıcısı, Linux'ın tam yüklemesi ile aynı değildir. Örneğin, Linux GUI uygulamalarını bir Docker Linux kapsayıcısında çalıştıramazsınız.

Bağımlılıkları azaltmak için çok aşamalı derleme kapsayıcıları kullanma

Docker çok aşamalı derleme özelliği, bağımlılıkları azaltmak için Dockerfile'ınızda birden çok FROM deyimi kullanmanıza olanak tanır. Her FROM yönergesi farklı bir temel kullanabilir ve her biri derlemenin yeni bir aşamasına başlar.

Docker çok aşamalı derlemeleri hakkında daha fazla bilgi için bkz. Çok aşamalı derlemeleri kullanma.

Çok aşamalı derlemeler, Docker tarafından en iyi uygulama olarak önerilir. Docker en iyi yöntemleri hakkında daha fazla bilgi için bkz. Dockerfile En İyi Yöntemleri Giriş Kılavuzu.

AS bağımsız değişkeniyle aşamanıza anlamlı bir ad ekleyin

Varsayılan olarak, aşamalar adlandırılmış değildir, ancak bir kimlik numarasına sahiptir. As ve bir ad ekleyerek aşamaya anlamlı bir ad ekleyerek Dockerfile'ınızı daha okunabilir hale getirebilirsiniz. Örneğin:

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

Çok aşamalı komutlarda AS bağımsız değişkenini kullanma hakkında daha fazla bilgi için bkz. Derleme aşamalarınızı adlandırma.

En iyi uygulama olarak hedefi anlamlı bir adla oluşturma

Bir hedef oluşturduğunuzda , --tag seçeneğini kullanarak ona anlamlı bir ad verebilirsiniz. Anlamlı adlar yararlıdır. Örneğin:

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

Adları Docker derleme komutuyla kullanma hakkında daha fazla bilgi için bkz. Docker derleme başvurusu.