Tutorial: Mengotomatiskan build gambar kontainer saat gambar dasar diperbarui di registri kontainer pribadi lainnya
ACR Tasks mendukung build gambar 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 kontainer Azure lainnya. Anda juga dapat mencoba tutorial untuk membuat tugas ACR yang memicu build gambar ketika gambar dasar didorong ke registri kontainer Azure yang sama.
Dalam tutorial ini:
- Menyusun gambar dasar dalam registri dasar
- Membuat tugas build aplikasi di registri lain 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
Selain registri kontainer yang dibuat untuk tutorial sebelumnya, Anda perlu membuat registri untuk menyimpan gambar dasar. Jika mau, buat registri kedua di lokasi yang berbeda dari registri asli.
Mengonfigurasi lingkungan
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.
BASE_ACR=<base-registry-name> # The name of your Azure container registry for base images
ACR_NAME=<registry-name> # The name of your Azure container registry for application images
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. Skenario ini mencerminkan alur kerja pengembangan untuk mengelola gambar dasar dalam registri kontainer pribadi umum saat membuat gambar aplikasi di registri lain. Gambar dasar dapat menentukan sistem operasi umum dan kerangka kerja yang digunakan oleh tim, atau bahkan komponen layanan umum.
Misalnya, pengembang yang mengembangkan gambar aplikasi dalam registri mereka sendiri dapat mengakses serangkaian gambar dasar yang dikelola dalam registri dasar umum. Registri dasar dapat berada di wilayah lain atau bahkan direplikasi secara geografis.
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 Azure yang berbeda.
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. Dalam contoh ini, gambar didorong ke registri gambar dasar.
az acr build --registry $BASE_ACR --image baseimages/node:15-alpine --file Dockerfile-base .
Membuat tugas untuk melacak gambar dasar privat
Selanjutnya, buat tugas di registri gambar aplikasi dengan az acr task create, yang mengaktifkan identitas terkelola. Identitas terkelola digunakan dalam langkah-langkah selanjutnya sehingga tugas mengautentikasi dengan registri gambar dasar.
Contoh ini menggunakan identitas yang ditetapkan sistem, tetapi Anda dapat membuat dan mengaktifkan identitas terkelola yang ditetapkan pengguna untuk skenario tertentu. Untuk detailnya, lihat Autentikasi lintas registri dalam tugas ACR menggunakan identitas yang dikelola Azure.
az acr task create \
--registry $ACR_NAME \
--name baseexample2 \
--image helloworld:{{.Run.ID}} \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
--file Dockerfile-app \
--git-access-token $GIT_PAT \
--arg REGISTRY_NAME=$BASE_ACR.azurecr.io \
--assign-identity
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 gambar dasar:
FROM ${REGISTRY_NAME}/baseimages/node:15-alpine
Konfigurasi ini memudahkan untuk mensimulasikan patch kerangka kerja di gambar dasar nanti dalam tutorial ini.
Memberikan izin pull identitas ke registri dasar
Untuk memberikan izin identitas terkelola tugas untuk menarik gambar dari registri gambar dasar, pertama-tama jalankand az acr task show untuk mendapatkan ID pokok layanan identitas. Kemudian jalankan az acr show untuk mendapatkan ID sumber daya dari registri dasar:
# Get service principal ID of the task
principalID=$(az acr task show --name baseexample2 --registry $ACR_NAME --query identity.principalId --output tsv)
# Get resource ID of the base registry
baseregID=$(az acr show --name $BASE_ACR --query id --output tsv)
Tetapkan izin pull identitas terkelola ke registri dengan menjalankan az role assignment create:
az role assignment create \
--assignee $principalID \
--scope $baseregID --role acrpull
Tambahkan kredensial registri target ke tugas
Jalankan az acr task credential add untuk menambahkan kredensial ke tugas. Lewati parameter --use-identity [system]
untuk menunjukkan bahwa identitas terkelola yang ditetapkan sistem tugas dapat mengakses kredensial.
az acr task credential add \
--name baseexample2 \
--registry $ACR_NAME \
--login-server $BASE_ACR.azurecr.io \
--use-identity [system]
Menjalankan tugas secara manual
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 baseexample2
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.
az acr task list-runs --registry $ACR_NAME --output table
UN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- ------------ -------------------- ----------
ca12 baseexample2 linux Succeeded Manual 2020-11-21T00:00:56Z 00:00:36
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
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 $BASE_ACR --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.
az acr task list-runs --registry $ACR_NAME --output table
PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- ------------ -------------------- ----------
ca13 baseexample2 linux Succeeded Image Update 2020-11-21T00:06:00Z 00:00:43
ca12 baseexample2 linux Succeeded Manual 2020-11-21T00:00:56Z 00:00:36
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
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 "ca13").
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. Sekarang, lanjutkan ke tutorial berikutnya untuk mempelajari cara memicu tugas pada jadwal yang ditentukan.