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.
mcr.microsoft.com/azurespheresdk kapsayıcısını temel alan yeni bir kapsayıcı oluşturun.
GitHub'dan Azure Sphere örnek deposunu kopyalayın.
Örneğinizi oluşturulduğunda içinde depolamak için bir dizin oluşturun.
Oluşturmak istediğiniz örneği belirtmek için bir ortam değişkeni oluşturun.
Ö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:
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--tag
bir ad belirtmezseniz, resim üzerinde çalışması kolay olmayan 12 basamaklı bir sayıya sahip olur. Komutun sonundaki dönemi unutmayın. Komutunu kullanarakdocker 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
.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 kullanabilirsinizdocker run
.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.