Mengonfigurasikan kontainer kustom untuk Azure App Service

Artikel ini memperlihatkan kepada Anda cara mengonfigurasi kontainer kustom untuk dijalankan di Azure App Service.

Panduan ini menyediakan konsep dan instruksi utama untuk kontainerisasi aplikasi Windows di App Service. Pengguna Azure App Service baru harus mengikuti mulai cepat dan tutorial kontainer kustom terlebih dahulu.

Panduan ini menyediakan konsep dan instruksi utama untuk kontainerisasi aplikasi Linux di App Service. Jika baru menggunakan Azure App Service, ikuti mulai cepat dan tutorial kontainer kustom terlebih dahulu. Ada juga mulai cepat aplikasi multi-kontainer dan tutorial. Untuk kontainer sidecar (pratinjau), lihat Tutorial: Mengonfigurasi kontainer sidecar untuk kontainer kustom di Azure App Service (pratinjau).

Catatan

Perwakilan Layanan tidak lagi didukung untuk autentikasi penarikan gambar kontainer Windows. Cara yang disarankan adalah dengan menggunakan Identitas Terkelola untuk kontainer Windows dan Linux

Gambar induk yang didukung

Untuk citra Windows kustom, Anda harus memilih gambar induk (gambar dasar) yang tepat untuk kerangka kerja yang Anda inginkan:

Diperlukan waktu untuk mengunduh gambar induk selama start-up aplikasi. Namun, Anda dapat mengurangi waktu mulai dengan menggunakan salah satu gambar induk berikut yang sudah di-cache di Azure App Service:

Mengubah gambar Docker dari kontainer kustom

Untuk mengubah wadah khusus yang ada dari gambar Docker saat ini ke gambar baru, gunakan perintah berikut:

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <docker-hub-repo>/<image>

Menggunakan gambar dari registri privat

Untuk menggunakan gambar dari registri privat, seperti Azure Container Registry, jalankan perintah berikut:

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <image-name> --docker-registry-server-url <private-repo-url> --docker-registry-server-user <username> --docker-registry-server-password <password>

Untuk <nama> pengguna dan <kata sandi>, berikan kredensial masuk untuk akun registri privat Anda.

Gunakan identitas terkelola untuk menarik gambar dari Azure Container Registry

Gunakan langkah-langkah berikut untuk mengonfigurasi aplikasi web Anda untuk menarik dari Azure Container Registry (ACR) menggunakan identitas terkelola. Langkah-langkahnya menggunakan identitas terkelola yang ditetapkan sistem, tetapi Anda juga dapat menggunakan identitas terkelola yang ditetapkan pengguna.

  1. Aktifkan identitas terkelola yang ditetapkan sistem untuk aplikasi web menggunakan perintah az webapp identity assign:

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

    Ganti <app-name> dengan nama yang Anda gunakan di langkah sebelumnya. Output perintah (difilter oleh --query argumen dan --output ) adalah ID perwakilan layanan dari identitas yang ditetapkan.

  2. Dapatkan ID sumber daya dari Azure Container Registry Anda:

    az acr show --resource-group <group-name> --name <registry-name> --query id --output tsv
    

    Ganti <registry-name> dengan nama aplikasi web Anda. Output perintah (difilter oleh --query argumen dan --output ) adalah ID sumber daya Azure Container Registry.

  3. Beri izin identitas terkelola untuk mengakses registri kontainer:

    az role assignment create --assignee <principal-id> --scope <registry-resource-id> --role "AcrPull"
    

    Ganti nilai berikut:

    • <principal-id> dengan ID perwakilan layanan dari perintah az webapp identity assign
    • <registry-resource-id> dengan ID registri penampung Anda dari perintah az acr show

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

  4. Konfigurasikan aplikasi Anda untuk menggunakan identitas terkelola untuk melakukan penarikan dari Azure Container Registry.

    az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUseManagedIdentityCreds": true}'
    

    Ganti nilai berikut:

    • <app-name> dengan nama aplikasi web Anda.

    Tip

    Jika Anda menggunakan konsol PowerShell untuk menjalankan perintah, Anda harus keluar dari string dalam --generic-configurations argumen dalam ini dan langkah berikutnya. Misalnya: --generic-configurations '{\"acrUseManagedIdentityCreds\": true'

  5. (Opsional) Jika aplikasi Anda menggunakan identitas terkelola yang ditetapkan pengguna, pastikan identitas dikonfigurasi di aplikasi web lalu atur acrUserManagedIdentityID properti untuk menentukan ID kliennya:

    az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv
    

    Ganti <identity-name> identitas terkelola yang ditetapkan pengguna dan gunakan output <client-id> untuk mengonfigurasi ID identitas terkelola yang ditetapkan pengguna.

    az  webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUserManagedIdentityID": "<client-id>"}'
    

Anda sudah siap, dan aplikasi web sekarang menggunakan identitas terkelola untuk menarik dari Azure Container Registry.

Gunakan gambar dari registri yang dilindungi jaringan

Untuk menyambungkan dan menarik dari registri di dalam jaringan virtual atau lokal, aplikasi Anda harus berintegrasi dengan jaringan virtual (VNET). Integrasi VNET juga diperlukan untuk Azure Container Registry dengan titik akhir privat. Saat jaringan dan resolusi DNS Anda dikonfigurasi, Anda mengaktifkan perutean penarikan gambar melalui jaringan virtual dengan mengonfigurasi vnetImagePullEnabled pengaturan situs:

az resource update --resource-group <group-name> --name <app-name> --resource-type "Microsoft.Web/sites" --set properties.vnetImagePullEnabled [true|false]

Saya tidak melihat kontainer yang diperbarui

Jika Anda mengubah pengaturan kontainer Docker untuk mengarahkan ke kontainer baru, mungkin perlu waktu beberapa menit sebelum aplikasi melayani permintaan HTTP dari kontainer baru. Sementara kontainer baru sedang ditarik dan dimulai, App Service terus melayani permintaan dari kontainer lama. Hanya ketika kontainer baru dimulai dan siap untuk menerima permintaan apakah App Service mulai mengirim permintaan ke sana.

Bagaimana gambar kontainer disimpan

Pertama kali Anda menjalankan gambar Docker kustom di App Service, App Service melakukan docker pull dan menarik semua lapisan gambar. Lapisan ini disimpan di disk, seperti jika Anda menggunakan Docker lokal. Setiap kali aplikasi dimulai ulang, App Service melakukan docker pull, tetapi hanya menarik lapisan yang telah berubah. Jika tidak ada perubahan, App Service menggunakan lapisan yang ada pada disk lokal.

Jika aplikasi mengubah instans komputasi karena alasan apa pun, seperti meningkatkan dan menurunkan tingkat harga, App Service harus menurunkan semua lapisan lagi. Hal yang sama berlaku jika Anda meluaskan skala untuk menambahkan lebih banyak instans. Ada juga kasus langka di mana instans aplikasi mungkin berubah tanpa operasi skala.

Mengonfigurasi nomor port

Secara default, App Service mengasumsikan kontainer kustom Anda mendengarkan di port 80. Jika kontainer Anda mendengarkan port lain, atur WEBSITES_PORTsetelan aplikasi di aplikasi App Service Anda. Anda dapat mengaturnya melalui Cloud Shell. Dalam Bash:

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

Di PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}

App Service saat ini memungkinkan kontainer Anda untuk mengekspos hanya satu port untuk permintaan HTTP.

Mengonfigurasi variabel lingkungan

Kontainer kustom Anda mungkin menggunakan variabel lingkungan yang perlu disediakan secara eksternal. Anda dapat meneruskannya melalui Cloud Shell. Dalam Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings DB_HOST="myownserver.mysql.database.azure.com"

Di PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"DB_HOST"="myownserver.mysql.database.azure.com"}

Saat aplikasi Anda berjalan, pengaturan aplikasi App Service disuntikkan ke dalam proses sebagai variabel lingkungan secara otomatis. Anda dapat memverifikasi variabel lingkungan kontainer dengan URL https://<app-name>.scm.azurewebsites.net/Env.

Jika aplikasi Anda menggunakan gambar dari registri privat atau dari Docker Hub, kredensial untuk mengakses repositori disimpan dalam variabel lingkungan:DOCKER_REGISTRY_SERVER_URL, DOCKER_REGISTRY_SERVER_USERNAME dan DOCKER_REGISTRY_SERVER_PASSWORD. Karena risiko keamanan, tidak satu pun dari nama variabel yang dipesan ini terpapar pada aplikasi.

Untuk kontainer berbasis IIS atau .NET Framework (4.0 atau lebih tinggi), kontainer tersebut disuntikkan System.ConfigurationManager sebagai pengaturan aplikasi .NET dan string koneksi secara otomatis oleh App Service. Untuk semua bahasa atau kerangka kerja lainnya, mereka disediakan sebagai variabel lingkungan untuk proses tersebut, dengan salah satu awalan terkait berikut:

  • APPSETTING_
  • SQLCONTR_
  • MYSQLCONTR_
  • SQLAZURECOSTR_
  • POSTGRESQLCONTR_
  • CUSTOMCONNSTR_

Metode ini berfungsi baik untuk aplikasi kontainer tunggal atau aplikasi multi-kontainer, di mana variabel lingkungan ditentukan dalam file docker-compose.yml.

Menggunakan penyimpanan bersama persisten

Anda dapat menggunakan direktori C:\home di sistem berkas penampung ubahsuaian Anda untuk menyimpan berkas saat dimulai ulang dan membagikannya ke seluruh instance. Direktori C:\home disediakan untuk memungkinkan penampung ubahsuaian Anda mengakses penyimpanan persisten.

Saat penyimpanan persisten dinonaktifkan, maka tulis ke C:\homedirektori tidak akan bertahan di seluruh restart aplikasi atau di beberapa instans. Saat penyimpanan persisten diaktifkan, semua tulisan ke C:\homedirektori yang tetap ada dan dapat diakses oleh semua instance aplikasi yang diskalakan. Selain itu, konten apa pun di dalam direktori C:\home penampung akan ditimpa oleh file apa pun yang sudah ada di penyimpanan persisten saat penampung dimulai.

Satu-satunya pengecualian adalah direktori C:\home\LogFiles, yang digunakan untuk menyimpan wadah dan log aplikasi. Folder ini selalu berlanjut setelah aplikasi dimulai ulang jika pengelogan aplikasi diaktifkan dengan opsi Sistem File, secara independen dari penyimpanan persisten yang diaktifkan atau dinonaktifkan. Dengan kata lain, mengaktifkan atau menonaktifkan penyimpanan persisten tidak memengaruhi perilaku pengelogan aplikasi.

Secara default, penyimpanan persisten dinonaktifkan pada kontainer kustom Windows. Untuk mengaktifkannya, setel WEBSITES_ENABLE_APP_SERVICE_STORAGE nilai setelan aplikasi ke true melalui Cloud Shell. Dalam Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=true

Di PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=true}

Anda dapat menggunakan direktori /home di sistem berkas penampung khusus Anda untuk menyimpan berkas saat dimulai ulang dan membagikannya ke seluruh instance. Direktori /home disediakan untuk memungkinkan penampung ubahsuaian Anda mengakses penyimpanan persisten. Menyimpan data dalam /home berkontribusi pada kuota ruang penyimpanan yang disertakan dengan Paket App Service Anda.

Saat penyimpanan persisten dinonaktifkan, maka tulis ke /homedirektori tidak akan bertahan di seluruh restart aplikasi atau di beberapa instans. Saat penyimpanan persisten diaktifkan, semua tulisan ke /homedirektori yang tetap ada dan dapat diakses oleh semua instance aplikasi yang diskalakan. Selain itu, konten apa pun di dalam direktori /home penampung akan ditimpa oleh file apa pun yang sudah ada di penyimpanan persisten saat penampung dimulai.

Satu-satunya pengecualian adalah direktori /home/LogFiles, yang digunakan untuk menyimpan wadah dan log aplikasi. Folder ini selalu berlanjut setelah aplikasi dimulai ulang jika pengelogan aplikasi diaktifkan dengan opsi Sistem File, secara independen dari penyimpanan persisten yang diaktifkan atau dinonaktifkan. Dengan kata lain, mengaktifkan atau menonaktifkan penyimpanan persisten tidak memengaruhi perilaku pengelogan aplikasi.

Disarankan untuk menulis data ke /home atau jalur penyimpanan Azure yang dipasang. Data yang ditulis di luar jalur ini tidak persisten selama mulai ulang dan disimpan ke ruang disk host yang dikelola platform terpisah dari kuota penyimpanan file Paket App Service.

Secara default, penyimpanan persisten diaktifkan pada kontainer kustom Linux. Untuk mengaktifkannya, atur WEBSITES_ENABLE_APP_SERVICE_STORAGE nilai pengaturan aplikasi ke false melalui Cloud Shell. Dalam Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=false

Di PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=false}

Catatan

Anda juga dapat mengonfigurasi penyimpanan persisten Anda sendiri.

Mendeteksi sesi HTTPS

App Service menghentikan TLS/SSL di front end. Itu berarti bahwa permintaan TLS/SSL tidak pernah sampai ke aplikasi Anda. Anda tidak perlu, dan seharusnya tidak mengimplementasikan dukungan apa pun untuk TLS/SSL ke dalam aplikasi Anda.

Front end terletak di dalam pusat data Azure. Jika Anda menggunakan TLS/SSL dengan aplikasi, lalu lintas Anda di internet selalu dienkripsi dengan aman.

Sesuaikan ASP.NET kunci komputer Anda

Selama awal kontainer, kunci yang dihasilkan secara otomatis disuntikkan ke dalam kontainer sebagai kunci komputer untuk ASP.NET kriptografi yang rutin. Anda dapat menemukan kunci ini di kontainer Anda dengan mencari variabel lingkungan berikut: MACHINEKEY_Decryption, MACHINEKEY_DecryptionKey, MACHINEKEY_ValidationKey, MACHINEKEY_Validation.

Kunci baru di setiap mulai ulang mungkin mengatur ulang autentikasi formulir ASP.NET dan melihat status, jika aplikasi Anda bergantung padanya. Untuk mencegah regenerasi otomatis kunci, atur secara manual sebagai pengaturan aplikasi App Service.

Hubungkan ke kontainer

Anda dapat menyambungkan ke kontainer Windows Anda secara langsung untuk tugas diagnostik dengan menavigasi ke https://<app-name>.scm.azurewebsites.net/ dan memilih opsi SSH. Sesi SSH langsung dengan kontainer Anda dibuat di mana Anda dapat menjalankan perintah di dalam kontainer Anda.

  • Ini berfungsi secara terpisah dari browser grafis di atasnya, yang hanya menampilkan file di penyimpanan bersama Anda.
  • Dalam aplikasi peluasan skala, sesi SSH terhubung ke salah satu instans kontainer. Anda dapat memilih instans yang berbeda dari dropdown Instans di menu Kudu atas.
  • Setiap perubahan yang Anda lakukan pada kontainer dari dalam sesi SSH tidak bertahan saat aplikasi Anda dimulai ulang (kecuali untuk perubahan dalam penyimpanan bersama), karena itu bukan bagian dari gambar Docker. Untuk terus mengubah perubahan Anda, seperti pengaturan registri dan instalasi perangkat lunak, jadikan mereka bagian dari Dockerfile.

Mengakses log diagnostik

App Service mencatat tindakan oleh host dan aktivitas Docker dari dalam kontainer. Log dari host Docker (log platform) dikirim secara default, tetapi log aplikasi atau log server web dari dalam kontainer perlu diaktifkan secara manual. Untuk informasi selengkapnya, lihat Mengaktifkan pembuatan log aplikasi dan Mengaktifkan pembuatan log server web.

Ada beberapa cara untuk mengakses log Docker:

Di portal Azure

Log docker ditampilkan di portal, di halaman Pengaturan Kontainer aplikasi Anda. Log dipotong, tetapi Anda dapat mengunduh semua log yang memilih Unduh.

Dari Kudu

Navigasi ke https://<app-name>.scm.azurewebsites.net/DebugConsole dan pilih folder LogFiles untuk melihat file log individual. Untuk mengunduh seluruh direktori LogFiles , pilih ikon "Unduh" di sebelah kiri nama direktori. Anda juga dapat mengakses folder ini menggunakan klien FTP.

Di terminal SSH, Anda tidak dapat mengakses C:\home\LogFiles folder secara default karena penyimpanan bersama persisten tidak diaktifkan. Untuk mengaktifkan perilaku ini di terminal konsol, aktifkan penyimpanan bersama yang persisten.

Jika Anda mencoba mengunduh log Docker yang saat ini sedang digunakan dengan menggunakan klien FTP, Anda mungkin mendapatkan kesalahan karena kunci file.

Dengan Kudu API

Navigasi langsung ke https://<app-name>.scm.azurewebsites.net/api/logs/docker untuk melihat metadata untuk log Docker. Anda mungkin melihat lebih dari satu file log tercantum, dan href properti memungkinkan Anda mengunduh file log secara langsung.

Untuk mengunduh semua log bersama-sama dalam satu file ZIP, akses https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip.

Sesuaikan memori kontainer

Secara default semua Kontainer Windows yang disebarkan di Azure App Service memiliki batas memori yang dikonfigurasi. Tabel berikut mencantumkan pengaturan default per SKU Paket App Service.

SKU Paket App Service Batas memori default per aplikasi dalam MB
P1v3 1024
P1Mv3 1024
P2v3 1536
P2Mv3 1536
P3v3 2048
P3Mv3 2048
P4Mv3 2560
P5Mv3 3072

Anda dapat mengubah nilai ini dengan menyediakan WEBSITE_MEMORY_LIMIT_MB pengaturan aplikasi melalui Cloud Shell. Dalam Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_MEMORY_LIMIT_MB=2000

Di PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_MEMORY_LIMIT_MB"=2000}

Nilai didefinisikan dalam MB dan harus kurang dan sama dengan memori fisik total host. Misalnya, dalam paket Layanan Aplikasi dengan RAM 8 GB, total kumulatif WEBSITE_MEMORY_LIMIT_MB untuk semua aplikasi tidak boleh melebihi 8 GB. Informasi tentang berapa banyak memori yang tersedia untuk setiap tingkat harga dapat ditemukan di harga App Service, di bagian paket layanan Premium v3.

Mengkustomisasi jumlah inti komputasi

Secara default, kontainer Windows berjalan dengan semua inti yang tersedia untuk tingkat harga yang Anda pilih. Anda mungkin ingin mengurangi jumlah inti yang digunakan slot penahapan Anda, misalnya. Untuk mengurangi jumlah core yang digunakan oleh kontainer, atur WEBSITE_CPU_CORES_LIMIT pengaturan aplikasi ke jumlah core yang diinginkan. Anda dapat mengaturnya melalui Cloud Shell. Dalam Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --slot staging --settings WEBSITE_CPU_CORES_LIMIT=1

Di PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_CPU_CORES_LIMIT"=1}

Catatan

Memperbarui pengaturan aplikasi memicu restart otomatis, menyebabkan waktu henti minimal. Untuk aplikasi produksi, pertimbangkan untuk menukarnya menjadi slot pementasan, ubah pengaturan aplikasi di slot penahapan, dan kemudian tukar kembali ke produksi.

Verifikasi nomor yang disesuaikan dengan membuka sesi SSH dari portal atau melalui portal Kudu (https://<app-name>.scm.azurewebsites.net/webssh/host) dan mengetikkan perintah berikut menggunakan PowerShell. Setiap perintah menghasilkan angka.

Get-ComputerInfo | ft CsNumberOfLogicalProcessors # Total number of enabled logical processors. Disabled processors are excluded.
Get-ComputerInfo | ft CsNumberOfProcessors # Number of physical processors.

Prosesor mungkin prosesor multicore atau hyperthreading. Informasi tentang berapa banyak inti yang tersedia untuk setiap tingkat harga dapat ditemukan di harga App Service, di bagian paket layanan Premium v3.

Mengkustomisasi perilaku ping kesehatan

App Service menganggap kontainer berhasil dimulai ketika kontainer dimulai dan merespons ping HTTP. Permintaan ping kesehatan berisi header User-Agent= "App Service Hyper-V Container Availability Check". Jika kontainer dimulai tetapi tidak merespons ping setelah beberapa waktu, App Service mencatat peristiwa di log Docker, yang mengatakan bahwa kontainer tidak dimulai.

Jika aplikasi Anda padat sumber daya, kontainer mungkin tidak merespons ping HTTP tepat waktu. Untuk mengontrol tindakan saat ping HTTP gagal, atur CONTAINER_AVAILABILITY_CHECK_MODE setelan aplikasi. Anda dapat mengaturnya melalui Cloud Shell. Dalam Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings CONTAINER_AVAILABILITY_CHECK_MODE="ReportOnly"

Di PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"CONTAINER_AVAILABILITY_CHECK_MODE"="ReportOnly"}

Tabel berikut ini memperlihatkan nilai yang mungkin terjadi:

Nilai Deskripsi
Perbaikan Mulai ulang kontainer setelah tiga pemeriksaan ketersediaan berturut-turut
ReportOnly Nilai default. Jangan memulai ulang kontainer tetapi laporkan di log Docker untuk kontainer setelah tiga pemeriksaan ketersediaan berturut-turut.
Off Jangan periksa ketersediaannya.

Dukungan untuk Group Managed Service Accounts

Group Managed Service Accounts (gMSAs) saat ini tidak didukung di kontainer Windows di App Service.

Aktifkan SSH

Secure Shell (SSH) biasanya digunakan untuk menjalankan perintah administratif dari jarak jauh dari terminal baris perintah. Untuk mengaktifkan fitur konsol SSH portal Azure dengan kontainer kustom, langkah-langkah berikut diperlukan:

  1. Buat file standar sshd_config dengan contoh konten berikut dan letakkan di direktori akar proyek aplikasi:

    Port 			2222
    ListenAddress 		0.0.0.0
    LoginGraceTime 		180
    X11Forwarding 		yes
    Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
    MACs hmac-sha1,hmac-sha1-96
    StrictModes 		yes
    SyslogFacility 		DAEMON
    PasswordAuthentication 	yes
    PermitEmptyPasswords 	no
    PermitRootLogin 	yes
    Subsystem sftp internal-sftp
    

    Catatan

    File ini mengonfigurasi OpenSSH dan harus menyertakan item berikut untuk mematuhi fitur SSH portal Azure:

    • Port harus diatur ke 2222.
    • Ciphers harus menyertakan setidaknya satu item dalam daftar ini: aes128-cbc,3des-cbc,aes256-cbc.
    • MACs harus menyertakan setidaknya satu item dalam daftar ini: hmac-sha1,hmac-sha1-96.
  2. Buat skrip titik masuk dengan nama entrypoint.sh (atau ubah file titik masuk yang ada) dan tambahkan perintah untuk memulai layanan SSH, bersama dengan perintah startup aplikasi. Contoh berikut menunjukkan memulai aplikasi Python. Ganti perintah terakhir sesuai dengan bahasa/tumpukan proyek:

    #!/bin/sh
    set -e
    service ssh start
    exec gunicorn -w 4 -b 0.0.0.0:8000 app:app
    
  3. Tambahkan ke Dockerfile instruksi berikut sesuai dengan distribusi gambar dasar. Instruksi ini menyalin file baru, menginstal server OpenSSH, mengatur izin yang tepat dan mengonfigurasi titik masuk kustom, dan mengekspos port yang diperlukan oleh aplikasi dan server SSH, masing-masing:

    COPY entrypoint.sh ./
    
    # Start and enable SSH
    RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get install -y --no-install-recommends openssh-server \
        && echo "root:Docker!" | chpasswd \
        && chmod u+x ./entrypoint.sh
    COPY sshd_config /etc/ssh/
    
    EXPOSE 8000 2222
    
    ENTRYPOINT [ "./entrypoint.sh" ] 
    

    Catatan

    Kata sandi akar harus persis Docker! seperti yang digunakan oleh App Service untuk memungkinkan Anda mengakses sesi SSH dengan kontainer. Konfigurasi ini tidak mengizinkan koneksi eksternal ke kontainer. Port 2222 kontainer hanya dapat diakses dalam jaringan jembatan jaringan virtual privat dan tidak dapat diakses oleh penyerang di internet.

  4. Bangun ulang dan dorong gambar Docker ke registri, lalu uji fitur SSH Aplikasi Web pada portal Azure.

Informasi pemecahan masalah lebih lanjut tersedia di blog Azure App Service: Mengaktifkan SSH di Aplikasi Web Linux untuk Kontainer

Mengakses log diagnostik

Anda dapat mengakses log konsol yang dihasilkan dari dalam kontainer.

Pertama, aktifkan pengelogan kontainer dengan menjalankan perintah berikut:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Ganti <app-name> dan <resource-group-name> dengan nama yang sesuai untuk aplikasi web Anda.

Setelah pengelogan kontainer diaktifkan, jalankan perintah berikut untuk melihat aliran log:

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

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

Untuk menghentikan streaming log kapan saja, tekan Ctrl+C.

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

Mengonfigurasi aplikasi multi-kontainer

Menggunakan penyimpanan persisten di Docker Compose

Aplikasi multi-kontainer seperti WordPress membutuhkan penyimpanan persisten untuk berfungsi dengan baik. Untuk mengaktifkannya, konfigurasi Docker Compose Anda harus menunjuk ke lokasi penyimpanan di luar kontainer Anda. Lokasi penyimpanan di dalam kontainer Anda tidak terus berubah di luar restart aplikasi.

Aktifkan penyimpanan persisten dengan mengatur WEBSITES_ENABLE_APP_SERVICE_STORAGEpengaturan aplikasi, menggunakan perintah set appsettings konfigurasi webapp az di Cloud Shell.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

Dalam file docker-compose.yml Anda, petakan volumes opsi ke ${WEBAPP_STORAGE_HOME}.

WEBAPP_STORAGE_HOME adalah variabel lingkungan di App Service yang dipetakan ke penyimpanan persisten untuk aplikasi Anda. Contohnya:

wordpress:
  image: <image name:tag>
  volumes:
  - "${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html"
  - "${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin"
  - "${WEBAPP_STORAGE_HOME}/LogFiles:/var/log"

Batasan pratinjau

Perintah kontainer saat ini dalam pratinjau. Fitur platform App Service berikut ini tidak didukung:

  • Autentikasi/Otorisasi
  • Identitas Terkelola
  • CORS
  • Integrasi jaringan virtual tidak didukung untuk skenario Docker Compose
  • Docker Compose di Azure App Services saat ini memiliki batas 4.000 karakter saat ini.

Opsi Docker Compose

Daftar berikut ini memperlihatkan opsi konfigurasi Docker Compose yang didukung dan tidak didukung:

Opsi yang didukung

Opsi yang tidak didukung

  • build (tidak diperbolehkan)
  • depends_on (diabaikan)
  • jaringan (diabaikan)
  • rahasia (diabaikan)
  • port selain 80 dan 8080 (diabaikan)
  • variabel lingkungan default seperti $variable and ${variable} tidak seperti di docker

Batasan Sintaks

  • "versi x.x" harus selalu menjadi pernyataan yaml pertama dalam file
  • bagian port harus menggunakan nomor yang dikuotasi
  • bagian volume gambar > harus dikutip dan tidak dapat memiliki definisi izin
  • bagian volume tidak boleh memiliki kurung kurawal kosong setelah nama volume

Catatan

Opsi lain yang tidak secara eksplisit disebut diabaikan di Pratinjau Umum.

robot933456 dalam log

Anda mungkin melihat pesan berikut dalam log kontainer:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Anda dapat mengabaikan pesan ini dengan aman. /robots933456.txt adalah jalur URL dummy yang digunakan App Service untuk memeriksa apakah kontainer mampu melayani permintaan. Respons 404 hanya menunjukkan bahwa jalur tersebut tidak ada, tetapi ini memberi tahu App Service bahwa kontainernya sehat dan siap untuk menanggapi permintaan.

Langkah berikutnya

Atau, lihat sumber daya lainnya: