Share via


Öğretici: Temel görüntü başka bir özel kapsayıcı kayıt defterinde 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 sistemi veya uygulama çerçevesine düzeltme eki uygularken) otomatik görüntü derlemelerini destekler.

Bu öğreticide, bir kapsayıcının temel görüntüsü başka bir Azure kapsayıcı kayıt defterine gönderildiğinde bulutta bir derlemeyi tetikleyen bir ACR görevi oluşturmayı öğreneceksiniz. Temel görüntü aynı 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üyü bir temel kayıt defterinde oluşturma
  • Temel görüntüyü izlemek için başka bir kayıt defterinde uygulama derleme görevi 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. Bu öğreticide şunları yaptınız:

  • 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

Önceki öğreticiler için oluşturulan kapsayıcı kayıt defterine ek olarak, temel görüntüleri depolamak için bir kayıt defteri oluşturmanız gerekir. İstersensiniz, ikinci kayıt defterini özgün kayıt defterinden farklı bir konumda oluşturun.

Ortamı yapılandırma

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, her değeri örnek komutlarda göründüğü her yerde el ile değiştirmeniz gerekir.

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

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

Bu öğreticide, bir temel görüntü güncelleştirme senaryosunda size yol gösterilir. Bu senaryo, diğer kayıt defterlerinde uygulama görüntüleri oluştururken ortak, özel bir kapsayıcı kayıt defterinde temel görüntüleri yönetmeye yönelik bir geliştirme iş akışını yansıtır. Temel görüntüler, bir ekip tarafından kullanılan ortak işletim sistemlerini ve çerçeveleri, hatta ortak hizmet bileşenlerini belirtebilir.

Örneğin, kendi kayıt defterlerinde uygulama görüntüleri geliştiren geliştiriciler, ortak temel kayıt defterinde tutulan bir dizi temel görüntüye erişebilir. Temel kayıt defteri başka bir bölgede, hatta coğrafi olarak çoğaltılmış olabilir.

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ü farklı bir Azure 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örevler de çalıştırabilir.

Temel görüntü oluşturma

az acr build 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. Bu örnekte, görüntü temel görüntü kayıt defterine gönderilir.

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

Özel temel görüntüyü izlemek için görev oluşturma

Ardından, az acr task create komutuyla uygulama görüntüsü kayıt defterinde bir görev oluşturarak yönetilen kimliği etkinleştirebilirsiniz. Yönetilen kimlik, sonraki adımlarda görevin temel görüntü kayıt defteriyle kimlik doğrulaması için kullanılır.

Bu örnekte sistem tarafından atanan bir kimlik kullanılır, ancak belirli senaryolar için kullanıcı tarafından atanan yönetilen kimlik oluşturup etkinleştirebilirsiniz. Ayrıntılar için bkz. Azure tarafından yönetilen kimlik kullanarak ACR görevinde kayıt defterleri arası kimlik doğrulaması.

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

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 genel temel görüntü ()FROM node:15-alpine belirtirken, bu görevdeki Dockerfile-app, temel görüntü 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.

Temel kayıt defteri için kimlik çekme izinleri verme

Görevin yönetilen kimliğine temel görüntü kayıt defterinden görüntü çekme izinleri vermek için önce az acr task show komutunu çalıştırarak kimliğin hizmet sorumlusu kimliğini alın. Ardından az acr show komutunu çalıştırarak temel kayıt defterinin kaynak kimliğini alın:

# 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) 

az role assignment create komutunu çalıştırarak yönetilen kimlik çekme izinlerini kayıt defterine atayın:

az role assignment create \
  --assignee $principalID \
  --scope $baseregID --role acrpull 

Göreve hedef kayıt defteri kimlik bilgileri ekleme

Göreve kimlik bilgileri eklemek için az acr task credential add komutunu çalıştırın. --use-identity [system] Görevin sistem tarafından atanan yönetilen kimliğinin kimlik bilgilerine erişebildiğini belirtmek için parametresini geçirin.

az acr task credential add \
  --name baseexample2 \
  --registry $ACR_NAME \
  --login-server $BASE_ACR.azurecr.io \
  --use-identity [system] 

Görevi el ile çalıştırma

Görevi el ile tetikleme ve uygulama görüntüsünü derlemek 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 baseexample2

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.

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

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 $BASE_ACR --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.

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

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

İ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. Şimdi, görevleri tanımlı bir zamanlamaya göre tetiklemeyi öğrenmek için sonraki öğreticiye geçin.