Özel kapsayıcı kullanarak Azure App Service yazılım geçişi

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 yönetimsel erişime, yazılım yüklemesine ve genel derleme önbelleğine ve benzeri uygulamalara karşı kilitler (bkz. Azure App Service'teki işletim sistemi işlevleri). Ancak App Service içinde özel bir Windows kapsayıcısı kullanmak, uygulamanızın ihtiyaç duyduğu işletim sistemi değişikliklerini kolayca gerçekleştirmenizi sağlar. Bu sayede özel işletim sistemi ve yazılım yapılandırmasına ihtiyaç duyan bir şirket içi uygulamayı geçirmek oldukça kolaydır. 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 kapsayıcıda çalışan web Windows 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 projede Windows yazı tipi kitaplığına yüklenmiş olan özel bir yazı tipini kullanan basit bir ASP.NET uygulaması bulunmaktadır. Yazı tiplerini yüklemenize gerek yoktur işletim sistemine tümleşik bir uygulama örneği olarak verilmiştir. 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

custom-font-win-container/CustomFontSample.sln dosyasını Visual Studio'da 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ü.

Yüklenmiş olan bir yazı tipini kullandığından uygulama App Service korumalı alanında çalışmayacaktır. 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 Çözüm Gezgini, Ekle ve Kapsayıcı Orchestrator Desteği menü öğelerinin seçili olduğu ekran görüntüsü.

Tamam'Docker Compose > seçin.

Projeniz Windows kapsayıcısında çalışacak şekilde ayarlanır. CustomFontSample projesine bir Dockerfile 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 sürümünü Betik Merkezi sayfasında bulabilirsiniz.

Not

Kapsayıcıyı yerel Windows test etmek için yerel makinede Docker'ın başlatıldı olduğundan 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 Çözüm Gezgini ve Yayımla'nın seçili olduğunu gösteren ekran görüntüsü.

Kayıt defterini oluşturma ve yayımlama

Yayımlama sihirbazında Yeni Oluştur'Container Registry > Yayımla'Azure Container Registry > seçin.

Container Registry, Create New Azure Container Registry ve Publish (Yayımla) düğmesinin seçili olduğunu gösteren 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çma

Kayıt defterini yapılandırma

Yeni kapsayıcı kayıt defterini aşağıdaki tabloda bulunan değerleri kullanarak yapılandırın. Tamamladığınızda Oluştur’a tıklayın.

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

Azure Container Registry yapılandırması

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

https://portal.azure.com adresinden Azure portalında oturum açın.

Web uygulaması oluşturma

Sol menüden Kaynak oluştur Web > uygulaması'Kapsayıcılar için Web App. >

Uygulama temellerini yapılandırma

Temel Bilgiler sekmesinde, ayarları aşağıdaki tabloya göre yapılandırarak, ardından Sonraki: Docker'a tıklayın.

Ayar Önerilen değer Daha fazla bilgi edinmek için
Abonelik Doğru aboneliğin seçildiğinden emin olun.
Kaynak Grubu Yeni oluştur'u seçin, myResourceGroup yazın ve Tamam'a tıklayın.
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ımla Docker kapsayıcısı
İşletim Sistemi Windows
Bölge West Europe
Windows Planı Yeni oluştur' u seçin, myappserviceplan yazın ve Tamam' a tıklayın.

Temel kavramlar sekmesi şöyle 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 + oluştur' u seçin.

Ayar Önerilen değer
Görüntü Kaynağı Azure Container kaydı
Kapsayıcı Kayıt Defteri Daha önce oluşturduğunuz kayıt defteriniseçin.
Görüntü customfontsample
Tag en son

Uygulama oluşturmayı tamamlama

Oluştur'a tıklayın ve Azure'un gereken 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'e tıklayın.

  2. Uygulama sayfasında URL'nin altındaki bağlantıya tıklayın.

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

Web uygulaması için 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ı tipine sahip 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 uygulamanızın adıyla değiştirerek aşağıdaki URL 'ye gidin <app-name> .

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

Akışlı 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 App Service, 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 bir listesini görmek için, ' az WebApp List-çalışma zamanları--Linux 'Azure CLI komutunu çalıştırın. Bu görüntüler gereksinimlerinizi karşılamadığı takdirde, özel bir görüntü oluşturup dağıtabilirsiniz.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

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

Bu öğreticiyi tamamlamak, kapsayıcı kayıt defteri için Azure hesabınızda küçük bir ücret ödemektedir ve kapsayıcıyı bir aydan uzun süreyle barındırmak için ek maliyetler oluşturabilir.

İlk ortamınızı ayarlama

  • Etkin aboneliği olan bir Azure hesabına sahip olmanız gerekir. Ücretsiz hesap oluşturun.
  • Docker görüntülerini oluşturmak için kullandığınız Docker'ı yükleyebilirsiniz. Docker 'ı yüklemek için bilgisayarın yeniden başlatılması gerekebilir.
  • Azure Cloud Shell'Da Bash ortamını kullanın.

    Cloud Shell’i yeni bir pencerede başlatma

  • Dilerseniz CLI başvuru komutlarını çalıştırmak için Azure CLI’yi yükleyebilirsiniz.

    • 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. Ek oturum açma seçenekleri için bkz. Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantıları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.

  • Bu öğretici, Azure CLı 'nin sürüm 2.0.80 veya üstünü gerektirir. Azure Cloud Shell kullanılıyorsa, en son sürüm zaten yüklüdür.

Docker 'ı yükledikten veya Azure Cloud Shell çalıştırdıktan sonra, bir Terminal penceresi açın ve Docker 'ın yüklü olduğunu doğrulayın:

docker --version

Örnek uygulamayı kopyalayın veya indirin

Bu öğreticide git Clone veya Download aracılığıyla örnek elde edebilirsiniz.

Git ile Kopyala

Örnek depoyu kopyalayın:

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

--config core.autocrlf=inputLinux kapsayıcısının içinde kullanılan dosyalardaki uygun satır sonlarını güvence altına almak için bağımsız değişkenini eklediğinizden emin olun:

Daha sonra bu klasöre gidin:

cd docker-django-webapp-linux

GitHub’dan indirin

Git klonu kullanmak yerine, ' ı ziyaret edebilir https://github.com/Azure-Samples/docker-django-webapp-linux , Kopyala' yı seçebilir ve ZIP indir' i seçebilirsiniz.

ZIP dosyasını Docker-docgo-WebApp-Linux adlı bir klasöre ayıklayın.

Ardından, bu Docker-docgo-WebApp-Linux klasöründe bir Terminal penceresi açın.

Seçim Docker dosyasını inceleyin

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üklerken.
  • İkinci komut grubu, kapsayıcı ve konak arasında güvenli iletişim için bir SSH sunucusu oluşturur.
  • Son satır, ENTRYPOINT ["init.sh"] init.sh SSH hizmetini ve Python sunucusunu başlatmak için çağırır.

Görüntüyü yerel olarak derleyin ve test edin

Not

Docker Hub , IP başına anonim giriş sayısı ve ücretsiz Kullanıcı başına kimliği doğrulanmış giriş sayısı üzerinde kotalar içerir (bkz. veri aktarımı). Docker Hub 'dan çekmenize sınırlı olduğunu fark ederseniz, docker login oturum açmadıysanız deneyin.

  1. Görüntüyü derlemek 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, yapılandırmanın çalıştığını test edin:

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

    Bu docker run komut, ve -p ardından görüntünün adı ile birlikte gelen bağlantı noktasını belirtir. -it ile durdurmanızı sağlar Ctrl+C .

    İpucu

    Windows üzerinde çalıştırıyorsanız ve hatayı görürseniz, standard_init_linux. go: 211: exec kullanıcı işlemi "böyle bir dosya veya dizin yok" hatası nedeniyle, init.sh dosyası beklenen LF sonları yerine CR-LF satır sonlarını içeriyor. Bu hata, örnek depoyu kopyalamak için git kullandıysanız ancak parametreyi atlarsanız oluşur --config core.autocrlf=input . Bu durumda, depoyu '--config ' ' bağımsız değişkeniyle yeniden kopyalayın. Ayrıca, init.sh öğesini DÜZENLEDIYSENIZ ve CRLF sonları ile kaydettiyseniz hatayı görebilirsiniz. Bu durumda, dosyayı yalnızca LF sonları ile yeniden kaydedin.

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

    Web uygulamasını yerel olarak test etme

Kaynak grubu oluşturma

Bu bölümde ve bundan sonra, görüntüyü gönderdiğiniz ve ardından Azure App Service bir kapsayıcı dağıttığınız Azure 'da kaynak temin edersiniz. Bu kaynakların tümünün toplanacağı bir kaynak grubu oluşturarak başlayın.

Bir kaynak grubu oluşturmak için az Group Create komutunu çalıştırın:

az group create --name myResourceGroup --location westeurope

--locationSize yakın bir bölge belirtmek için değeri değiştirebilirsiniz.

Görüntüyü Azure Container Registry gönderin

Bu bölümde, görüntüyü App Service dağıtabilecek Azure Container Registry için gönderebilirsiniz.

  1. az acr createAzure Container Registry oluşturmak için komutunu çalıştırın:

    az acr create --name <registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled true
    

    <registry-name>Kayıt defteriniz için uygun bir adla değiştirin. Ad yalnızca harf ve rakam içermeli ve tüm Azure genelinde benzersiz olmalıdır.

  2. az acr showKayıt defteri için kimlik bilgilerini almak için komutunu çalıştırın:

    az acr credential show --resource-group myResourceGroup --name <registry-name>
    

    Bu komutun JSON çıktısı, kayıt defterinin Kullanıcı adı ile birlikte iki parola sağlar.

  3. docker loginKapsayıcı kayıt defterinde oturum açmak için komutunu kullanın:

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

    <registry-name>Ve <registry-username> değerlerini önceki adımlardan gelen değerlerle değiştirin. İstendiğinde, önceki adımda bulunan parolalardan birini yazın.

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

  4. Oturum açma başarılı olduktan sonra kayıt defteri için yerel Docker görüntünüzü etiketleyin:

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

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

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

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

  6. az acr repository listGönderme işleminin başarılı olduğunu doğrulamak için komutunu kullanın:

    az acr repository list -n <registry-name>
    

    Çıktıda görüntünüzün adı gösterilmelidir.

Görüntüyü kayıt defterinden dağıtmak için App Service yapılandırma

Azure App Service bir kapsayıcı dağıtmak için, önce App Service üzerinde bir Web uygulaması oluşturun, ardından Web uygulamasını kapsayıcı kayıt defterine bağlayın. Web uygulaması başladığında, App Service görüntüyü otomatik olarak kayıt defterinden çeker.

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

    az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --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 pahalı bir B1 fiyatlandırma katmanını kullanır. Katmanı parametresiyle kontrol edebilirsiniz --sku .

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

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

    <app-name>Web uygulaması için bir adla değiştirin. Bu, tüm Azure genelinde benzersiz olmalıdır. Ayrıca, <registry-name> önceki bölümde bulunan kayıt defterinizin adıyla değiştirin.

  3. az webapp config appsettings set WEBSITES_PORT Ortam değişkenini uygulama kodu tarafından beklendiği gibi ayarlamak için kullanın:

    az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_PORT=8000
    

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

    bu ortam değişkeni hakkında daha fazla bilgi için örneğin GitHub deposundaki benioku dosyasınabakın.

  4. Şu komutu kullanarak Web uygulaması için sistem tarafından atanan yönetilen kimliği etkinleştirin az webapp identity assign :

    az webapp identity assign --resource-group myResourceGroup --name <app-name> --query principalId --output tsv
    

    <app-name>Önceki adımda kullandığınız adla değiştirin. Komutun çıkışı ( --query ve bağımsız değişkenlerine göre filtrelenmiş), --output Bu, kısa süre içinde kullandığınız atanan kimliğin hizmet sorumlusu olur.

    Yönetilen kimlik, belirli kimlik bilgilerine gerek duymadan Web uygulamasına diğer Azure kaynaklarına erişim izni vermenizi sağlar.

  5. Bir az account show sonraki adımda ihtiyacınız olan komutuyla ABONELIK Kimliğinizi alın:

    az account show --query id --output tsv
    
  6. Yönetilen kimliğe kapsayıcı kayıt defterine erişim izni verin:

    az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"
    

    Aşağıdaki değerleri değiştirin:

    • <principal-id>komutun hizmet sorumlusu KIMLIĞIYLE az webapp identity assign
    • <registry-name> kapsayıcı kayıt defterinizin adıyla
    • <subscription-id>komuttan alınan abonelik KIMLIĞIYLE az account show

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

  7. Uygulamanızı Azure Container Registry üzerinden çekmek üzere yönetilen kimliği kullanacak şekilde yapılandırın.

    az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.acrUseManagedIdentityCreds=True
    

    Aşağıdaki değerleri değiştirin:

    • <subscription-id> , komuttan alınan abonelik KIMLIĞIYLE az account show .
    • <app-name> Web uygulamanızın adı ile.

    İpucu

    Uygulamanız Kullanıcı tarafından atanan bir yönetilen kimlikkullanıyorsa, AcrUserManagedIdentityID istemci kimliğini belirtmek için ek bir özellik ayarlayın:

    clientId=$(az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv)
    az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.AcrUserManagedIdentityID=$clientId
    

Görüntüyü dağıtın ve uygulamayı test edin

Görüntü kapsayıcı kayıt defterine gönderildikten sonra App Service tam olarak sağlandıktan sonra bu adımları tamamlayabilirsiniz.

  1. az webapp config container setKapsayıcı kayıt defterini ve Web uygulaması için dağıtılacak görüntüyü belirtmek için komutunu kullanın:

    az webapp config container set --name <app-name> --resource-group myResourceGroup --docker-custom-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest --docker-registry-server-url https://<registry-name>.azurecr.io
    

    <app-name>Web uygulamanızın adıyla değiştirin ve <registry-name> iki yerde, kayıt defterinizin adıyla değiştirin.

    • Docker Hub 'dan farklı bir kayıt defteri kullanırken (Bu örnekte gösterildiği gibi), --docker-registry-server-url https:// kayıt defterinin tam etki alanı adı tarafından izlenen şekilde biçimlendirilmesi gerekir.
    • İleti, "erişim için kimlik bilgisi sağlanmadı Azure Container Registry. Aramaya çalışılıyor... " Azure 'un, bir Kullanıcı adı ve parola sormak yerine kapsayıcı kayıt defteri ile kimlik doğrulaması yapmak için uygulamanın yönetilen kimliğini kullandığını söyler.
    • Hatayla karşılaşırsanız, "AttributeError: ' NoneType ' nesnesinde ' ayrılmış ' özniteliği yoktur, doğru olduğundan emin olun <app-name> .

    İpucu

    Web uygulamasının kapsayıcı ayarlarını, komutunu kullanarak istediğiniz zaman alabilirsiniz az webapp config container show --name <app-name> --resource-group myResourceGroup . Görüntü, özelliğinde belirtilmiştir DOCKER_CUSTOM_IMAGE_NAME . web uygulaması Azure DevOps veya Azure Resource Manager şablonları aracılığıyla dağıtıldığında, görüntü adlı bir özellikte de görünebilir LinuxFxVersion . Her iki özellik de aynı amaca sahiptir. Web uygulamasının yapılandırmasında her ikisi de varsa, LinuxFxVersion öncelik kazanır.

  2. az webapp config container setKomut tamamlandıktan sonra, Web uygulamasının App Service kapsayıcıda üzerinde çalışıyor olması gerekir.

    Uygulamayı test etmek için ' e gidin https://<app-name>.azurewebsites.net , <app-name> Web uygulamanızın adıyla değiştirin. İlk erişimde, App Service tüm görüntüyü kayıt defterinden çekmek gerektiğinden uygulamanın yanıt vermesi biraz zaman alabilir. Tarayıcı zaman aşımına uğrarsa sayfayı yenilemeniz yeterlidir. İlk görüntü çekildikten sonra, sonraki testler çok daha hızlı çalışacaktır.

    Azure 'da Web uygulamasının başarılı testi

Tanılama günlüklerine erişim

App Service görüntüyü çekmek için beklerken, kapsayıcı günlüklerini terminalinize akışa alarak tam olarak hangi App Service yaptığını görmeniz yararlı olur.

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

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

    az webapp log tail --name <app-name> --resource-group myResourceGroup
    

    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.

Sürekli dağıtımı yapılandırma

App Service uygulamanız artık kapsayıcı görüntüsünü özel kapsayıcı Kayıt defterinizden güvenli bir şekilde çekebilirsiniz. Ancak, bu görüntünün kayıt defterinizde ne zaman güncelleştirileceğini bilmez. Güncelleştirilmiş görüntüyü kayıt defterine her gönderişinizde, App Service uygulamasını yeniden başlatarak bir görüntü çekmeyi el ile tetiklemeniz gerekir. Bu adımda, App Service yeni bir görüntünün bildirilmesini ve otomatik olarak bir çekme tetiklemesini sağlamak için CI/CD 'yi etkinleştirirsiniz.

  1. App Service içinde CI/CD 'yi etkinleştirin.

    az webapp deployment container config --enable-cd true --name <app-name> --resource-group myResourceGroup --query CI_CD_URL --output tsv
    

    CI_CD_URL , sizin için App Service oluşturduğu bir URL 'dir. Kayıt defteriniz, bir görüntü gönderimi meydana App Service bildirimde bulunan bu URL 'ye sahip olmalıdır. Aslında Web kancasını sizin için oluşturmaz.

  2. Son adımdan aldığınız CI_CD_URL kullanarak kapsayıcı kayıt defterinizde bir Web kancası oluşturun.

    az acr webhook create --name appserviceCD --registry <registry-name> --uri '<ci-cd-url>' --actions push --scope appsvc-tutorial-custom-image:latest
    
  3. Web kancasının doğru yapılandırılıp yapılandırılmadığını test etmek için Web kancasına ping gönderin ve 200 Tamam yanıtı olup olmadığını görü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ında tüm bilgileri görmek için, --query parametresini kaldırın.

    Kapsayıcı günlüğünü akışınsanız, Web Starting container for site kancası uygulamayı yeniden başlatmak üzere tetiklediği için Web kancası ping: ' dan sonra iletiyi görmeniz gerekir. Görüntüde hiçbir şey yapmadığınızdan, App Service çekmek için yeni bir şey yoktur.

Uygulama kodunu değiştirin ve yeniden dağıtın

Bu bölümde, Web uygulaması kodunda bir değişiklik yapar, görüntüyü yeniden derleyin ve ardından kapsayıcıyı kapsayıcı Kayıt defterinize gönderirsiniz. App Service, çalışan Web uygulamasını güncelleştirmek için, güncelleştirilmiş görüntüyü otomatik olarak kayıt defterinden çeker.

  1. Yerel Docker-docgo-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. Yaptığınız değişiklikleri kaydedin.

  4. Docker-docgo-WebApp-Linux klasörünü değiştirin ve görüntüyü yeniden oluşturun:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Görüntünün etiketindeki sürüm numarasını v 1.0.1 olarak güncelleştirin:

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

    <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:v1.0.1
    
  7. Görüntü gönderme işlemi tamamlandıktan sonra, Web kancası Push hakkında App Service bildirir ve App Service güncelleştirilmiş görüntüyü çekmeye çalışır. Birkaç dakika bekleyin ve sonra güncelleştirmeye göz atarak dağıtıldığını doğrulayın https://<app-name>.azurewebsites.net .

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ı sağlamak için özel görüntünüzün yapılandırılması gerekir. Kapsayıcı çalışmaya başladıktan sonra bir SSH bağlantısı açabilirsiniz.

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

Bu öğreticide kullanılan örnek uygulama, SSH sunucusunu yükleyecek ve ayrıca oturum açma kimlik bilgilerini 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 atlayın

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 vermiyor. SSH yalnızca Kudu/SCM Sitesi aracılığıyla kullanılabilir. Kudu/SCM sitesinin kimliği, Azure hesabınızla doğrulanır. kök: Docker! SSH değiştirilmemelidir. SCM/KUDU, Azure Portal kimlik bilgilerinizi kullanacaktır. Bu değerin değiştirilmesi, SSH kullanılırken hata oluşmasına 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. Gidin https://<app-name>.scm.azurewebsites.net/webssh/host ve Azure hesabınızla oturum açın. <app-name> değerini web uygulamanızın adıyla değiştirin.

  2. Oturum açıldıktan sonra, Web uygulaması için bir bilgilendirme sayfasına yönlendirilirsiniz. Kabuğu açmak ve komutları kullanmak için sayfanın üst kısmındaki SSH ' ı seçin.

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

Kaynakları temizleme

Bu makalede oluşturduğunuz kaynaklar devam eden maliyetlerine neden olabilir. kaynakları temizlemek için, yalnızca bunları içeren kaynak grubunu silmeniz gerekir:

az group delete --name myResourceGroup

Sonraki adımlar

Öğrendikleriniz:

  • Özel bir kapsayıcı kayıt defterine özel bir görüntü dağıtma
  • App Service ve özel görüntüyü dağıtın
  • 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 için özel bir Docker görüntüsü gönderin
  • Özel görüntüyü App Service dağıtma
  • Ortam değişkenlerini yapılandırma
  • Yönetilen kimlik kullanarak App Service görüntü çekme
  • Tanılama günlüklerine erişim
  • Azure Container Registry App Service için CI/CD 'yi etkinleştir
  • SSH kullanarak kapsayıcıya bağlanma

Sonraki öğreticide, uygulamanıza özel bir DNS adı eşlemeyi öğreneceksiniz.

Ya da diğer kaynaklara göz atın: