Öğretici: Azure kapsayıcı kayıt defterinde temel görüntü güncelleştirildiğinde kapsayıcı görüntüsü derlemelerini otomatikleştirme

ACR Görevleri , bir kapsayıcının temel görüntüsü güncelleştirildiğinde( örneğin, temel görüntülerinizden birinde işletim sistemine veya uygulama çerçevesine düzeltme eki uygularken) otomatik kapsayıcı görüntüsü derlemelerini destekler.

Bu öğreticide, kapsayıcının temel görüntüsü aynı kayıt defterine gönderildiğinde bulutta bir derlemeyi tetikleyen bir ACR görevi oluşturmayı öğreneceksiniz. Temel görüntü başka bir Azure kapsayıcı kayıt defterine gönderildiğinde görüntü derlemesini tetikleyen bir ACR görevi oluşturmak için bir öğretici de deneyebilirsiniz.

Bu öğreticide:

  • Temel görüntü oluşturma
  • Temel görüntüyü izlemek için aynı kayıt defterinde uygulama görüntüsü oluşturma
  • Uygulama görüntüsü görevini tetiklemek için temel görüntüyü güncelleştirme
  • Tetiklenen görevi görüntüleme
  • Güncelleştirilmiş uygulama görüntüsünü doğrulama

Önkoşullar

Önceki öğreticileri tamamlama

Bu öğreticide, ortamınızı zaten yapılandırdığınız ve serinin ilk iki öğreticisindeki adımları tamamladığınız varsayılır:

  • Azure kapsayıcı kayıt defteri oluşturma
  • Örnek deponun çatalını oluşturma
  • Örnek depoyu kopyalama
  • GitHub kişisel erişim belirteci oluşturma

Henüz yapmadıysanız devam etmeden önce aşağıdaki öğreticileri tamamlayın:

Azure Container Registry Görevleri ile bulutta kapsayıcı görüntüleri derleme

Azure Container Registry Görevleri ile kapsayıcı görüntüsü derlemelerini otomatik hale getirme

Ortamı yapılandırma

  • Bu makale, Azure CLI'nın 2.0.46 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanılıyorsa en son sürüm zaten yüklüdür.

Bu kabuk ortam değişkenlerini ortamınıza uygun değerlerle doldurun. Bu adımın yapılması kesinlikle zorunlu değildir ancak bu öğreticideki çok satırlı Azure CLI komutlarını yürütmeyi biraz daha kolaylaştırır. Bu ortam değişkenlerini doldurmazsanız, örnek komutlarda görünen her değeri el ile değiştirmeniz gerekir.

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

Temel görüntü güncelleştirme senaryosu

Bu öğreticide, temel görüntü ve uygulama görüntüsünün tek bir kayıt defterinde tutıldığı temel görüntü güncelleştirme senaryosunda size yol gösterilir.

Kod örneği iki Dockerfile: bir uygulama görüntüsü ve bunun temel olarak belirttiği bir görüntü. Aşağıdaki bölümlerde, temel görüntünün yeni bir sürümü aynı kapsayıcı kayıt defterine gönderildiğinde uygulama görüntüsünün bir derlemesini otomatik olarak tetikleyen bir ACR görevi oluşturursunuz.

  • Dockerfile-app: Temel alınan Node.js sürümünün görüntülendiği bir statik web sayfası işleyen küçük bir Node.js web uygulaması. Sürüm dizesinin simülasyonu yapılır ve bu, temel görüntüde tanımlanan NODE_VERSION ortam değişkeninin içeriğini görüntüler.

  • Dockerfile-base: Dockerfile-app tarafından kendi temeli olarak belirtilen görüntü. Bunun kendisi de Node görüntüsünü temel alır ve NODE_VERSION ortam değişkenini içerir.

Aşağıdaki bölümlerde bir görev oluşturacak, temel görüntü Dockerfile içinde NODE_VERSION değerini güncelleştirecek ve sonra da ACR Görevlerini kullanarak temel görüntü oluşturacaksınız. ACR görevi yeni temel görüntüyü kayıt defterinize gönderdikten sonra, uygulama görüntüsünün derlemesini otomatik olarak tetikler. İsteğe bağlı olarak, derleme görüntülerinde farklı sürüm dizeleri görmek için uygulama kapsayıcısı görüntüsünü yerel olarak çalıştırırsınız.

Bu öğreticide, ACR göreviniz bir Dockerfile içinde belirtilen bir uygulama kapsayıcı görüntüsü oluşturur ve gönderir. ACR Görevleri birden çok kapsayıcı oluşturma, gönderme ve isteğe bağlı olarak test etme adımlarını tanımlamak için YAML dosyası kullanarak çok adımlı görevleri de çalıştırabilir.

Temel görüntü oluşturma

az acr build komutunu kullanarak ACR Görevleri hızlı göreviyle temel görüntüyü oluşturarak başlayın. Serinin ilk öğreticisinde açıklandığı gibi, bu işlem yalnızca görüntüyü oluşturmakla kalmaz, oluşturma başarılı olduysa bunu kapsayıcınızın kayıt defterine de gönderir.

az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .

Görev oluşturma

Ardından, az acr task create ile bir görev oluşturun:

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

Bu görev, önceki öğreticide oluşturulan göreve benzer. ACR Görevlerine, işlemeler --context tarafından belirtilen depoya gönderildiğinde bir görüntü derlemesi tetiklemesini bildirir. Önceki öğreticide görüntüyü derlemek için kullanılan Dockerfile bir ortak temel görüntü ()FROM node:15-alpine belirtirken, bu görevdeki Dockerfile-app, aynı kayıt defterinde bir temel görüntü belirtir:

FROM ${REGISTRY_NAME}/baseimages/node:15-alpine

Bu yapılandırma, bu öğreticinin devamında temel görüntüde bir çerçeve düzeltme ekinin benzetimini kolaylaştırır.

Uygulama kapsayıcısını oluşturma

Görevi el ile tetikleyip uygulama görüntüsünü oluşturmak için az acr task run komutunu kullanın. Bu adım, görevin uygulama görüntüsünün temel görüntüdeki bağımlılığını izlemesi için gereklidir.

az acr task run --registry $ACR_NAME --name baseexample1

Görev tamamlandıktan sonra, aşağıdaki isteğe bağlı adımı tamamlamak istiyorsanız Run ID (örneğin, "da6") değerini not alın.

İsteğe bağlı: Uygulama kapsayıcısını yerel olarak çalıştırma

Cloud Shell'de değil de yerel olarak çalışıyorsanız ve Docker'ı yüklediyseniz, temel görüntüsünü oluşturmadan önce web tarayıcısında işlenen uygulamayı görmek için kapsayıcıyı çalıştırın. Cloud Shell kullanıyorsanız bu bölümü atlayın (Cloud Shell az acr login veya docker run komutunu desteklemez).

İlk olarak az acr login ile kapsayıcı kayıt defterinizde kimlik doğrulaması yapın:

az acr login --name $ACR_NAME

Şimdi docker run ile kapsayıcıyı yerel olarak çalıştırın. run-id değerini önceki adımdaki çıktıda bulunan Çalıştırma Kimliği ile değiştirin <(örneğin, "da6").> Bu örnek kapsayıcıyı myapp adlandırır ve durdurduğunuzda kapsayıcıyı kaldırmak için parametresini içerir --rm .

docker run -d -p 8080:80 --name myapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>

Tarayıcınızda http://localhost:8080 adresine gidin; aşağıdakine benzer biçimde web sayfasında işlenmiş Node.js sürüm numarasını görüyor olmalısınız. Sonraki adımlardan birinde, sürüm dizesine bir "a" ekleyerek sürümü yükseltirsiniz.

Tarayıcıda örnek uygulamanın ekran görüntüsü

Kapsayıcıyı durdurmak ve kaldırmak için aşağıdaki komutu çalıştırın:

docker stop myapp

Derlemeleri listeleme

Bu adımda az acr task list-runs komutunu kullanarak ACR Görevlerinin kayıt defteriniz için tamamladığı çalıştırmaları listeleyin:

az acr task list-runs --registry $ACR_NAME --output table

Önceki öğreticiyi tamamladıysanız (ve kayıt defterini silmediyseniz), aşağıdakine benzer bir çıkış görüyor olmalısınız. Sonraki bölümde temel görüntüyü güncelleştirdikten sonra çıkışı karşılaştırabilmek için görev sayısını ve en son RUN ID değerini not alın.

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

Temel görüntüyü güncelleştirme

Burada, temel görüntüde bir çerçeve yamasının simülasyonunu yaparsınız. Dockerfile-base öğesini düzenleyin ve NODE_VERSION içinde tanımlanan sürüm numarasından sonra bir "a" ekleyin:

ENV NODE_VERSION 15.2.1a

Değiştirilmiş temel görüntüyü derlemek için bir hızlı görev çalıştırın. Çıkıştaki Run ID değerini not alın.

az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .

Derleme tamamlandıktan ve ACR görevi yeni temel görüntüyü kayıt defterinize gönderdikten sonra, uygulama görüntüsünün derlemesini tetikler. Daha önce oluşturduğunuz görevin uygulama görüntüsü derlemeyi tetiklemesi birkaç dakika sürebilir çünkü yeni derlenen ve gönderilen temel görüntüyü algılaması gerekir.

Güncelleştirilmiş derlemeyi listeleme

Artık temel görüntüyü güncelleştirdiğinize göre, görev çalıştırmalarınızı bir kez daha listeleyip önceki listeyle bunu karşılaştırın. İlk seferinde çıkış farklı görünmüyorsa, yeni görev çalıştırmasının listede yer aldığını görmek için komutu düzenli aralıklarla çalıştırın.

az acr task list-runs --registry $ACR_NAME --output table

Çıktı aşağıdakine benzer olacaktır. Son yürütülen derlemenin TRIGGER değeri "Image Update" olmalıdır; bu değer, görevin temel görüntünüzün hızlı görevi ile başlatıldığını gösterir.

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

Güncelleştirilmiş sürüm numarasını görmek için yeni oluşturulan kapsayıcıyı çalıştırmaya yönelik aşağıdaki isteğe bağlı adımı gerçekleştirmek isterseniz, Görüntü Güncelleştirmesi ile tetiklenen derlemenin RUN ID değerini (önceki çıkışta "ca11") not alın.

İsteğe bağlı: Yeni oluşturulan görüntüyü çalıştırma

Cloud Shell'de değil de yerel olarak çalışıyorsanız ve Docker'ı yüklediyseniz, derlemesi tamamlandıktan sonra yeni uygulama görüntüsünü çalıştırın. <run-id> değerinin yerine önceki adımda aldığınız RUN ID değerini koyun. Cloud Shell kullanıyorsanız bu bölümü atlayın (Cloud Shell docker run komutunu desteklemez).

docker run -d -p 8081:80 --name updatedapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>

Tarayıcınızda http://localhost:8081 adresine gidin; web sayfasında güncelleştirilmiş Node.js sürüm numarasını ("a" ile) görüyor olmalısınız:

Tarayıcıda güncelleştirilmiş örnek uygulamanın ekran görüntüsü

Temel görüntünüzü yeni sürüm numarasıyla güncelleştirdiğinize ama son oluşturulan uygulama görüntüsünde yeni sürümün görüntülendiğine dikkat etmelisiniz. ACR Görevler temel görüntüde yaptığınız değişikliği almış ve uygulama görüntünüzü otomatik olarak yeniden oluşturmuştur.

Kapsayıcıyı durdurmak ve kaldırmak için aşağıdaki komutu çalıştırın:

docker stop updatedapp

Sonraki adımlar

Bu öğreticide, temel görüntü güncelleştirildiğinde kapsayıcı görüntü derlemelerini otomatik olarak tetiklemek üzere bir görevi kullanmayı öğrendiniz.

Genel bir kaynaktan kaynaklanan temel görüntüleri yönetmeye yönelik eksiksiz bir iş akışı için bkz. Azure Container Registry Görevleri ile genel içeriği kullanma ve koruma.

Şimdi, görevleri tanımlı bir zamanlamaya göre tetiklemeyi öğrenmek için sonraki öğreticiye geçin.