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

  • 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 lingkungan NODE_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.

Cuplikan layar aplikasi sampel di browser

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:

Cuplikan layar aplikasi sampel yang diperbarui di browser

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.