Bagikan melalui


Menggunakan wadah untuk membuat aplikasi Azure Sphere

Catatan

Topik ini menjelaskan cara menggunakan Docker Desktop untuk Windows untuk menyusun aplikasi Azure Sphere dalam wadah. Untuk membuat aplikasi dalam wadah Docker di Linux, Anda dapat menggunakan wadah azurespheresdk yang sama dari Registri Artefak Microsoft atau MAR (juga dikenal sebagai Microsoft Container Registry atau MCR).

Instal Docker Desktop

Anda dapat menggunakan Docker untuk menjalankan wadah Linux mandiri dengan Azure Sphere SDK yang telah diinstal sebelumnya. Gambar ini juga dapat digunakan sebagai basis untuk penyebaran Anda sendiri. Tag gambar merujuk ke versi SDK yang ada di dalamnya.

Sebelum dapat mengunduh dan menjalankan wadah Docker, Anda harus menginstal Docker Desktop di Windows atau Linux.

Setelah menginstal Docker Desktop untuk Windows, pastikan Anda mengaktifkan fitur Hyper-V dan Kontainer Windows. Anda mungkin perlu melakukan boot ulang setelah penginstalan.

Setelah diinstal, mulai Docker Desktop dari menu Mulai Windows atau dari ikon pintasan yang ditambahkan ke desktop Anda.

Linux adalah tipe kontainer default untuk Docker Desktop di Windows. Azure Sphere menggunakan wadah Linux. Untuk menjalankan kontainer Linux, Anda perlu memastikan Docker menargetkan daemon yang benar. Untuk memverifikasi bahwa Linux adalah tipe default kontainer saat ini, klik kanan ikon paus Docker di baki sistem. Jika Anda melihat Beralih ke wadah Windows, maka Anda sudah menargetkan daemon Linux. Jika Anda berada di wadah Windows, Anda dapat mengalihkan ini dengan memilih Beralih ke wadah Linux dari menu tindakan ketika Anda mengklik kanan ikon paus Docker di baki sistem. Untuk informasi selengkapnya, lihat Beralih antara wadah Windows dan Linux.

Catatan

Tunggu hingga animasi ikon paus Docker Desktop berhenti. Ikon mungkin berada di area Pemberitahuan tersembunyi. Arahkan mouse ke atas ikon untuk melihat status Docker Desktop.

Menggunakan wadah lingkungan build Azure Sphere SDK untuk membuat aplikasi sampel

Anda dapat menggunakan wadah secara interaktif dengan memasukkannya dan mengeluarkan perintah; namun, lebih efisien untuk mengambil langkah-langkah yang diperlukan untuk membuat aplikasi Anda dalam file yang dapat digunakan Docker untuk menyusun gambar kustom berdasarkan gambar Azure Sphere asli. Hal ini memastikan proses build dapat diulang dan konsisten. Secara default, file ini harus bernama Dockerfile dan berada di $PATH tempat perintah docker dijalankan.

Langkah-langkah berikut ini menyediakan kerangka untuk membuat instruksi Dockerfile untuk menyusun sampel Azure Sphere. Anda dapat menyesuaikan langkah-langkah ini untuk kebutuhan Anda sendiri.

  1. Buat wadah baru berdasarkan wadah mcr.microsoft.com/azurespheresdk.

  2. Mengkloning repo sampel Azure Sphere dari GitHub.

  3. Buat direktori untuk menyimpan sampel Anda saat dibuat.

  4. Buat variabel lingkungan untuk menentukan sampel yang ingin Anda susun.

  5. Jalankan CMake untuk menyusun sampel dan menempatkannya di direktori tertentu.

Membuat Dockerfile untuk sampel bangunan

Untuk menyusun gambar Docker berdasarkan gambar Azure Sphere tetapi dengan fungsionalitas build kustom, buat file teks (tanpa ekstensi file) dengan instruksi Docker berikut:

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

File ini menggunakan variabel lingkungan ENV untuk menentukan sampel yang akan dibuat. Tetapkan nilai baru untuk ENV untuk menyusun sampel yang berbeda dari HelloWorld/HelloWorld_HighLevelApp.

Lihat Diskusi baris demi baris tentang instruksi Dockerfile untuk detail selengkapnya tentang instruksi Dockerfile.

Menyusun aplikasi sampel default menggunakan Dockerfile

Ada tiga langkah yang diperlukan untuk menyusun aplikasi sampel menggunakan Dockerfile kustom:

  1. Susun gambar dari Dockerfile menggunakan antarmuka baris perintah seperti PowerShell, Windows Command Prompt, atau shell perintah Linux:

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

    Opsi menentukan --target bagian build multi-tahap mana yang akan digunakan. Opsi menentukan --tag nama gambar dan hanya harus huruf kecil. Gambar docker harus selalu menggunakan huruf kecil saja. Jika Anda tidak menentukan nama dengan --tag, gambar akan memiliki angka 12 digit yang tidak mudah dikerjakan. Jangan lupa periode di akhir perintah. Anda dapat mencantumkan gambar dengan perintah.docker images

    Docker akan menyusun gambar bernama azsphere-sampleapp-build berdasarkan file bernama "Dockerfile". Jika Dockerfile Anda diberi nama yang lain, gunakan --file opsi untuk menentukan nama.

  2. Beri kontainer nama yang lebih sederhana menggunakan opsi tersebut --name . Perintah run akan memasukkan wadah dan menyusun sampel yang ditentukan oleh variabel lingkungan ENV . Gunakan antarmuka baris perintah untuk memasukkan perintah ini:

    docker run --name hello_hl azsphere-sampleapp-build
    

    Aplikasi sampel (HelloWorld/HelloWorld_HighLevelApp) akan dibuat dan akan ditempatkan di direktori di /build dalam wadah. Ketika wadah selesai dijalankan, kontainer akan keluar dan membawa Anda kembali ke antarmuka baris perintah.

    Catatan

    Perintah ini menyusun aplikasi tanpa interaksi apa pun dan keluar dari kontainer setelah build selesai. Kontainer masih aktif setelah Anda keluar. Ini karena Anda tidak menentukan -it opsi atau --rm . Anda dapat menggunakan docker run perintah lagi pada wadah tanpa menyusunnya kembali, selama Docker Desktop berjalan.

  3. Salin hasil build Anda dari dalam wadah Anda ke lingkungan komputer host Anda. Gunakan antarmuka baris perintah untuk memasukkan perintah ini:

    docker cp hello_hl:/build .
    

    Perintah ini menyalin konten /build direktori di dalam wadah hello_h1 ke direktori di komputer host tempat Anda mengeluarkan perintah. /build Direktori ditentukan sebagai direktori kerja (WORKDIR) tempat sampel akan dikompilasi. Perhatikan bahwa Anda masih berada di luar wadah tetapi mengeluarkan perintah ke dalamnya menggunakan perintah docker cp . Jangan lupa periode di akhir perintah.

Menyusun sampel lain menggunakan Dockerfile kustom

Untuk menyusun sampel yang berbeda, misalnya, sampel GPIO, menyediakan jalur ke sampel GPIO.

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

Setelah build selesai, salin hasil dari dalam wadah Anda ke lingkungan komputer host Anda:

docker cp gpio_hl:/build .

Jangan lupa periode di akhir perintah.

Setelah paket disalin ke lingkungan komputer host, Anda dapat menggunakan perintah Azure CLI dari Windows atau Linux untuk menyebarkan aplikasi. Untuk informasi selengkapnya, lihat Menyebarkan Aplikasi.

Interaksi perangkat melalui USB dari wadah tidak didukung.

Diskusi baris demi baris tentang instruksi Dockerfile

Setiap bagian Dockerfile yang dibuat di Buat Dockerfile untuk sampel bangunan dijelaskan di bawah ini.

Mempersiapkan beberapa build

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

Baris ini menyiapkan build baru, azsphere-samples-repo, berdasarkan wadah microsoft.com/azurespheresdk asli.

Mengunduh sampel Azure Sphere

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

Garis ini mengkloning semua sampel dari repo sampel Azure Sphere.

Menambahkan build multi-tahap lain yang dapat ditargetkan

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

Baris ini menambahkan build baru berdasarkan build azsphere-samples-repo .

Mengatur direktori kerja di dalam wadah

RUN mkdir /build
WORKDIR /build

Baris ini membuat direktori kerja baru.

Membuat variabel lingkungan default untuk menentukan sampel

ENV sample=HelloWorld/HelloWorld_HighLevelApp

Baris ini membuat variabel lingkungan yang menentukan sampel yang akan dibuat. Dalam hal ini, ini adalah sampel HelloWorld_HighLevelApp. Variabel lingkungan dapat ditimpa untuk menentukan nama sampel dan jalur apa pun.

Jalankan CMake dan Ninja untuk membuat paket

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

Bagian ini menggunakan CMake untuk menentukan parameter yang digunakan saat memanggil Ninja untuk membuat paket.

Setelah build selesai, kontainer akan berhenti berjalan.

Tips docker

Tips ini dapat membantu Anda bekerja dengan Docker dengan lebih efektif.

Gunakan perintah jalankan docker untuk menjelajahi wadah dasar secara interaktif

Gunakan antarmuka baris perintah untuk memasukkan perintah ini:

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

Dalam contoh ini, mcr.microsoft.com/azurespheresdk adalah nama gambar tempat wadah dibuat. Perhatikan bahwa --rm opsi mematikan kontainer setelah berjalan dan -it opsi menentukan akses interaktif ke wadah.

Kontainer Docker lingkungan build Azure Sphere SDK disediakan oleh Registri Artefak Microsoft (MAR) dan tersedia untuk umum.

Jika kontainer sudah ada di komputer lokal Anda, kontainer tidak akan diunduh lagi.

Pengunduhan dan penyiapan mungkin memerlukan waktu beberapa menit. Lingkungan build mencakup semua yang diperlukan untuk membuat paket menggunakan SDK Azure Sphere Linux.

run Setelah perintah selesai, prompt perintah Anda akan berubah menjadi tanda "#". Sekarang Anda berada di dalam wadah Docker berbasis Linux. Mengetik ls akan memperlihatkan direktori Linux saat ini di dalam wadah, mirip dengan daftar ini:

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

Ketik exit untuk meninggalkan wadah. Wadah tidak akan tersedia lagi untuk Anda dan Anda perlu membuatnya lagi dengan perintah ini:

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

Jika Anda tidak menggunakan opsi, --rm wadah tidak akan dihapus saat Anda keluar.

Identifikasi kontainer

Ketika Anda membuat wadah baru, kontainer akan memiliki ID seperti a250ade97090 (ID Anda akan berbeda). Untuk banyak perintah Docker, Anda harus menggunakan ID dan bukan alamat microsoft.com/azurespheresdk .

Berikut adalah daftar umum informasi dasar tentang wadah di sistem Anda menggunakan perintah ini:

docker ps --all

Hasilnya akan terlihat mirip dengan ini:

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

ID Anda akan berbeda. Perhatikan bahwa Docker membuat nama acak untuk pemilik kontainer. Perhatikan bahwa dalam contoh ini, hanya ada satu wadah.

Bekerja di dalam wadah

Jika Anda ingin bekerja di dalam wadah di komputer Anda tanpa menggunakan perintah jalankan , gunakan perintah exec dengan ID wadah dan skrip dalam wadah yang ingin Anda jalankan (/bin/bash) dengan mengetik:

docker exec -t a250ade97090 /bin/bash

Prompt perintah Anda akan berubah menjadi tanda "#". Anda sekarang berada dalam wadah Docker berbasis Linux. Mengetik ls akan memperlihatkan direktori Linux saat ini di dalam wadah:

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

Untuk meninggalkan wadah, ketikkan exit perintah.

Batasan kontainer build Azure Sphere SDK

Kontainer build SDK Azure Sphere dirancang untuk membuat paket Azure Sphere saja. Ini tidak dirancang untuk menjalankan perintah Azure CLI, memulihkan atau memuat sisi perangkat, atau debugging. Kontainer tidak memiliki akses ke fungsi USB.

Batasan kontainer Docker Linux

Kontainer Docker Linux tidak sama dengan penginstalan lengkap Linux. Misalnya, Anda tidak dapat menjalankan aplikasi LINUX GUI dalam wadah Linux Docker.

Menggunakan wadah build multi-tahap untuk mengurangi dependensi

Fitur build multi-tahap Docker memungkinkan Anda menggunakan beberapa pernyataan FROM di Dockerfile untuk mengurangi dependensi. Setiap instruksi FROM dapat menggunakan basis yang berbeda, dan masing-masing dimulai tahap baru build.

Untuk informasi selengkapnya tentang build multi-tahap Docker, lihat Menggunakan build multi-tahap.

Build multi-tahap direkomendasikan oleh Docker sebagai praktik terbaik. Untuk informasi selengkapnya tentang praktik terbaik Docker, lihat Panduan Pengejaran untuk Praktik Terbaik Dockerfile.

Menambahkan nama yang bermakna ke tahap Anda dengan argumen AS

Secara default, tahapan tidak dinamai tetapi memiliki nomor ID. Anda bisa membuat Dockerfile Anda lebih mudah dibaca dengan menambahkan nama yang bermakna ke panggung dengan menambahkan AS dan nama. Misalnya:

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

Untuk informasi selengkapnya tentang menggunakan argumen AS dalam perintah multi-tahap, lihat Memberi nama tahapan build Anda.

Susun target dengan nama yang bermakna sebagai praktik terbaik

Ketika menyusun target, Anda dapat memberinya nama yang bermakna menggunakan opsi --tag . Nama yang bermakna berguna. Misalnya:

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

Untuk informasi selengkapnya tentang menggunakan nama dengan perintah build Docker, lihat referensi build Docker.