Özel bir kapsayıcı kullanarak özel yazılımları Azure Uygulaması Hizmetine geçirme

Azure App Service, Windows'da IIS üzerinde çalışan ASP.NET veya Node.js gibi önceden tanımlı uygulama yığınları sunar. Önceden yapılandırılmış Windows ortamı işletim sistemini aşağıdakilerden kilitler:

  • Yönetim erişimi.
  • Yazılım yüklemeleri.
  • Genel derleme önbelleğinde yapılan değişiklikler.

Daha fazla bilgi için bkz. Azure Uygulaması Hizmetinde işletim sistemi işlevselliği.

Uygulamanızın ihtiyaç duyduğu işletim sistemi değişikliklerini yapmak için Visual Studio'dan özel olarak yapılandırılmış bir Windows görüntüsü dağıtabilirsiniz. Bu nedenle özel işletim sistemi ve yazılım yapılandırması gerektiren şirket içi uygulamayı kolayca geçirebilirsiniz. Bu öğreticide Windows yazı tipi kitaplığında yüklü olan özel yazı tiplerini kullanan bir ASP.NET uygulamasını App Service'e geçirme adımları gösterilmektedir. Visual Studio'dan Azure Container Registry'ye özel olarak yapılandırılmış bir Windows görüntüsü dağıtıp ardından bunu App Service'te çalıştıracaksınız.

Bir Windows kapsayıcısında çalışan web uygulamasını gösterir.

Önkoşullar

Bu öğreticiyi tamamlamak için:

Uygulamayı yerel ortamda oluşturma

Örneği indirme

Bu adımda yerel .NET projesini oluşturacaksınız.

  • Örnek projeyi indirin.
  • custom-font-win-container-master.zip dosyasını ayıklayın (sıkıştırmasını açın).

Örnek projede Windows yazı tipi kitaplığına yüklenmiş olan özel bir yazı tipini kullanan basit bir ASP.NET uygulaması bulunmaktadır. Yazı tiplerinin yüklenmesi gerekmez. Ancak örnek, temel işletim sistemiyle tümleştirilmiş bir uygulama örneğidir. Bu tür bir uygulamayı App Service'e geçirmek için kodunuzu yeniden düzenleyip tümleştirmeyi kaldırabilir veya özel Windows kapsayıcısında olduğu için olduğu şekilde geçirebilirsiniz.

Yazı tipini yükleme

Windows Gezgini'nde custom-font-win-container-master/CustomFontSample dizinine gidin, FrederickatheGreat-Regular.ttf dosyasına sağ tıklayın ve Yükle'yi seçin.

Bu yazı tipi Google Fonts sayfasında genel kullanıma açık bir şekilde sunulmaktadır.

Uygulamayı çalıştırma

Visual Studio'da custom-font-win-container-master/CustomFontSample.sln dosyasını açın.

Uygulamayı hata ayıklaması yapılmadan çalıştırmak için Ctrl+F5 yazın. Uygulama varsayılan tarayıcınızda görüntülenir.

Varsayılan tarayıcıda görüntülenen uygulamayı gösteren ekran görüntüsü.

Uygulama yüklü bir yazı tipi kullandığından, uygulama App Service korumalı alanında çalıştırılamaz. Ancak yazı tipini Windows kapsayıcısına yükleyebileceğiniz için uygulamayı Windows kapsayıcısı kullanarak dağıtabilirsiniz.

Windows kapsayıcısını yapılandırma

Çözüm Gezgini'nde CustomFontSample projesine sağ tıklayıp Ekle>Kapsayıcı Düzenleme Desteği'ne tıklayın.

CustomFontSample projesi, Ekle ve Kapsayıcı Düzenleyici Desteği menü öğelerinin seçili olduğu Çözüm Gezgini penceresinin ekran görüntüsü.

Docker Compose>Tamam'ı seçin.

Projeniz artık bir Windows kapsayıcısında çalışacak şekilde ayarlanmıştır. Dockerfile CustomFontSample projesine ve çözüme bir docker-compose projesi eklenir.

Çözüm Gezgini'nden Dockerfile dosyasını açın.

Desteklenen bir üst görüntü kullanmanız gerekir. FROM satırını aşağıdaki kod ile değiştirerek üst görüntüyü değiştirin:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019

Dosyanın en sonuna şu satırı ekleyin ve dosyayı kaydedin:

RUN ${source:-obj/Docker/publish/InstallFont.ps1}

InstallFont.ps1 dosyasını CustomFontSample projesinde bulabilirsiniz. Yazı tipini yükleyen basit bir betiktir. Betiğin daha karmaşık bir sürümünü PowerShell Galerisi bulabilirsiniz.

Not

Windows kapsayıcısını yerel olarak test etmek için Docker'ın yerel makinenizde başlatıldığından emin olun.

Azure Container Registry'de yayımlama

Azure Container Registry, kapsayıcı dağıtımlarınızın görüntülerini depolayabilir. App Service'i Azure Container Registry'de barındırılan görüntüleri kullanacak şekilde yapılandırabilirsiniz.

Yayımlama sihirbazını açma

Çözüm Gezgini'nde CustomFontSample projesine sağ tıklayın ve Yayımla'yı seçin.

CustomFontSample projesini ve Yayımla'yı gösteren Çözüm Gezgini ekran görüntüsü.

Kayıt defterini oluşturma ve yayımlama

Yayımlama sihirbazında Kapsayıcı Kayıt Defteri>Yeni Azure Azure Container Registry>Yayımla'yı seçin.

Container Registry, Create New Azure Container Registry ve Publish (Yayımla) düğmesinin seçili olduğu yayımlama sihirbazının ekran görüntüsü.

Azure hesabınızla oturum açın

Yeni Azure Container Registry oluştur iletişim kutusunda Hesap ekle’yi seçin ve Azure aboneliğinizde oturum açın. Oturumunuz zaten açıksa, açılan menüden istediğiniz aboneliği içeren hesabı seçin.

Azure'da oturum açın.

Kayıt defterini yapılandırma

Yeni kapsayıcı kayıt defterini aşağıdaki tabloda bulunan değerleri kullanarak yapılandırın. Bittiğinde Oluştur’u seçin.

Ayar Önerilen değer Daha fazla bilgi için
DNS Ön Eki Oluşturulan kayıt defteri adını kullanın veya benzersiz bir adla değiştirin.
Kaynak Grubu Yeni'yi seçin, myResourceGroup yazın ve Tamam'ı seçin.
SKU Temel Fiyatlandırma katmanları
Kayıt Defteri Konumu West Europe

Azure kapsayıcı kayıt defterini yapılandırın.

Bir terminal penceresi açılır ve görüntü dağıtımı ilerleme durumunu görüntüler. Dağıtımın tamamlanmasını bekleyin.

Azure'da oturum açma

Azure Portal’ında oturum açın.

Web uygulaması oluşturma

Soldaki menüden Kaynak oluştur>Web>Kapsayıcılar için Web Uygulaması'nı seçin.

Uygulama temel bilgilerini yapılandırma

Temel Bilgiler sekmesinde ayarları aşağıdaki tabloya göre yapılandırın ve ardından İleri: Docker'ı seçin.

Ayar Önerilen değer Daha fazla bilgi için
Abonelik Doğru aboneliğin seçili olduğundan emin olun.
Kaynak Grubu Yeni oluştur'u seçin, myResourceGroup yazın ve Tamam'ı seçin.
Ad Benzersiz bir ad yazın. Web uygulamasının URL'si https://<app-name>.azurewebsites.net şeklindedir; burada <app-name>, uygulamanızın adıdır.
Yayınla Docker kapsayıcısı
İşletim Sistemi Windows
Bölge West Europe
Windows Planı Yeni oluştur'u seçin, myAppServicePlan yazın ve Tamam'ı seçin.

Temel Bilgiler sekmeniz şu şekilde görünmelidir:

Web uygulamasını yapılandırmak için kullanılan Temel Bilgiler sekmesini gösterir.

Windows kapsayıcısını yapılandırma

Docker sekmesinde, aşağıdaki tabloda gösterildiği gibi özel Windows kapsayıcınızı yapılandırın ve Gözden geçir ve oluştur'u seçin.

Ayar Önerilen değer
Görüntü Kaynağı Azure Container Register
Kapsayıcı Kayıt Defteri Daha önce oluşturduğunuz kayıt defterini seçin.
Görsel customfontsample
Tag latest

Uygulama oluşturmayı tamamlama

Oluştur'u seçin ve Azure'ın gerekli kaynakları oluşturmasını bekleyin.

Web uygulamasına göz atma

Azure işlemi tamamlandığında bir bildirim kutusu görüntülenir.

Azure işleminin tamamlandığını gösterir.

  1. Kaynağa git’i seçin.

  2. Uygulama sayfasında URL'nin altındaki bağlantıyı seçin.

Aşağıdaki sayfayla yeni bir tarayıcı sayfası açılır:

Web uygulamasının yeni tarayıcı sayfasını gösterir.

Birkaç dakika bekleyin ve beklediğiniz güzel yazı tipine sahip giriş sayfası açılana kadar yeniden deneyin:

Yapılandırdığınız yazı tipini içeren giriş sayfasını gösterir.

Tebrikler! Bir ASP.NET uygulamasını Windows kapsayıcısında Azure App Service'e geçirdiniz.

Kapsayıcı başlangıç günlüklerini inceleme

Windows kapsayıcısının yüklenmesi biraz zaman alabilir. İlerleme durumunu görmek için uygulama adını> uygulamanızın adıyla değiştirerek <aşağıdaki URL'ye gidin.

https://<app-name>.scm.azurewebsites.net/api/logstream

Akışa alınan günlükler şöyle görünür:

14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully

Azure Uygulaması Hizmeti, hem yerleşik görüntüleri hem de özel görüntüleri barındırmak için Docker kapsayıcı teknolojisini kullanır. Yerleşik görüntülerin listesini görmek için 'az webapp list-runtimes --os linux' adlı Azure CLI komutunu çalıştırın. Bu görüntüler gereksinimlerinizi karşılamıyorsa özel görüntü derleyebilir ve dağıtabilirsiniz.

Not

Kapsayıcı x86-x64 mimarisini hedeflemelidir, ARM64 desteklenmez.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Azure Container Registry'ye özel bir Docker görüntüsü gönderme
  • Özel görüntüyü App Service'e dağıtma
  • Ortam değişkenlerini yapılandırma
  • Yönetilen kimlik kullanarak App Service'e resim çekme
  • Tanılama günlüklerine erişim
  • Azure Container Registry'den App Service'e CI/CD'yi etkinleştirme
  • SSH kullanarak kapsayıcıya bağlanma

Bu öğreticinin tamamlanması, kapsayıcı kayıt defteri için Azure hesabınızda küçük bir ücrete neden olur ve kapsayıcıyı bir aydan uzun süre barındırmak için daha fazla maliyete neden olabilir.

İlk ortamınızı ayarlama

Bu öğretici, Azure CLI'nın 2.0.80 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanıyorsanız en son sürüm zaten yüklüdür.

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

Docker'ı yükledikten sonra bir terminal penceresi açın ve docker'ın yüklü olduğunu doğrulayın:

docker --version

Örnek uygulamayı kopyalama veya indirme

Bu öğreticinin örneğini git kopyalama veya indirme yoluyla edinebilirsiniz.

Git ile kopyalama

Örnek depoyu kopyalayın:

git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input

Linux kapsayıcısının --config core.autocrlf=input içinde kullanılan dosyalara doğru satır sonlarını garanti etmek için bağımsız değişkenini eklediğinizden emin olun:

Ardından şu klasöre gidin:

cd docker-django-webapp-linux

GitHub’dan indirin

Git clone kullanmak yerine adresini ziyaret https://github.com/Azure-Samples/docker-django-webapp-linuxedebilir, Kopyala'yı ve ardından ZIP'i İndir'i seçebilirsiniz.

ZIP dosyasını docker-django-webapp-linux adlı bir klasöre açın.

Ardından docker-django-webapp-linux klasöründe bir terminal penceresiaçın.

(İsteğe bağlı) Docker dosyasını inceleme

Docker görüntüsünü açıklayan ve yapılandırma yönergelerini içeren Dockerfile adlı örnekteki dosya:

FROM tiangolo/uwsgi-nginx-flask:python3.6

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/

# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
 && apt-get install -y --no-install-recommends openssh-server \
 && echo "$SSH_PASSWD" | chpasswd 

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/

RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222

#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]
  • İlk komut grubu, uygulamanın gereksinimlerini ortama yükler.
  • İkinci komut grubu, kapsayıcı ve konak arasında güvenli iletişim için bir SSH sunucusu oluşturur.
  • Son satır olan ENTRYPOINT ["init.sh"], SSH hizmetini ve Python sunucusunu başlatmak için çağırır init.sh .

Görüntüyü yerel olarak derleme ve test etme

Not

Docker Hub'da IP başına anonim çekme sayısı ve ücretsiz kullanıcı başına kimliği doğrulanmış çekme sayısı kotaları vardır (bkz . Veri aktarımı)... Docker Hub'dan çekme işlemlerinizin sınırlı olduğunu fark ederseniz, henüz oturum açmadıysanız deneyin docker login .

  1. Görüntüyü oluşturmak için aşağıdaki komutu çalıştırın:

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Docker kapsayıcısını yerel olarak çalıştırarak derlemenin çalışıp çalışmadığını test edin:

    docker run -it -p 8000:8000 appsvc-tutorial-custom-image
    

    Bu docker run komut, bağımsız değişkeniyle -p bağlantı noktasını ve ardından görüntünün adını belirtir. -it ile Ctrl+Cdurdurmanıza olanak tanır.

    İpucu

    Windows üzerinde çalışıyorsanız ve standard_init_linux.go:211: exec kullanıcı işlemi "böyle bir dosya veya dizin yok" hatasına neden olduysa, init.sh dosyası beklenen LF bitişleri yerine CR-LF satır sonlarını içerir. Örnek depoyu kopyalamak için git kullandıysanız ancak parametresini --config core.autocrlf=input atladıysanız bu hata oluşur. Bu durumda depoyu '--config'' bağımsız değişkeniyle yeniden kopyalayın. Ayrıca, init.sh düzenlediyseniz ve CRLF sonlarıyla kaydettiyseniz hatayı görebilirsiniz. Bu durumda, dosyayı yalnızca LF sonlarıyla yeniden kaydedin.

  3. http://localhost:8000 Web uygulamasının ve kapsayıcının düzgün çalıştığını doğrulamak için adresine gidin.

    Web uygulamasını yerel olarak test edin.

I. Kullanıcı tarafından atanan yönetilen kimlik oluşturma

App Service, kapsayıcı kayıt defteriyle kimlik doğrulaması yapmak için varsayılan yönetilen kimliği veya kullanıcı tarafından atanan yönetilen kimliği kullanabilir. Bu öğreticide, kullanıcı tarafından atanan bir yönetilen kimlik kullanacaksınız.

  1. Kaynak grubu oluşturmak için az group create komutunu çalıştırın:

    az group create --name msdocs-custom-container-tutorial --location westeurope
    

    Değeri, size yakın bir bölge belirtecek şekilde değiştirebilirsiniz --location .

  2. Kaynak grubunda yönetilen kimlik oluşturun.

    az identity create --name myID --resource-group msdocs-custom-container-tutorial
    

II. Kapsayıcı kayıt defteri oluşturma

  1. komutuyla az acr create bir kapsayıcı kayıt defteri oluşturun ve değerini kayıt defteriniz için benzersiz bir adla değiştirin <registry-name> . Ad yalnızca harf ve sayı içermelidir ve tüm Azure'da benzersiz olmalıdır.

    az acr create --name <registry-name> --resource-group msdocs-custom-container-tutorial --sku Basic --admin-enabled true
    

    parametresi, --admin-enabled bir dizi yönetici kimlik bilgisi kullanarak görüntüleri kayıt defterine göndermenize olanak tanır.

  2. komutunu çalıştırarak az acr show yönetim kimlik bilgilerini alın:

    az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>
    

    Bu komutun JSON çıkışı, kayıt defterinin kullanıcı adıyla birlikte iki parola sağlar.

III. Örnek görüntüyü Azure Container Registry'ye gönderme

Bu bölümde, görüntüyü Daha sonra App Service tarafından kullanılacak olan Azure Container Registry'ye gönderirsiniz.

  1. Örnek görüntüyü oluşturduğunuz yerel terminalden kapsayıcı kayıt defterinde oturum açmak için komutunu kullanın docker login :

    docker login <registry-name>.azurecr.io --username <registry-username>
    

    ve <registry-username> değerlerini önceki adımlarda yer alan değerlerle değiştirin<registry-name>. İstendiğinde, önceki adımdaki parolalardan birini yazın.

    Bu bölümün kalan tüm adımlarında aynı kayıt defteri adını kullanırsınız.

  2. Oturum açma işlemi başarılı olduğunda yerel Docker görüntünüzü kayıt defterine etiketleyin:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  3. docker push Görüntüyü kayıt defterine göndermek için komutunu kullanın:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Temel görüntüyü içerdiğinden görüntüyü ilk kez karşıya yüklemek birkaç dakika sürebilir. Sonraki karşıya yüklemeler genellikle daha hızlıdır.

    Beklerken, App Service'i kayıt defterinden dağıtılacak şekilde yapılandırmak için sonraki bölümdeki adımları tamamlayabilirsiniz.

IV. Kayıt defteriniz için yönetilen kimliği yetkilendirme

Oluşturduğunuz yönetilen kimliğin henüz kapsayıcı kayıt defterinden çekme yetkisi yok. Bu adımda yetkilendirmeyi etkinleştirirsiniz.

  1. Yönetilen kimliğin asıl kimliğini alın:

    principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)
    
  2. Kapsayıcı kayıt defteri için kaynak kimliğini alın:

    registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)
    
  3. Kapsayıcı kayıt defterine erişmek için yönetilen kimlik izni verin:

    az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"
    

    Bu izinler hakkında daha fazla bilgi için bkz . Azure rol tabanlı erişim denetimi nedir?

V. Web uygulaması oluşturma

  1. komutunu kullanarak az appservice plan create bir App Service planı oluşturun:

    az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linux
    

    App Service planı, web uygulamasını barındıran sanal makineye karşılık gelir. Varsayılan olarak, önceki komut ilk ay için ücretsiz olan uygun maliyetli bir B1 fiyatlandırma katmanı kullanır. Katmanı parametresiyle --sku denetleyebilirsiniz.

  2. Web uygulamasını şu komutla az webapp create oluşturun:

    az webapp create --resource-group msdocs-custom-container-tutorial --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    değerini, tüm Azure'da benzersiz olması gereken web uygulamasının adıyla değiştirin <app-name> . ayrıca değerini önceki bölümde yer alan kayıt defterinizin adıyla değiştirin <registry-name> .

    İpucu

    web uygulamasının kapsayıcı ayarlarını istediğiniz zaman komutuyla az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorialalabilirsiniz. Görüntü özelliğinde DOCKER_CUSTOM_IMAGE_NAMEbelirtilir. Web uygulaması Azure DevOps veya Azure Resource Manager şablonları aracılığıyla dağıtıldığında, görüntü adlı LinuxFxVersionbir özellikte de görüntülenebilir. Her iki özellik de aynı amaca hizmet eden bir özelliktir. Her ikisi de web uygulamasının yapılandırmasında varsa öncelik LinuxFxVersion kazanır.

VI. Web uygulamasını yapılandırma

Bu adımda, web uygulamasını aşağıdaki gibi yapılandıracaksınız:

  • Örnek kapsayıcı, web istekleri için 8000 numaralı bağlantı noktasında dinliyor ve uygulamayı 8000 numaralı bağlantı noktasına istek gönderecek şekilde yapılandırırsınız.
  • Uygulamanıza kapsayıcı kayıt defterinizden görüntü çekmek için yönetilen kimliği kullanmasını söyleyin.
  • Kapsayıcı kayıt defterinden sürekli dağıtımı yapılandırın (veya kayıt defterine yapılan her görüntü yeni görüntüyü çekmek için uygulamanızı tetikler). Bu bölüm, web uygulamanızın kapsayıcı kayıt defterinizden çekmesi için gerekli değildir, ancak kayıt defterine yeni bir görüntü gönderildiğinde web uygulamanızın bunu bilmesini sağlayabilir. Bu olmadan, web uygulamasını yeniden başlatarak bir görüntü çekme işlemini el ile tetiklemeniz gerekir.
  1. Ortam değişkenini WEBSITES_PORT uygulama kodu tarafından beklendiği gibi ayarlamak için kullanınaz webapp config appsettings set:

    az webapp config appsettings set --resource-group msdocs-custom-container-tutorial --name <app-name> --settings WEBSITES_PORT=8000
    

    değerini önceki adımda kullandığınız adla değiştirin <app-name> .

    Bu ortam değişkeni hakkında daha fazla bilgi için örneğin GitHub deposundaki benioku bölümüne bakın.

  2. Web uygulamasında kullanıcı tarafından atanan yönetilen kimliği şu komutla az webapp identity assign etkinleştirin:

    id=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query id --output tsv)
    az webapp identity assign --resource-group msdocs-custom-container-tutorial --name <app-name> --identities $id
    

    değerini önceki adımda kullandığınız adla değiştirin <app-name> .

  3. Yönetilen kimlikleri kullanarak uygulamanızı Azure Container Registry'den çekecek şekilde yapılandırın.

    appConfig=$(az webapp config show --resource-group msdocs-custom-container-tutorial --name <app-name> --query id --output tsv)
    az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=True
    

    değerini önceki adımda kullandığınız adla değiştirin <app-name> .

  4. Web uygulamanızın Azure Container Registry'den çekmek için kullandığı istemci kimliğini ayarlayın. Sistem tarafından atanan yönetilen kimliği kullanıyorsanız bu adım gerekli değildir.

    clientId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query clientId --output tsv)
    az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientId
    
  5. App Service'te CI/CD'yi etkinleştirin.

    cicdUrl=$(az webapp deployment container config --enable-cd true --name <app-name> --resource-group msdocs-custom-container-tutorial --query CI_CD_URL --output tsv)
    

    CI_CD_URL , App Service'in sizin için oluşturduğu bir URL'dir. Kayıt defteriniz, App Service'e görüntü gönderme işleminin gerçekleştiğini bildirmek için bu URL'yi kullanmalıdır. Aslında sizin için web kancası oluşturmaz.

  6. Son adımda elde ettiğiniz CI_CD_URL kullanarak kapsayıcı kayıt defterinizde bir web kancası oluşturun.

    az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
    
  7. Web kancanızın düzgün yapılandırılıp yapılandırılmamış olduğunu test etmek için web kancasına ping yapın ve 200 Tamam yanıtı alıp almadığınıza bakın.

    eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv)
    az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"
    

    İpucu

    Tüm web kancası olayları hakkındaki tüm bilgileri görmek için parametresini --query kaldırın.

    Kapsayıcı günlüğünü akışla aktarıyorsanız, web kancası uygulamayı yeniden başlatmak için tetiklediğinden, web kancası ping'inden Starting container for sitesonra iletisini görmeniz gerekir.

VII. Web uygulamasına göz atma

Uygulamayı test etmek için https://<app-name>.azurewebsites.netadresine gidin ve yerine <app-name> web uygulamanızın adını yazın.

App Service'in kayıt defterinden görüntünün tamamını çekmesi gerektiğinden, ilk erişimde uygulamanın yanıt vermesi biraz zaman alabilir. Tarayıcı zaman aşımına uğradıysa sayfayı yenileyin. İlk görüntü çekildikten sonra, sonraki testler çok daha hızlı çalışır.

Web uygulamasının Azure'da başarıyla çalıştığını gösteren tarayıcının ekran görüntüsü.

VIII. Tanılama günlüklerine erişim

App Service'in görüntüyü çekmesini beklerken, kapsayıcı günlüklerini terminalinize akışla aktararak App Service'in tam olarak ne yaptığını görmeniz yararlı olur.

  1. Kapsayıcı günlüğünü açın:

    az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystem
    
  2. Günlük akışını etkinleştirin:

    az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorial
    

    Konsol günlüklerini hemen görmüyorsanız, 30 saniye içinde yeniden kontrol edin.

    Ayrıca, tarayıcıdan https://<app-name>.scm.azurewebsites.net/api/logs/docker adresine giderek günlük dosyalarını inceleyebilirsiniz.

  3. Günlük akışını dilediğiniz zaman durdurmak için Ctrl+C yazın.

IX. Uygulama kodunu değiştirme ve yeniden dağıtma

Bu bölümde web uygulaması kodunda bir değişiklik yapacak, görüntüyü yeniden derleyip kapsayıcı kayıt defterinize gönderebilirsiniz. Ardından App Service, çalışan web uygulamasını güncelleştirmek için güncelleştirilmiş görüntüyü kayıt defterinden otomatik olarak çeker.

  1. Yerel docker-django-webapp-linux klasörünüzde app/templates/app/index.html dosyasını açın.

  2. İlk HTML öğesini aşağıdaki kodla eşleşecek şekilde değiştirin.

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a>
        </div>
      </div>
    </nav>
    
  3. Değişikliklerinizi kaydedin.

  4. docker-django-webapp-linux klasörüne geçin ve görüntüyü yeniden oluşturun:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Görüntünün etiketini en son sürüme güncelleştirin:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    <registry-name> değerini kayıt defterinizin adıyla değiştirin.

  6. Görüntüyü kayıt defterine gönderin:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  7. Görüntü gönderme işlemi tamamlandığında web kancası, App Service'e gönderme hakkında bildirimde bulunur ve App Service güncelleştirilmiş görüntüyü çekmeye çalışır. Birkaç dakika bekleyin ve ardından adresine göz atarak https://<app-name>.azurewebsites.netgüncelleştirmenin dağıtıldığını doğrulayın.

X. SSH kullanarak kapsayıcıya bağlanma

SSH, kapsayıcı ile istemci arasında güvenli iletişime olanak tanır. Kapsayıcınıza SSH bağlantısını etkinleştirmek için özel görüntünüzün yapılandırılması gerekir. Kapsayıcı çalışırken bir SSH bağlantısı açabilirsiniz.

Kapsayıcıyı SSH için yapılandırma

Bu öğreticide kullanılan örnek uygulama, SSH sunucusunu yükleyen ve oturum açma kimlik bilgilerini de ayarlayan Dockerfile'da gerekli yapılandırmaya zaten sahiptir. Bu bölüm yalnızca bilgilendirme amaçlıdır. Kapsayıcıya bağlanmak için sonraki bölüme geçin.

ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
  && apt-get install -y --no-install-recommends openssh-server \
  && echo "$SSH_PASSWD" | chpasswd 

Not

Bu yapılandırma kapsayıcıya dış bağlantılara izin vermez. SSH yalnızca Kudu/SCM Sitesi aracılığıyla kullanılabilir. Kudu/SCM sitesinin kimliği Azure hesabınızla doğrulanır. root:Docker! SSH değiştirilmemelidir. SCM/KUDU, Azure Portal kimlik bilgilerinizi kullanır. Bu değerin değiştirilmesi SSH kullanılırken hataya neden olur.

Dockerfile ayrıca sshd_config dosyasını /etc/ssh/ klasörüne kopyalar ve kapsayıcıda 2222 numaralı bağlantı noktasını kullanıma sunar:

COPY sshd_config /etc/ssh/

# ...

EXPOSE 8000 2222

Bağlantı noktası 2222, yalnızca özel bir sanal ağın köprü ağı içindeki kapsayıcılar tarafından erişilebilen bir iç bağlantı noktasıdır.

Son olarak, init.sh giriş betiği SSH sunucusunu başlatır.

#!/bin/bash
service ssh start

Kapsayıcıya SSH bağlantısı açma

  1. https://<app-name>.scm.azurewebsites.net/webssh/host Adresine gidin ve Azure hesabınızla oturum açın. <app-name> değerini web uygulamanızın adıyla değiştirin.

  2. Oturum açtığınızda, web uygulamasının bilgilendirme sayfasına yönlendirilirsiniz. Kabuğu açmak ve komutları kullanmak için sayfanın üst kısmındaki SSH'yi seçin.

    Örneğin, komutunu kullanarak top içinde çalışan işlemleri inceleyebilirsiniz.

XI. Kaynakları temizleme

Bu makalede oluşturduğunuz kaynaklar devam eden maliyetler doğurabilir. Kaynakları temizlemek için yalnızca bunları içeren kaynak grubunu silmeniz gerekir:

az group delete --name msdocs-custom-container-tutorial

Sonraki adımlar

Öğrendikleriniz:

  • Özel bir kapsayıcı kayıt defterine özel görüntü dağıtma
  • App Service'te dağıtma ve özel görüntü
  • Görüntüyü güncelleştirme ve yeniden dağıtma
  • Tanılama günlüklerine erişim
  • SSH kullanarak kapsayıcıya bağlanma
  • Azure Container Registry'ye özel bir Docker görüntüsü gönderme
  • Özel görüntüyü App Service'e dağıtma
  • Ortam değişkenlerini yapılandırma
  • Yönetilen kimlik kullanarak App Service'e resim çekme
  • Tanılama günlüklerine erişim
  • Azure Container Registry'den App Service'e CI/CD'yi etkinleştirme
  • SSH kullanarak kapsayıcıya bağlanma

Sonraki öğreticide, özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğreneceksiniz.

Alternatif olarak, diğer kaynaklara da göz atın: