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. Jika Anda belum pernah menggunakan Azure App Service, ikuti mulai cepat kontainer kustom dan tutorial terlebih dahulu.
Panduan ini menyediakan konsep dan instruksi utama untuk kontainerisasi aplikasi Linux di App Service. Jika Anda belum pernah menggunakan Azure App Service, ikuti mulai cepat kontainer kustom dan tutorial terlebih dahulu. Ada juga mulai cepat aplikasi multi-kontainer dan tutorial.
Gambar induk yang didukung
Untuk citra Windows kustom, Anda harus memilih gambar induk (gambar dasar) yang tepat untuk kerangka kerja yang Anda inginkan:
- Untuk menggunakan aplikasi .NET Framework, gunakan gambar induk berdasarkan rilis Windows Server 2019 Core Long-Term Servicing Channel (LTSC).
- Untuk menyebarkan aplikasi .NET Core, gunakan gambar induk berdasarkan rilis Windows Server 2019 Nano Semi-Annual Servicing Channel (SAC).
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:
- mcr.microsoft.com/windows/servercore:20H2
- mcr.microsoft.com/windows/servercore:ltsc2019
- mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-20H2
- mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
- mcr.microsoft.com/dotnet/runtime:5.0-nanoserver-20H2
- mcr.microsoft.com/dotnet/runtime:5.0-nanoserver-1809
- mcr.microsoft.com/dotnet/aspnet:5.0-nanoserver-20H2
- mcr.microsoft.com/dotnet/aspnet:5.0-nanoserver-1809
- mcr.microsoft.com/dotnet/runtime:3.1-nanoserver-20H2
- mcr.microsoft.com/dotnet/runtime:3.1-nanoserver-1809
- mcr.microsoft.com/dotnet/aspnet:3.1-nanoserver-20H2
- mcr.microsoft.com/dotnet/aspnet:3.1-nanoserver-1809
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 <sandi>, berikan kredensial masuk untuk akun registri pribadi Anda.
Gunakan identitas terkelola untuk menarik gambar dari Azure Container Registry
Gunakan langkah-langkah berikut untuk mengonfigurasi aplikasi web Anda agar menarik dari ACR menggunakan identitas terkelola. Langkah-langkahnya akan menggunakan identitas terkelola yang ditetapkan sistem, tetapi Anda juga dapat menggunakan identitas terkelola yang ditetapkan pengguna.
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 tsvGanti
<app-name>dengan hash yang Anda gunakan di langkah sebelumnya. Output dari perintah (difilter oleh argumen --query dan --output) adalah ID utama layanan dari identitas yang ditetapkan, yang akan segera Anda gunakan.Dapatkan ID sumber daya dari Azure Container Registry Anda:
az acr show --resource-group <group-name> --name <registry-name> --query id --output tsvGanti
<registry-name>dengan nama registri Anda. Output dari perintah (difilter oleh argumen --kueri dan --output) adalah ID sumber daya dari Azure Container Registry.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 perintahaz webapp identity assign<registry-resource-id>dengan ID registri penampung Anda dari perintahaz acr show
Untuk informasi selengkapnya tentang izin ini, lihat Apa itu kontrol akses berbasis peran Azure.
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 argumen
--generic-configurationsdi langkah ini dan berikutnya. Misalnya:--generic-configurations '{\"acrUseManagedIdentityCreds\": true'(Opsional) Jika aplikasi Anda menggunakan identitas terkelola yang ditetapkan pengguna, pastikan ini dikonfigurasi di aplikasi web, lalu setel properti
acrUserManagedIdentityIDtambahan untuk menentukan ID kliennya:az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsvGanti
<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 akan menggunakan identitas terkelola untuk menarik dari Azure Container Registry.
Gunakan gambar dari registri yang dilindungi jaringan
Untuk menghubungkan dan menarik dari registri di dalam jaringan virtual atau lokal, aplikasi Anda harus terhubung ke jaringan virtual menggunakan fitur integrasi VNet. Hal ini juga diperlukan untuk Azure Container Registry dengan titik akhir privat. Saat jaringan dan resolusi DNS Anda dikonfigurasi, Anda mengaktifkan perutean gambar melalui VNet dengan menetapkan Pengaturan Aplikasi WEBSITE_PULL_IMAGE_OVER_VNET=true:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_PULL_IMAGE_OVER_VNET=true
Saya tidak melihat kontainer yang diperbarui
Jika Anda mengubah pengaturan kontainer Docker untuk mengarahkan ke kontainer baru, mungkin perlu 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 menskalakan untuk menambahkan instans tambahan. Ada juga kasus langka di mana instans aplikasi dapat berubah tanpa operasi skala.
Mengonfigurasi nomor port
Secara default, App Service mengasumsikan container kustom Anda mendengarkan pada port 80 atau port 8080. 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 dapat 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 penulisan ke direktori C:\home tidak akan dipertahankan saat aplikasi dimulai ulang atau di beberapa kejadian. 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 akan selalu ada setelah aplikasi dimulai ulang jika pencatatan log aplikasi diaktifkan dengan opsi Sistem File, terlepas dari penyimpanan persisten yang diaktifkan atau dinonaktifkan. Dengan kata lain, mengaktifkan atau menonaktifkan penyimpanan persisten tidak akan memengaruhi perilaku pencatatan aplikasi.
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 akan berkontribusi pada kuota ruang penyimpanan yang disertakan dengan Paket App Service Anda.
Saat penyimpanan persisten dinonaktifkan, maka penulisan ke direktori /home tidak akan dipertahankan saat aplikasi dimulai ulang atau di beberapa kejadian. 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 akan selalu ada setelah aplikasi dimulai ulang jika pencatatan log aplikasi diaktifkan dengan opsi Sistem File, terlepas dari penyimpanan persisten yang diaktifkan atau dinonaktifkan. Dengan kata lain, mengaktifkan atau menonaktifkan penyimpanan persisten tidak akan memengaruhi perilaku pencatatan aplikasi.
Disarankan untuk menulis data ke /home atau jalur penyimpanan Azure yang terpasang. Data yang ditulis di luar jalur ini tidak akan presisten selama menghidupkan ulang dan akan disimpan ke ruang disk host yang dikelola platform yang terpisah dari kuota penyimpanan file Paket App Service.
Secara default, penyimpanan persisten dinonaktifkan pada wadah khusus dan pengaturannya ditampilkan di pengaturan aplikasi. 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}
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 akan 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 restart dapat mengatur ulang autentikasi bentuk ASP.NET dan melihat status, jika aplikasi Anda bergantung padanya. Untuk mencegah regenerasi otomatis kunci, atur secara manual sebagai pengaturan aplikasi App Service.
Menyambungkan ke kontainer
Anda bisa tersambung ke kontainer Windows Anda secara langsung untuk tugas diagnostik dengan menavigasi ke https://<app-name>.scm.azurewebsites.net/DebugConsole. Berikut cara kerjanya:
- Konsol debug memungkinkan Anda menjalankan perintah interaktif, seperti memulai sesi PowerShell, memeriksa kunci registri, dan menavigasi seluruh sistem file kontainer.
- Ini berfungsi secara terpisah dari browser grafis di atasnya, yang hanya menampilkan file di penyimpanan bersama Anda.
- Dalam aplikasi yang ditingkatkan, konsol debug terhubung ke salah satu instans kontainer. Anda dapat memilih instans yang berbeda dari menu tarik-turun Instans di menu atas.
- Setiap perubahan yang Anda lakukan pada kontainer dari dalam konsol tidak bertahan saat aplikasi dimulai ulang (kecuali untuk perubahan 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 Docker serta aktivitas 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 Microsoft Azure
Log docker ditampilkan di portal, di halaman Pengaturan Kontainer aplikasi Anda. Log dipotong, tetapi Anda dapat mengunduh semua log yang mengeklik Unduh.
Dari konsol Kudu
Navigasi ke https://<app-name>.scm.azurewebsites.net/DebugConsole dan klik folder LogFiles untuk melihat file log individual. Untuk mengunduh seluruh direktori LogFiles, klik ikon Unduh di sebelah kiri nama direktori. Anda juga dapat mengakses folder ini menggunakan klien FTP.
Di terminal konsol, 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 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 diterapkan di Azure App Service dibatasi hingga RAM 1 GB. 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 pementasan 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 Kudu Console (https://<app-name>.scm.azurewebsites.net) dan ketik 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 multicore atau prosesor 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 tertentu, App Service mencatat peristiwa di log Docker, 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. |
| Nonaktif | 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
SSH mengaktifkan komunikasi yang aman antara kontainer dan klien. Agar kontainer kustom dapat mendukung SSH, Anda harus menambahkannya ke dalam gambar Docker Anda sendiri.
Tip
Semua kontainer Linux bawaan di App Service telah menambahkan instruksi SSH dalam repositori gambar mereka. Anda dapat melalui instruksi berikut dengan repositori Node.js 10.14 untuk melihat bagaimana hal itu diaktifkan di sana. Konfigurasi dalam gambar Node.js bawaan sedikit berbeda, tetapi pada prinsipnya sama.
Tambahkan file sshd_config ke repositori Anda, seperti contoh berikut.
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-sftpCatatan
Berkas ini mengonfigurasi OpenSSH dan harus menyertakan unsur berikut:
Portharus diatur ke 2222.Ciphersharus menyertakan setidaknya satu item dalam daftar ini:aes128-cbc,3des-cbc,aes256-cbc.MACsharus menyertakan setidaknya satu item dalam daftar ini:hmac-sha1,hmac-sha1-96.
Tambahkan file skrip ssh_setup untuk membuat tombol SSH menggunakan ssh-keygen ke repositori Anda.
#!/bin/sh ssh-keygen -A #prepare run dir if [ ! -d "/var/run/sshd" ]; then mkdir -p /var/run/sshd fiDi Dockerfile Anda, tambahkan perintah berikut:
# Install OpenSSH and set the password for root to "Docker!". In this example, "apk add" is the install instruction for an Alpine Linux-based image. RUN apk add openssh \ && echo "root:Docker!" | chpasswd # Copy the sshd_config file to the /etc/ssh/ directory COPY sshd_config /etc/ssh/ # Copy and configure the ssh_setup file RUN mkdir -p /tmp COPY ssh_setup.sh /tmp RUN chmod +x /tmp/ssh_setup.sh \ && (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null) # Open port 2222 for SSH access EXPOSE 80 2222Catatan
Kata sandi akar harus persis
Docker!seperti yang digunakan oleh Azure 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.Di skrip start-up untuk kontainer Anda, mulai server SSH.
/usr/sbin/sshd
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 VNET 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
- perintah
- entrypoint
- lingkungan
- gambar
- port
- hidupkan ulang
- layanan
- volumes
Opsi yang tidak didukung
- build (tidak diperbolehkan)
- depends_on (diabaikan)
- jaringan (diabaikan)
- rahasia (diabaikan)
- port selain 80 dan 8080 (diabaikan)
Batasan Sintaks
- "versi x.x" selalu harus menjadi pernyataan yaml pertama dalam file
- bagian port harus menggunakan nomor yang dikutip
- bagian > volume gambar harus dikutip dan tidak boleh 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 tambahan: