Tutorial: Mengotomatiskan build gambar kontainer saat gambar dasar diperbarui di registri kontainer Azure
ACR Tasks mendukung build gambar kontainer otomatis saat gambar dasar kontainer diperbarui, seperti saat Anda menambal OS atau kerangka kerja aplikasi di salah satu gambar dasar Anda.
Dalam tutorial ini, Anda mempelajari cara membuat tugas ACR yang memicu build di cloud saat gambar dasar kontainer didorong ke registri yang sama. Anda juga dapat mencoba tutorial untuk membuat tugas ACR yang memicu build gambar ketika gambar dasar didorong ke registri kontainer Azure lainnya.
Dalam tutorial ini:
- Menyusun gambar dasar
- Membuat gambar aplikasi di registri yang sama untuk melacak gambar dasar
- Perbarui gambar dasar untuk memicu tugas gambar aplikasi
- Tampilkan tugas yang dipicu
- Verifikasi gambar aplikasi yang diperbarui
Prasyarat
Selesaikan tutorial sebelumnya
Tutorial ini mengasumsikan Anda telah mengkonfigurasikan lingkungan Anda dan menyelesaikan langkah-langkah dalam dua tutorial pertama dalam seri, di mana Anda:
- Membuat Azure Container Registry
- Repositori sampel fork
- Mengkloning sampel repositori
- Membuuat token akses pribadi GitHub
Jika Anda belum melakukannya, selesaikan tutorial berikut sebelum melanjutkan:
Menyusun gambar kontainer di cloud dengan Tugas Azure Container Registry
Otomatiskan penyusunan gambar kontainer di cloud dengan Tugas Azure Container Registry
Mengonfigurasi lingkungan
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih memilih untuk menjalankan perintah referensi CLI secara lokal, pasang Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
- Artikel ini memerlukan Azure CLI versi 2.0.46 atau versi terbaru. Jika ingin menggunakan Azure Cloud Shell, versi terbaru sudah terinstal.
Isi variabel lingkungan shell ini dengan nilai yang sesuai untuk lingkungan Anda. Langkah ini tidak benar-benar diperlukan, tetapi membuat menjalankan perintah CLI Azure multibaris dalam tutorial ini sedikit lebih mudah. Jika tidak mengisi variabel lingkungan ini, Anda harus mengganti setiap nilai secara manual di mana pun variabel tersebut muncul dalam perintah contoh.
ACR_NAME=<registry-name> # The name of your Azure container registry
GIT_USER=<github-username> # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the second tutorial
Skenario pembaruan gambar dasar
Tutorial ini memandu Anda melalui skenario pembaruan gambar dasar di mana gambar dasar dan gambar aplikasi dipertahankan dalam satu registri.
Sampel kode mencakup dua Dockerfiles: gambar aplikasi, dan gambar yang ditentukan sebagai basisnya. Di bagian berikut, Anda membuat tugas ACR yang secara otomatis memicu build gambar aplikasi saat versi baru gambar dasar didorong ke registri kontainer yang sama.
Aplikasi Dockerfile: Aplikasi web Node.js kecil yang merender halaman web statis yang menampilkan versi Node.js yang mendasarinya. String versi disimulasikan: ini menampilkan konten variabel lingkungan,
NODE_VERSION
, yang didefinisikan dalam gambar dasar.Dasar Dockerfile: Gambar yang
Dockerfile-app
menentukan sebagai dasarnya. Ini sendiri didasarkan pada gambar Simpul, dan termasuk variabel lingkunganNODE_VERSION
.
Di bagian berikut, Anda membuat tugas, memperbarui nilai NODE_VERSION
di Dockerfile gambar dasar, lalu menggunakan Tugas ACR untuk menyusun gambar dasar. Ketika tugas ACR mendorong gambar dasar baru ke registri Anda, ini secara otomatis memicu penyusunan gambar aplikasi. Secara opsional, Anda menjalankan gambar kontainer aplikasi secara lokal untuk melihat berbagai string versi dalam gambar yang dibuat.
Dalam tutorial ini, tugas ACR Anda menyusun dan mendorong gambar kontainer aplikasi yang ditentukan dalam Dockerfile. ACR Tasks juga dapat menjalankan tugas multi-langkah, menggunakan file YAML untuk menentukan langkah-langkah dalam membangun, mendorong, dan secara opsional menguji beberapa kontainer.
Menyusun gambar dasar
Mulai dengan menyusun gambar dasar dengan tugas cepat Tugas ACR, menggunakan az acr build. Seperti yang dibahas dalam tutorial pertama dalam rangkaiannya, proses ini tidak hanya menyusun gambar, tetapi mendorongnya ke registri kontainer Anda jika build berhasil.
az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .
Buat tugas
Selanjutnya, buat tugas dengan az acr task create:
az acr task create \
--registry $ACR_NAME \
--name baseexample1 \
--image helloworld:{{.Run.ID}} \
--arg REGISTRY_NAME=$ACR_NAME.azurecr.io \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
--file Dockerfile-app \
--git-access-token $GIT_PAT
Tugas ini serupa dengan tugas yang dibuat di tutorial sebelumnya. Ini menginstruksikan Tugas ACR untuk memicu penyusunan gambar ketika komit didorong ke repositori yang ditentukan oleh --context
. Meskipun Dockerfile digunakan untuk membangun gambar dalam tutorial sebelumnya menentukan gambar dasar publik (FROM node:15-alpine
), Dockerfile dalam tugas ini, Dockerfile-app, menentukan gambar dasar dalam registri yang sama:
FROM ${REGISTRY_NAME}/baseimages/node:15-alpine
Konfigurasi ini memudahkan untuk mensimulasikan patch kerangka kerja di gambar dasar nanti dalam tutorial ini.
Menyusun kontainer aplikasi
Gunakan az acr task run untuk memicu tugas secara manual dan menyusun gambar aplikasi. Langkah ini diperlukan agar tugas melacak ketergantungan gambar aplikasi pada gambar dasar.
az acr task run --registry $ACR_NAME --name baseexample1
Setelah tugas selesai, perhatikan Run ID (misalnya, "da6") jika Anda ingin menyelesaikan langkah opsional berikut.
Opsional: Jalankan kontainer aplikasi secara lokal
Jika Anda bekerja secara lokal (bukan di Cloud Shell), dan Anda telah menginstal Docker, jalankan kontainer untuk melihat aplikasi yang dirender di browser web sebelum Anda membangun kembali gambar dasarnya. Jika Anda menggunakan Cloud Shell, lewati bagian ini (Cloud Shell tidak mendukung az acr login
atau docker run
).
Pertama, otentikasi ke registri kontainer Anda dengan az acr login:
az acr login --name $ACR_NAME
Sekarang, jalankan kontainer secara lokal dengan docker run
. Ganti <run-id> dengan ID Jalankan yang ditemukan di output dari langkah sebelumnya (misalnya, "da6"). Contoh ini menamai kontainer myapp
dan menyertakan parameter --rm
untuk menghapus kontainer saat Anda menghentikannya.
docker run -d -p 8080:80 --name myapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>
Navigasi ke http://localhost:8080
di browser Anda, dan Anda akan melihat versi Node.js yang dirender di halaman web, serupa dengan yang berikut ini. Di langkah berikutnya, Anda menabrak versi dengan menambahkan "a" ke string versi.
Untuk menghentikan dan menghapus kontainer, jalankan perintah berikut:
docker stop myapp
Cantumkan build
Berikutnya, cantumkan tugas yang dijalankan agar Tugas ACR telah selesai untuk registri Anda menggunakan perintah az acr task list-runs:
az acr task list-runs --registry $ACR_NAME --output table
Jika Anda menyelesaikan tutorial sebelumnya (dan tidak menghapus registri), Anda akan melihat output yang serupa dengan yang berikut ini. Perhatikan jumlah tugas yang dijalankan, dan RUN ID terbaru, sehingga Anda dapat membandingkan output setelah memperbarui gambar dasar di bagian berikutnya.
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- --------- -------------------- ----------
cax baseexample1 linux Succeeded Manual 2020-11-20T23:33:12Z 00:00:30
caw taskhelloworld linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:29
cav example2 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:55
cau example1 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:40
cat taskhelloworld linux Succeeded Manual 2020-11-20T23:07:29Z 00:00:27
Memperbarui gambar dasar
Di sini Anda mensimulasikan patch kerangka kerja dalam gambar dasar. Edit basis Dockerfile, dan tambahkan "a" setelah nomor versi yang ditentukan dalam NODE_VERSION
:
ENV NODE_VERSION 15.2.1a
Jalankan tugas cepat untuk menyusun gambar dasar yang dimodifikasi. Perhatikan Run ID dalam output.
az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .
Setelah penyusunan selesai dan tugas ACR telah mendorong gambar dasar baru ke registri Anda, ini akan memicu penyusunan gambar aplikasi. Mungkin perlu beberapa saat agar tugas yang Anda buat sebelumnya dapat memicu build gambar aplikasi, karena harus mendeteksi gambar dasar yang baru disusun dan didorong.
Daftar build yang diperbarui
Sekarang setelah Anda memperbarui gambar dasar, cantumkan pengoperasian tugas Anda lagi agar dapat dibandingkan dengan daftar sebelumnya. Jika pada awalnya output tidak berbeda, jalankan perintah secara berkala untuk melihat pengoperasian tugas baru muncul dalam daftar.
az acr task list-runs --registry $ACR_NAME --output table
Outputnya mirip dengan yang berikut ini. TRIGGER untuk build yang terakhir dieksekusi harus berstatus "Pembaruan Gambar", yang menunjukkan bahwa tugas dimulai oleh tugas cepat Anda dari gambar dasar.
Run ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- ------------ -------------------- ----------
ca11 baseexample1 linux Succeeded Image Update 2020-11-20T23:38:24Z 00:00:34
ca10 taskhelloworld linux Succeeded Image Update 2020-11-20T23:38:24Z 00:00:24
cay linux Succeeded Manual 2020-11-20T23:38:08Z 00:00:22
cax baseexample1 linux Succeeded Manual 2020-11-20T23:33:12Z 00:00:30
caw taskhelloworld linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:29
cav example2 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:55
cau example1 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:40
cat taskhelloworld linux Succeeded Manual 2020-11-20T23:07:29Z 00:00:27
Jika Anda ingin melakukan langkah opsional berikut menjalankan kontainer yang baru disusun untuk melihat nomor versi yang diperbarui, perhatikan nilai RUN ID untuk build yang dipicu Pembaruan Gambar (dalam output sebelumnya, ini adalah "ca11").
Opsional: Jalankan gambar yang baru disusun
Jika Anda bekerja secara lokal (bukan di Cloud Shell), dan Anda telah menginstal Docker, jalankan gambar aplikasi baru setelah build selesai. Ganti <run-id>
dengan RUN ID yang Anda peroleh di langkah sebelumnya. Jika Anda menggunakan Cloud Shell, lewati bagian ini (Cloud Shell tidak mendukung docker run
).
docker run -d -p 8081:80 --name updatedapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>
Navigasikan ke http://localhost:8081 di browser Anda, dan Anda akan melihat versi nomor Node.js yang diperbarui (dengan "a") di halaman web:
Hal yang perlu dicatat adalah Anda memperbarui gambar dasar dengan nomor versi baru, tetapi gambar aplikasi yang dibangun terakhir menampilkan versi baru. Tugas ACR mengambil perubahan Anda ke gambar dasar, dan menyusun kembali gambar aplikasi Anda secara otomatis.
Untuk menghentikan dan menghapus kontainer, jalankan perintah berikut:
docker stop updatedapp
Langkah berikutnya
Dalam tutorial ini, Anda belajar cara menggunakan tugas untuk secara otomatis memicu build gambar kontainer ketika gambar dasar dari gambar tersebut telah diperbarui.
Untuk alur kerja lengkap guna mengelola gambar dasar yang berasal dari sumber umum, lihat Cara menggunakan dan memelihara konten umum dengan Azure Container Registry Tasks.
Sekarang, lanjutkan ke tutorial berikutnya untuk mempelajari cara memicu tugas pada jadwal yang ditentukan.