Membangun dan menjalankan aplikasi web Python dalam kontainer secara lokal dengan MongoDB
Artikel
Artikel ini adalah bagian dari tutorial tentang cara membuat kontainer dan menyebarkan aplikasi web Python dalam kontainer ke Azure App Service. App Service memungkinkan Anda menjalankan aplikasi web kontainer dan menyebarkan melalui kemampuan integrasi berkelanjutan/penyebaran berkelanjutan (CI/CD) dengan Docker Hub, Azure Container Registry, dan Visual Studio Team Services. Di bagian tutorial ini, Anda mempelajari cara membangun dan menjalankan aplikasi web Python dalam kontainer secara lokal. Langkah ini bersifat opsional dan tidak diperlukan untuk menyebarkan aplikasi sampel ke Azure.
Menjalankan gambar Docker secara lokal di lingkungan pengembangan Anda memerlukan penyiapan di luar penyebaran ke Azure. Anggap saja sebagai investasi yang dapat membuat siklus pengembangan di masa depan lebih mudah, terutama ketika Anda bergerak melampaui aplikasi sampel dan Anda mulai membuat aplikasi web Anda sendiri. Untuk menyebarkan aplikasi sampel untuk Django dan Flask, Anda dapat melewati langkah ini dan pergi ke langkah berikutnya dalam tutorial ini. Anda selalu dapat kembali setelah menyebarkan ke Azure dan bekerja melalui langkah-langkah ini.
Diagram layanan berikut menyoroti komponen yang tercakup dalam artikel ini.
Buka kemasan file ZIP ke dalam folder lalu buka jendela terminal di folder tersebut.
2. Buat gambar Docker
Jika Anda menggunakan salah satu aplikasi sampel kerangka kerja yang tersedia untuk Django dan Flask, Anda diatur untuk pergi. Jika Anda bekerja dengan aplikasi sampel Anda sendiri, lihat untuk melihat bagaimana aplikasi sampel disiapkan, khususnya Dockerfile di direktori akar.
Instruksi ini memerlukan Visual Studio Code dan ekstensi Docker. Buka folder sampel yang Anda kloning atau unduh dan buka Visual Studio Code dengan perintah code ..
Catatan
Langkah-langkah di bagian ini mengharuskan daemon Docker berjalan. Dalam beberapa instalasi, misalnya di Windows, Anda perlu membuka Docker Desktop, yang memulai daemon, sebelum melanjutkan.
Petunjuk
Cuplikan layar
Buka ekstensi Docker.
Jika ekstensi Docker melaporkan kesalahan "Gagal tersambung", pastikan Docker diinstal dan berjalan. Jika ini pertama kalinya Anda bekerja dengan Docker, Anda mungkin tidak akan memiliki kontainer, gambar, atau registri yang terhubung.
Buat gambar.
Di penjelajah proyek memperlihatkan file proyek, klik kanan Dockerfile dan pilih Bangun Gambar....
Secara bergantian, Anda dapat menggunakan Palet Perintah (F1 atau Ctrl+Shift+P) dan mengetik "Gambar Docker: Gambar Build" untuk memanggil perintah.
Untuk informasi selengkapnya tentang sintaks Dockerfile, lihat referensi Dockerfile.
Konfirmasikan bahwa gambar telah dibuat.
Buka bagian IMAGES dari ekstensi Docker.
Cari gambar yang baru-baru ini dibuat. Nama gambar kontainer adalah "msdocspythoncontainerwebapp", yang diatur dalam file .vscode/tasks.json .
Langkah-langkah di bagian ini mengharuskan daemon Docker berjalan. Dalam beberapa instalasi, misalnya di Windows, Anda perlu membuka Docker Desktop, yang memulai daemon, sebelum melanjutkan.
Mulai di akar aplikasi sampel yang Anda kloning atau unduh.
Langkah 1. Pada perintah shell, konfirmasikan bahwa Docker dapat diakses.
docker
Jika setelah menjalankan perintah ini, Anda akan melihat bantuan untuk Docker CLI, lalu lanjutkan. Jika tidak, pastikan Docker diinstal atau shell Anda memiliki akses ke Docker CLI.
Langkah 2. Buat gambar.
Bentuk umum perintah build docker adalah docker build --rm --pull --file "<path-to-project-root>/Dockerfile" --label "com.microsoft.created-by=docker-cli" --tag "<container-name>:latest" "<path-to-project-root>".
Misalnya, jika Anda berada di akar direktori proyek, Anda dapat menggunakan perintah seperti ini untuk membangun gambar:
Perhatikan titik (".") di akhir perintah yang mengacu pada saat ini langsung di mana perintah berjalan. Anda dapat menambahkan --no-cache untuk memaksa pembangunan kembali.
Langkah 3. Konfirmasikan bahwa gambar telah dibuat.
Anda akan melihat gambar yang tercantum oleh nama REPOSITORI, TAG, dan tanggal DIBUAT di antara karakteristik gambar lainnya.
Pada titik ini, Anda telah membangun gambar secara lokal. Gambar yang Anda buat memiliki nama "msdocspythoncontainerwebapp" dan tag "latest". Tag adalah cara untuk menentukan informasi versi, penggunaan yang dimaksudkan, stabilitas, atau informasi lainnya. Untuk informasi selengkapnya, lihat Rekomendasi untuk memberi tag dan membuat versi citra kontainer.
Gambar yang dibangun dari VISUAL Code atau dari menggunakan Docker CLI secara langsung juga dapat dilihat dengan aplikasi Docker Desktop .
3. Menyiapkan MongoDB
Untuk tutorial ini, Anda memerlukan database MongoDB bernama restaurants_reviews dan koleksi bernama restaurants_reviews. Langkah-langkah di bagian ini menunjukkan kepada Anda cara menggunakan penginstalan lokal MongoDB atau Azure Cosmos DB untuk MongoDB untuk membuat dan mengakses database dan koleksi.
Penting
Jangan gunakan database MongoDB yang akan Anda gunakan dalam produksi. Dalam tutorial ini, Anda akan menyimpan string koneksi MongoDB dalam variabel lingkungan. Ini membuatnya dapat diamati oleh siapa pun yang mampu memeriksa kontainer Anda (misalnya, menggunakan docker inspect).
Alternatif dalam beberapa instalasi adalah langsung memanggil daemon Mongo.
mongod --version
Langkah 2: Edit file mongod.cfg untuk menambahkan alamat IP komputer Anda.
File konfigurasi mongod memiliki bindIp kunci yang menentukan nama host dan alamat IP yang didengarkan MongoDB untuk koneksi klien. Tambahkan IP komputer pengembangan lokal Anda saat ini. Aplikasi sampel yang berjalan secara lokal dalam kontainer Docker akan berkomunikasi ke komputer host dengan alamat ini.
Misalnya, bagian dari file konfigurasi akan terlihat seperti ini:
Mulai ulang MongoDB untuk mengambil perubahan pada file konfigurasi.
Langkah 3: Buat database dan koleksi di database MongoDB lokal.
Atur nama database ke "restaurants_reviews" dan nama koleksi ke "restaurants_reviews". Anda dapat membuat database dan koleksi dengan ekstensi VS Code MongoDB, MongoDB Shell (mongosh), atau alat sadar MondoDB lainnya.
Untuk shell MongoDB, berikut adalah contoh perintah untuk membuat database dan koleksi:
> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit
Pada titik ini, string koneksi MongoDB lokal Anda adalah "mongodb://127.0.0.1:27017/", nama database adalah "restaurants_reviews", dan nama koleksinya adalah "restaurants_reviews".
Anda dapat menggunakan perintah Azure CLI untuk membuat akun Azure Cosmos DB for MongoDB lalu membuat database dan koleksi yang diperlukan untuk tutorial ini. Jika Anda belum menggunakan Azure CLI sebelumnya, lihat Mulai menggunakan Azure CLI untuk mempelajari cara mengunduh dan menginstal Azure CLI secara lokal atau cara menjalankan perintah Azure CLI di Azure Cloud Shell.
Sebelum menjalankan skrip berikut, ganti lokasi dan Azure Cosmos DB untuk nama akun MongoDB dengan nilai yang sesuai. Anda dapat menggunakan nama grup sumber daya yang ditentukan dalam skrip atau mengubahnya. Bagaimanapun, sebaiknya gunakan grup sumber daya yang sama untuk semua sumber daya Azure yang dibuat dalam berbagai artikel tutorial ini. Ini membuatnya lebih mudah dihapus ketika Anda selesai dengan tutorial. Jika Anda telah tiba di sini dari bagian 4. Sebarkan App Service kontainer, gunakan nama dan lokasi grup sumber daya yang telah Anda gunakan untuk sumber daya Anda.
Skrip mengasumsikan bahwa Anda menggunakan shell Bash. Jika Anda ingin menggunakan shell yang berbeda, Anda harus mengubah sintaks deklarasi variabel dan penggantian. Skrip mungkin perlu waktu beberapa menit untuk dijalankan.
#!/bin/bash
# LOCATION: The Azure region. Use the "az account list-locations -o table" command to find a region near you.
# RESOURCE_GROUP_NAME: The resource group name. Can contain underscores, hyphens, periods, parenthesis, letters, and numbers.
# ACCOUNT_NAME: The Azure Cosmos DB for MongDB account name. Can contain lowercase letters, hyphens, and numbers.
LOCATION='eastus'
RESOURCE_GROUP_NAME='msdocs-web-app-rg'
ACCOUNT_NAME='<cosmos-db-account-name>'
# Create a resource group
echo "Creating resource group $RESOURCE_GROUP_NAME in $LOCATION..."
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
# Create a Cosmos account for MongoDB API
echo "Creating $ACCOUNT_NAME. This command may take a while to complete."
az cosmosdb create --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --kind MongoDB
# Create a MongoDB API database
echo "Creating database restaurants_reviews"
az cosmosdb mongodb database create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --name restaurants_reviews
# Create a MongoDB API collection
echo "Creating collection restaraunts_reviews"
az cosmosdb mongodb collection create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --database-name restaurants_reviews --name restaurants_reviews
# Get the connection string for the MongoDB database
echo "Get the connection string for the MongoDB account"
az cosmosdb keys list --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --type connection-strings
echo "Copy the Primary MongoDB Connection String from the list above"
Saat skrip selesai, salin String Koneksi ion MongoDB Utama dari output perintah terakhir.
Pada titik ini, Anda harus memiliki Azure Cosmos DB untuk MongoDB string koneksi formulir mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, database bernama restaurants_reviews, dan koleksi bernama restaurants_reviews.
Di ekstensi Azure Database Visual Studio Code, Anda dapat mengklik kanan server MongoDB dan mendapatkan string koneksi.
4. Jalankan gambar secara lokal dalam kontainer
Dengan informasi tentang cara menyambungkan ke MongoDB, Anda siap untuk menjalankan kontainer secara lokal. Aplikasi sampel mengharapkan informasi koneksi MongoDB diteruskan dalam variabel lingkungan. Ada beberapa cara untuk mendapatkan variabel lingkungan yang diteruskan ke kontainer secara lokal. Masing-masing memiliki kelebihan dan kekurangan dalam hal keamanan. Anda harus menghindari pemeriksaan informasi sensitif apa pun atau meninggalkan informasi sensitif dalam kode dalam kontainer.
Catatan
Saat disebarkan ke Azure, aplikasi web akan mendapatkan info koneksi dari nilai lingkungan yang ditetapkan sebagai pengaturan konfigurasi App Service dan tidak ada modifikasi untuk skenario lingkungan pengembangan lokal yang berlaku.
Di folder .vscode aplikasi sampel, file settings.json menentukan apa yang terjadi saat Anda menggunakan ekstensi Docker dan memilih Jalankan atau Jalankan Interaktif dari menu konteks Tag. File settings.json berisi dua templat masing-masing untuk (MongoDB local) skenario dan (MongoDB Azure) .
Jika Anda menggunakan database MongoDB lokal:
Ganti kedua instans <YOUR_IP_ADDRESS> dengan alamat IP Anda.
Ganti kedua instans <CONNECTION_STRING> dengan string koneksi untuk database MongoDB Anda.
Jika Anda menggunakan database Azure Cosmos DB untuk MongoDB:
Ganti kedua instans <CONNECTION_STRING> dengan String koneksi Azure Cosmos DB for MongoDB.
Atur pengaturan konfigurasi yang docker.dockerPath digunakan oleh templat. Untuk mengatur docker.dockerPath, buka Palet Perintah Visual Studio Code (Ctrl+Shift+P), masukkan "Preferensi: Buka Ruang Kerja Pengaturan", lalu masukkan "docker.dockerPath" di kotak Pengaturan pencarian. Masukkan "docker" (tanpa tanda kutip) untuk nilai pengaturan.
Catatan
Nama database dan nama koleksi diasumsikan sebagai restaurants_reviews.
Jalankan gambar.
Di bagian IMAGES dari ekstensi Docker, temukan gambar bawaan.
Perluas gambar untuk menemukan tag terbaru , klik kanan dan pilih Jalankan Interaktif.
Anda akan diminta untuk memilih tugas yang sesuai untuk skenario Anda, baik "Konfigurasi eksekusi interaktif (lokal MongoDB)" atau "Konfigurasi eksekusi interaktif (MongoDB Azure)".
Dengan eksekusi interaktif, Anda akan melihat pernyataan cetak dalam kode, yang dapat berguna untuk penelusuran kesalahan. Anda juga dapat memilih Jalankan yang tidak interaktif dan tidak membuka input standar.
Penting
Langkah ini gagal jika profil terminal default diatur ke (Windows) Command Prompt. Untuk mengubah profil default, buka Palet Perintah Visual Studio Code (Ctrl+Shift+P), masukkan "Terminal: Pilih Profil Default", lalu pilih profil yang berbeda dari menu dropdown; misalnya Git Bash atau PowerShell.
Konfirmasikan bahwa kontainer sedang berjalan.
Di bagian KONTAINER ekstensi Docker, temukan kontainer.
Perluas node Kontainer Individu dan konfirmasikan bahwa "msdocspythoncontainerwebapp" sedang berjalan. Anda akan melihat simbol segitiga hijau di samping nama kontainer jika sedang berjalan.
Uji aplikasi web dengan mengklik kanan nama kontainer dan memilih Buka di Browser.
Browser akan terbuka ke browser default Anda sebagai "http://127.0.0.1:8000" untuk Django atau "http://127.0.0.1:5000/" untuk Flask.
Hentikan kontainer.
Di bagian KONTAINER ekstensi Docker, temukan kontainer yang sedang berjalan.
Klik kanan kontainer dan pilih Hentikan.
Tip
Anda juga dapat menjalankan kontainer yang memilih konfigurasi eksekusi atau debug. Tugas ekstensi Docker di tasks.json dipanggil saat Anda menjalankan atau men-debug. Tugas yang disebut tergantung pada konfigurasi peluncuran apa yang Anda pilih. Untuk tugas "Docker: Python (MongoDB local)", tentukan <YOUR-IP-ADDRESS>. Untuk tugas "Docker: Python (MongoDB Azure)", tentukan <CONNECTION-STRING>.
# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>
export YOUR_IP_ADDRESS=<your-machine-ip-address>
docker run --rm -it \
--publish $PORT:$PORT --publish 27017:27017 \
--add-host mongoservice:$YOUR_IP_ADDRESS \
--env CONNECTION_STRING=mongodb://mongoservice:27017 --env DB_NAME=restaurants_reviews --env COLLECTION_NAME=restaurants_reviews \
msdocspythoncontainerwebapp:latest
Perintah di atas diformat untuk shell Bash. Jika Anda menggunakan PowerShell, Prompt Perintah, atau shell lain, Anda mungkin perlu menyesuaikan kelanjutan baris dan format variabel lingkungan yang sesuai.
# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>
export CONNECTION_STRING="<connection-string>"
docker run --rm -it \
--publish $PORT:$PORT/tcp \
--env CONNECTION_STRING=$CONNECTION_STRING --env DB_NAME=restaurants_reviews --env COLLECTION_NAME=restaurants_reviews \
msdocspythoncontainerwebapp:latest
Perintah di atas diformat untuk shell Bash. Jika Anda menggunakan PowerShell, Prompt Perintah, atau shell lain, Anda mungkin perlu menyesuaikan kelanjutan baris dan format variabel lingkungan yang sesuai.
Meneruskan informasi sensitif seperti yang ditunjukkan di sini adalah untuk tujuan demonstrasi. Informasi string koneksi dapat dilihat dengan memeriksa kontainer dengan pemeriksaan kontainer docker perintah. Cara lain untuk menangani rahasia adalah dengan menggunakan fungsionalitas BuildKit Docker.
Langkah 2. Konfirmasikan bahwa kontainer sedang berjalan.
Anda akan melihat kontainer Anda "msdocspythoncontainerwebapp:latest:latest" dalam daftar. NAMES Perhatikan kolom output dan PORTS kolom . Anda dapat menggunakan nama untuk menghentikan kontainer.
Langkah 3. Uji aplikasi web.
Buka "http://127.0.0.1:8000" untuk Django dan "http://127.0.0.1:5000/" untuk Flask saat berjalan dengan MongoDB lokal.
Langkah 4. Mematikan kontainer
docker container stop <container-name>
Anda juga dapat memulai kontainer dari gambar dan menghentikannya dengan aplikasi Docker Desktop .
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat: https://aka.ms/ContentUserFeedback.