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.
Buat wadah baru berdasarkan wadah mcr.microsoft.com/azurespheresdk.
Mengkloning repo sampel Azure Sphere dari GitHub.
Buat direktori untuk menyimpan sampel Anda saat dibuat.
Buat variabel lingkungan untuk menentukan sampel yang ingin Anda susun.
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:
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.Beri kontainer nama yang lebih sederhana menggunakan opsi tersebut
--name
. Perintahrun
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 menggunakandocker run
perintah lagi pada wadah tanpa menyusunnya kembali, selama Docker Desktop berjalan.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.