Memigrasikan perangkat lunak kustom ke Azure App Service menggunakan kontainer kustom

Azure App Service menyediakan tumpukan aplikasi yang ditentukan sebelumnya di Windows seperti ASP.NET atau Node.js, yang berjalan di IIS. Lingkungan Windows yang telah dikonfigurasi sebelumnya mengunci sistem operasi dari:

  • Akses administratif.
  • Penginstalan perangkat lunak.
  • Perubahan pada cache perakitan global.

Untuk informasi selengkapnya, lihat Fungsionalitas sistem operasi di Azure App Service.

Anda dapat menyebarkan gambar Windows yang dikonfigurasi kustom dari Visual Studio untuk membuat perubahan OS yang dibutuhkan aplikasi Anda. Jadi mudah memigrasikan aplikasi lokal yang memerlukan konfigurasi OS dan perangkat lunak kustom. Tutorial ini menunjukkan cara bermigrasi ke App Service aplikasi ASP.NET yang menggunakan font kustom yang diinstal di pustaka font Windows. Anda menyebarkan gambar Windows yang dikonfigurasi secara kustom dari Visual Studio ke Azure Container Registry, lalu menjalankannya di App Service.

Memperlihatkan aplikasi web yang berjalan di kontainer Windows.

Prasyarat

Untuk menyelesaikan tutorial ini:

Menyiapkan aplikasi secara lokal

Unduh sampel

Dalam langkah ini, Anda menyiapkan proyek .NET lokal.

Proyek sampel berisi aplikasi ASP.NET sederhana yang menggunakan font kustom yang diinstal ke pustaka font Windows. Tidak perlu menginstal font. Namun, sampel ini adalah contoh aplikasi yang terintegrasi dengan OS yang mendasarinya. Untuk memigrasikan aplikasi tersebut ke App Service, Anda membuat ulang kode Anda untuk menghapus integrasi, atau memigrasikannya apa adanya di kontainer Windows kustom.

Menginstal font

Di Windows Explorer, navigasikan ke custom-font-win-container-master/CustomFontSample, klik kanan FrederickatheGreat-Regular.ttf, dan pilih Instal.

Font ini tersedia untuk umum dari Google Fonts.

Menjalankan aplikasi

Buka file custom-font-win-container-master/CustomFontSample.sln di Visual Studio.

Ketik Ctrl+F5 untuk menjalankan aplikasi tanpa penelusuran kesalahan. Aplikasi ini ditampilkan di browser default Anda.

Cuplikan layar memperlihatkan aplikasi yang ditampilkan di browser default.

Karena menggunakan font yang diinstal, aplikasi tidak dapat berjalan di kotak pasir App Service. Namun, Anda dapat menyebarkannya menggunakan kontainer Windows sebagai gantinya, karena Anda dapat menginstal font di kontainer Windows.

Mengonfigurasi kontainer Windows

Di Penjelajah Solusi, klik kanan proyek CustomFontSample dan pilih Tambahkan>Dukungan Orkestrasi Kontainer.

Cuplikan layar jendela Penjelajah Solusi memperlihatkan item menu proyek CustomFontSample,Tambahkan, dan Dukungan Orkestrator Kontainer dipilih.

Pilih Docker Compose>OK.

Proyek Anda sekarang diatur untuk dijalankan di kontainer Windows. Dockerfile Ditambahkan ke proyek CustomFontSample, dan proyek docker-compose ditambahkan ke solusi.

Dari Penjelajah Solusi, buka Dockerfile.

Anda harus menggunakan gambar induk yang didukung. Ubah gambar induk dengan mengganti baris FROM dengan kode berikut:

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

Di akhir file, tambahkan baris berikut dan simpan file:

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

Anda dapat menemukan InstallFont.ps1 dalam proyek CustomFontSample. Ini adalah skrip sederhana yang menginstal font. Anda dapat menemukan versi skrip yang lebih kompleks di Galeri PowerShell.

Catatan

Untuk menguji kontainer Windows secara lokal, pastikan Docker dimulai di komputer lokal Anda.

Menerbitkan ke Azure Container Registry

Azure Container Registry dapat menyimpan gambar Anda untuk penyebaran kontainer. Anda dapat mengonfigurasi App Service untuk menggunakan gambar yang dihosti di Azure Container Registry.

Membuka panduan penerbitan

Di Penjelajah Solusi, klik kanan proyek CustomFontSample dan pilih Terbikan.

Cuplikan layar Penjelajah Solusi memperlihatkan proyek CustomFontSample dan Terbitkan dipilih.

Membuat registri dan menerbitkan

Dalam wizard penerbitan, pilih Container Registry>Buat Azure Container Registry Baru>Terbitkan.

Cuplikan layar wizard penerbitan memperlihatkan Container Registry, Buat Azure Container Registry Baru, dan tombol Terbitkan dipilih.

Masuk menggunakan akun Azure

Dalam dialog Buat Azure Container Registry baru, pilih Tambahkan akun, dan masuk ke langganan Azure Anda. Jika Anda sudah masuk, pilih akun yang berisi langganan yang diinginkan dari menu dropdown.

Masuk ke Azure.

Mengonfigurasi registri

Konfigurasikan registri kontainer baru berdasarkan nilai yang disarankan dalam tabel berikut ini. Setelah selesai, pilih Buat.

Pengaturan Nilai yang disarankan Untuk informasi lebih lanjut
Prefiks DNS Pertahankan nama registri yang dihasilkan, atau ubah ke nama unik lainnya.
Grup Sumber Daya Pilih Baru, ketik myResourceGroup, dan pilih Oke.
SKU Dasar Tingkat harga
Lokasi Registri Eropa Barat

Mengonfigurasikan registri kontainer Azure.

Jendela terminal terbuka dan menampilkan kemajuan penyebaran gambar. Tunggu hingga penerapan selesai.

Masuk ke Azure

Masuk ke portal Azure.

Membuat aplikasi web

Dari menu sebelah kiri, pilih Buat sumber daya>Web>Aplikasi Web untuk Kontainer.

Mengonfigurasi dasar aplikasi

Di tab Dasar, konfigurasikan pengaturan sesuai dengan tabel berikut, lalu pilih Berikutnya: Docker.

Pengaturan Nilai yang disarankan Untuk informasi lebih lanjut
Langganan Pastikan langganan yang benar dipilih.
Grup Sumber Daya Klik Buat baru, ketik myResourceGroup, dan pilih Oke.
Nama Ketik nama unik. URL aplikasi web adalah https://<app-name>.azurewebsites.net, dengan <app-name> merupakan nama aplikasi Anda.
Mempublikasikan Kontainer Docker
Sistem Operasi Windows
Wilayah Eropa Barat
Paket Windows Pilih Buat baru, ketik myAppServicePlan, dan pilih Oke.

Tab Dasar Anda akan terlihat seperti ini:

Memperlihatkan tab Dasar yang digunakan untuk mengonfigurasi aplikasi web.

Mengonfigurasi kontainer Windows

Di tab Docker, konfigurasikan kontainer Windows kustom Anda seperti yang diperlihatkan dalam tabel berikut, dan pilih Tinjau + buat.

Pengaturan Nilai yang disarankan
Sumber Gambar Daftar Kontainer Azure
Registri Pilih registri yang Anda buat sebelumnya.
Gambar customfontsample
Menandai terbaru

Menyelesaikan pembuatan aplikasi

Klik Buat dan tunggu hingga Azure membuat sumber daya yang diperlukan.

Menelusuri ke aplikasi web

Saat operasi Azure selesai, kotak pemberitahuan ditampilkan.

Memperlihatkan bahwa operasi Azure selesai.

  1. Pilih Buka sumber daya.

  2. Di halaman aplikasi, pilih tautan di bagian URL.

Halaman browser baru dibuka untuk halaman berikut:

Memperlihatkan halaman browser baru untuk aplikasi web.

Tunggu beberapa menit dan coba lagi, hingga Anda mendapatkan beranda dengan font indah yang Anda harapkan:

Memperlihatkan beranda dengan font yang Anda konfigurasi.

Selamat! Anda sudah memigrasikan aplikasi ASP.NET ke Azure App Service dalam kontainer Windows.

Melihat log mulai kontainer

Mungkin perlu waktu bagi kontainer Windows untuk memuat. Untuk melihat perkembangannya, buka URL berikut dengan mengganti <app-name> dengan nama aplikasi Anda.

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

Log yang dialirkan terlihat seperti ini:

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 menggunakan teknologi kontainer Docker untuk menghost gambar bawaan dan gambar kustom. Untuk melihat daftar gambar bawaan, jalankan perintah Azure CLI, 'az webapp list-runtimes --os linux'. Jika gambar tersebut tidak memenuhi kebutuhan Anda, Anda dapat membuat dan menyebarkan gambar kustom.

Catatan

Kontainer harus menargetkan arsitektur x86-x64, ARM64 tidak didukung.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Mendorong citra Docker kustom ke Azure Container Registry
  • Menyebarkan citra kustom ke App Service
  • Mengonfigurasi variabel lingkungan
  • Menarik citra ke App Service menggunakan identitas terkelola
  • Mengakses log diagnostik
  • Mengaktifkan CI/CD dari Azure Container Registry ke App Service
  • Menyambungkan ke kontainer menggunakan SSH

Menyelesaikan tutorial ini dikenakan sedikit biaya untuk registri kontainer di akun Azure Anda dan dapat dikenakan lebih banyak biaya untuk meng-hosting kontainer selama lebih dari sebulan.

Menyiapkan lingkungan awal Anda

Tutorial ini memerlukan Azure CLI versi 2.0.80 atau lebih baru. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terpasang.

  • Instal Docker, yang Anda gunakan untuk membangun gambar Docker. Menginstal Docker mungkin perlu menghidupkan ulang komputer.

Setelah menginstal Docker, buka jendela terminal dan verifikasi bahwa docker diinstal:

docker --version

Klon atau unduh aplikasi sampel

Anda bisa mendapatkan sampel untuk tutorial ini melalui klon git atau unduhan.

Mengklon dengan git

Klon sampel repositori:

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

Pastikan Anda menyertakan argumen --config core.autocrlf=input untuk menjamin akhiran baris yang tepat dalam file yang digunakan di dalam kontainer Linux:

Lalu, buka folder:

cd docker-django-webapp-linux

Mengunduh dari GitHub

Alih-alih menggunakan klon git, Anda dapat mengunjungi https://github.com/Azure-Samples/docker-django-webapp-linux, memilih Klon, lalu memilih Unduh ZIP.

Buka file ZIP ke dalam folder bernama docker-django-webapp-linux.

Selanjutnya, buka jendela terminal dalam folder docker-django-webapp-linux tersebut.

(Opsional) Memeriksa file Docker

File dalam sampel bernama Dockerfile yang menjelaskan gambar docker dan berisi instruksi konfigurasi:

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"]
  • Grup perintah pertama menginstal persyaratan aplikasi di lingkungan.
  • Grup perintah kedua membuat server SSH untuk komunikasi yang aman antara kontainer dan host.
  • Baris terakhir, ENTRYPOINT ["init.sh"] memanggil init.sh untuk memulai layanan SSH dan server Python.

Membangun dan menguji gambar secara lokal

Catatan

Docker Hub memiliki kuota pada jumlah penarikan anonim per IP dan jumlah penarikan terautentikasi per pengguna gratis (lihat Transfer data). Jika Anda memperhatikan penarikan Anda dari Docker Hub sedang dibatasi, coba docker login jika Anda belum masuk.

  1. Jalankan perintah berikut untuk membuat gambar:

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Uji bahwa build berfungsi dengan menjalankan kontainer Docker secara lokal:

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

    Perintah docker run ini menentukan port dengan argumen -p yang diikuti dengan nama gambar. -it memungkinkan Anda menghentikannya dengan Ctrl+C.

    Tip

    Jika Anda menjalankan Windows dan melihat kesalahan, standard_init_linux.go:211: exec user process caused "no such file or directory", file init.sh berisi akhiran baris CR-LF, bukan akhiran LF yang diharapkan. Kesalahan ini terjadi jika Anda menggunakan git untuk mengklon repositori sampel, tetapi menghilangkan parameter --config core.autocrlf=input. Dalam hal ini, klon kembali repositori dengan argumen `--config``. Anda mungkin juga melihat kesalahan jika Anda mengedit init.sh dan menyimpannya dengan akhiran CRLF. Dalam hal ini, simpan kembali file hanya dengan akhiran LF.

  3. Telusuri http://localhost:8000 untuk memverifikasi aplikasi web dan kontainer berfungsi dengan benar.

    Menguji aplikasi web secara lokal.

I. Membuat identitas terkelola yang ditetapkan pengguna

App Service dapat menggunakan identitas terkelola default atau identitas terkelola yang ditetapkan pengguna untuk mengautentikasi dengan registri kontainer. Dalam tutorial ini, Anda akan menggunakan identitas terkelola yang ditetapkan pengguna.

  1. Jalankan perintah az group create untuk membuat grup sumber daya:

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

    Anda bisa mengubah nilai --location untuk menentukan wilayah di dekat Anda.

  2. Buat identitas terkelola di grup sumber daya.

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

II. Membuat registri kontainer

  1. Buat registri kontainer dengan az acr create perintah dan ganti <registry-name> dengan nama unik untuk registri Anda. Nama hanya boleh berisi huruf dan angka, dan harus unik di semua Azure.

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

    Parameter ini --admin-enabled memungkinkan Anda mendorong gambar ke registri menggunakan serangkaian kredensial administratif.

  2. Ambil kredensial administratif dengan menjalankan az acr show perintah:

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

    Output JSON dari perintah ini menyediakan dua kata sandi bersama dengan nama pengguna registri.

III. Dorong gambar sampel ke Azure Container Registry

Di bagian ini, Anda mendorong gambar ke Azure Container Registry, yang akan digunakan oleh App Service nanti.

  1. Dari terminal lokal tempat Anda membuat gambar sampel, gunakan docker login perintah untuk masuk ke registri kontainer:

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

    Ganti <registry-name> dan <registry-username> dengan nilai dari langkah sebelumnya. Saat diminta, ketik salah satu kata sandi dari langkah sebelumnya.

    Anda menggunakan nama registri yang sama di semua langkah yang tersisa dari bagian ini.

  2. Saat proses masuk berhasil, tandai gambar Docker lokal Anda ke registri:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  3. Gunakan perintaj docker push untuk mendorong gambar ke registri:

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

    Mengunggah gambar untuk pertama kali mungkin memakan waktu beberapa menit karena menyertakan gambar dasar. Unggahan berikutnya biasanya lebih cepat.

    Saat menunggu, Anda dapat menyelesaikan langkah-langkah di bagian berikutnya untuk mengonfigurasi App Service yang disebarkan dari registri.

IV. Mengotorisasi identitas terkelola untuk registri Anda

Identitas terkelola yang Anda buat belum memiliki otorisasi untuk menarik dari registri kontainer. Dalam langkah ini, Anda mengaktifkan otorisasi.

  1. Ambil ID utama untuk identitas terkelola:

    principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)
    
  2. Ambil ID sumber daya untuk registri kontainer:

    registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)
    
  3. Beri izin identitas terkelola untuk mengakses registri kontainer:

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

    Untuk informasi selengkapnya tentang izin ini, lihat Apa itu kontrol akses berbasis peran Azure.

V. Buat aplikasi web

  1. Buat paket App Service menggunakan perintah az appservice plan create:

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

    Paket App Service sesuai dengan komputer virtual yang menghost aplikasi web. Secara default, perintah sebelumnya menggunakan tingkat harga B1 murah yang gratis untuk bulan pertama. Anda dapat mengontrol tingkat dengan parameter --sku.

  2. Buat aplikasi web dengan perintah az webapp create:

    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
    

    Ganti <app-name> dengan nama untuk aplikasi web, yang harus unik di seluruh Azure. Juga ganti <registry-name> dengan nama registri Anda dari bagian sebelumnya.

    Tip

    Anda dapat mengambil pengaturan kontainer aplikasi web kapan saja dengan perintah az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorial. Gambar ditentukan dalam properti DOCKER_CUSTOM_IMAGE_NAME. Saat aplikasi web disebarkan melalui templat Azure DevOps atau Azure Resource Manager, gambar juga dapat muncul di properti bernama LinuxFxVersion. Kedua properti melayani tujuan yang sama. Jika keduanya ada dalam konfigurasi aplikasi web, LinuxFxVersion lebih diutamakan.

VI. Mengonfigurasi aplikasi web

Dalam langkah ini, Anda mengonfigurasi aplikasi web sebagai berikut:

  • Kontainer sampel mendengarkan port 8000 untuk permintaan web, dan Anda mengonfigurasi aplikasi untuk mengirim permintaan ke port 8000.
  • Beri tahu aplikasi Anda untuk menggunakan identitas terkelola untuk menarik gambar dari registri kontainer Anda.
  • Mengonfigurasi penyebaran berkelanjutan dari registri kontainer (atau, setiap dorongan gambar ke registri akan memicu aplikasi Anda untuk menarik gambar baru). Bagian ini tidak diperlukan agar aplikasi web Anda menarik dari registri kontainer Anda, tetapi dapat memberi tahu aplikasi web Anda saat gambar baru didorong ke registri. Tanpa itu, Anda harus memicu penarikan gambar secara manual dengan memulai ulang aplikasi web.
  1. Gunakan az webapp config appsettings set untuk mengatur variabel lingkungan WEBSITES_PORT seperti yang diharapkan oleh kode aplikasi:

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

    Ganti <app-name> dengan nama yang Anda gunakan di langkah sebelumnya.

    Untuk informasi selengkapnya tentang variabel lingkungan ini, lihat readme di repositori GitHub sampel.

  2. Aktifkan identitas terkelola yang ditetapkan pengguna di aplikasi web dengan az webapp identity assign perintah :

    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
    

    Ganti <app-name> dengan nama yang Anda gunakan di langkah sebelumnya.

  3. Konfigurasikan aplikasi Anda untuk menarik dari Azure Container Registry dengan menggunakan identitas terkelola.

    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
    

    Ganti <app-name> dengan nama yang Anda gunakan di langkah sebelumnya.

  4. Atur ID klien yang digunakan aplikasi web Anda untuk menarik dari Azure Container Registry. Langkah ini tidak diperlukan jika Anda menggunakan identitas terkelola yang ditetapkan sistem.

    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. Mengaktifkan CI/CD di App Service.

    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 adalah URL yang dihasilkan App Service untuk Anda. Registri Anda harus menggunakan URL ini untuk memberi tahu App Service bahwa terjadi pendorongan gambar. Tindakan ini tidak benar-benar membuat webhook untuk Anda.

  6. Buat webhook di registri kontainer Anda menggunakan CI_CD_URL yang Anda dapatkan dari langkah terakhir.

    az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
    
  7. Untuk menguji apakah webhook Anda dikonfigurasi dengan benar, ping webhook, dan lihat apakah Anda mendapatkan respons 200 OK.

    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"
    

    Tip

    Untuk melihat semua informasi tentang semua kejadian webhook, hapus parameter --query.

    Jika Anda mengalirkan log kontainer, Anda akan melihat pesan setelah ping webhook ping: Starting container for site, karena webhook memicu aplikasi untuk memulai ulang.

VII. Menelusuri ke aplikasi web

Untuk menguji aplikasi, telusuri https://<app-name>.azurewebsites.net, yang mengganti <app-name> dengan nama aplikasi web Anda.

Pada akses pertama, aplikasi mungkin memerlukan waktu beberapa saat untuk merespons karena App Service harus menarik seluruh gambar dari registri. Jika waktu browser habis, cukup refresh halaman. Setelah gambar awal ditarik, tes berikutnya akan berjalan jauh lebih cepat.

Cuplikan layar browser yang menunjukkan aplikasi web berhasil berjalan di Azure.

VIII. Mengakses log diagnostik

Saat Anda menunggu App Service menarik gambar, akan sangat membantu untuk melihat dengan tepat apa yang dilakukan App Service dengan mengalirkan log kontainer ke terminal Anda.

  1. Aktifkan pengelogan kontainer:

    az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystem
    
  2. Aktifkan aliran log:

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

    Jika Anda tidak segera melihat log konsol, periksa lagi dalam 30 detik.

    Anda juga dapat memeriksa file log dari browser di https://<app-name>.scm.azurewebsites.net/api/logs/docker.

  3. Untuk menghentikan streaming log kapan saja, ketikkan Ctrl+C.

IX. Mengubah kode aplikasi dan menyebarkan kembali

Di bagian ini, Anda membuat perubahan pada kode aplikasi web, membangun kembali citra, lalu mendorongnya ke registri kontainer. Selanjutnya App Service secara otomatis menarik gambar yang diperbarui dari registri untuk memperbarui aplikasi web yang sedang berjalan.

  1. Di folder docker-django-webapp-linux lokal Anda, buka file app/templates/app/index.html.

  2. Ubah elemen HTML pertama untuk menyesuaikan dengan kode berikut.

    <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. Simpan perubahan.

  4. Ubah ke folder docker-django-webapp-linux dan bangun ulang gambar:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Perbarui tag gambar ke yang terbaru:

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

    Ganti <registry-name> dengan nama aplikasi web Anda.

  6. Dorong gambar ke registri:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  7. Setelah pendorongan gambar selesai, webhook akan memberi tahu App Service tentang pendorongan tersebut dan App Service akan mencoba menarik gambar yang diperbarui. Tunggu beberapa menit, lalu verifikasi bahwa pembaruan telah disebarkan dengan mengakses https://<app-name>.azurewebsites.net.

X. Menyambungkan ke kontainer menggunakan SSH

SSH mengaktifkan komunikasi yang aman antara kontainer dan klien. Untuk mengaktifkan koneksi SSH ke kontainer Anda, gambar kustom Anda harus dikonfigurasi untuk koneksi tersebut. Saat kontainer berjalan, Anda dapat membuka koneksi SSH.

Mengonfigurasi kontainer untuk SSH

Aplikasi sampel yang digunakan dalam tutorial ini sudah memiliki konfigurasi yang diperlukan di Dockerfile, yang menginstal server SSH dan juga mengatur kredensial masuk. Bagian ini hanya bersifat informasi. Untuk menghubungkan ke kontainer, lompati ke bagian berikutnya.

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 

Catatan

Konfigurasi ini tidak mengizinkan koneksi eksternal ke kontainer. SSH hanya tersedia melalui Situs Kudu/SCM. Situs Kudu/SCM diautentikasi dengan akun Azure Anda. root:Docker! tidak boleh diubah SSH. SCM/KUDU akan menggunakan info masuk portal Microsoft Azure Anda. Mengubah nilai ini akan mengakibatkan kesalahan saat menggunakan SSH.

Dockerfile juga menyalin file sshd_config ke folder /etc/ssh/ dan membuka port 2222 pada kontainer:

COPY sshd_config /etc/ssh/

# ...

EXPOSE 8000 2222

Port 2222 adalah port internal yang hanya dapat diakses oleh kontainer dalam jaringan jembatan jaringan virtual privat.

Terakhir, skrip entri, init.sh, memulai server SSH.

#!/bin/bash
service ssh start

Membuka koneksi SSH ke kontainer

  1. Jelajahi https://<app-name>.scm.azurewebsites.net/webssh/host dan masuk dengan Azure Anda. Ganti <app-name> dengan nama aplikasi web Anda.

  2. Saat masuk, Anda akan diarahkan ke halaman informasi untuk aplikasi web. Pilih SSH di bagian atas halaman untuk membuka shell dan menggunakan perintah.

    Misalnya, Anda dapat memeriksa proses yang berjalan di dalamnya menggunakan perintah top.

XI. Membersihkan sumber daya

Sumber daya yang Anda buat dalam artikel ini dapat menimbulkan biaya berkelanjutan. Untuk membersihkan sumber daya, Anda hanya perlu menghapus grup sumber daya yang berisi sumber daya tersebut:

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

Langkah berikutnya

Apa yang Anda pelajari:

  • Menyebarkan gambar kustom ke registri kontainer privat
  • Menyebarkan dan gambar kustom di App Service
  • Memperbarui dan menyebarkan ulang aplikasi
  • Mengakses log diagnostik
  • Menyambungkan ke kontainer menggunakan SSH
  • Mendorong citra Docker kustom ke Azure Container Registry
  • Menyebarkan citra kustom ke App Service
  • Mengonfigurasi variabel lingkungan
  • Menarik citra ke App Service menggunakan identitas terkelola
  • Mengakses log diagnostik
  • Mengaktifkan CI/CD dari Azure Container Registry ke App Service
  • Menyambungkan ke kontainer menggunakan SSH

Dalam tutorial berikutnya, Anda mempelajari cara mengamankan aplikasi Anda dengan domain dan sertifikat kustom.

Atau, lihat sumber daya lainnya: