Latihan - Mengkustomisasi citra Docker untuk menjalankan aplikasi web Anda sendiri
Dockerfile berisi langkah-langkah untuk membuat citra Docker kustom.
Anda memutuskan untuk menggunakan salah satu aplikasi web organisasi menggunakan Docker. Anda memilih aplikasi web sederhana yang menerapkan API web untuk situs web reservasi hotel. API web mengekspos operasi POST dan GET HTTP yang membuat dan mengambil pesanan pelanggan.
Catatan
Dalam versi aplikasi web ini, pemesanan tidak benar-benar bertahan, dan kueri mengembalikan data dummy.
Dalam latihan ini, Anda akan membuat Dockerfile untuk aplikasi yang tidak memilikinya. Kemudian, Anda akan membangun citra dan menjalankannya secara lokal.
Membuat Dockerfile untuk aplikasi web
Jika belum berjalan, mulai Docker di komputer Anda.
Di jendela prompt perintah pada komputer lokal Anda, jalankan perintah berikut untuk mengunduh kode sumber untuk aplikasi web.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
Masukkan perintah berikut untuk membuka direktori
src
.cd mslearn-hotel-reservation-system/src
src
Di direktori, masukkan perintah berikut untuk membuat file baru bernamaDockerfile
dan buka di Notepad:copy NUL Dockerfile notepad Dockerfile
Catatan
Secara default, perintah notepad membuka file teks. Pastikan Anda menyimpannya sebagai jenis file All Files tanpa ekstensi file. Untuk memverifikasi, buka folder src di File Explorer, pilih Tampilan > Tampilkan> Ekstensi nama file. Jika perlu, ganti nama file dan hapus
.txt
dari nama file.Tambahkan kode berikut ke Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 WORKDIR /src COPY ["/HotelReservationSystem/HotelReservationSystem.csproj", "HotelReservationSystem/"] COPY ["/HotelReservationSystemTypes/HotelReservationSystemTypes.csproj", "HotelReservationSystemTypes/"] RUN dotnet restore "HotelReservationSystem/HotelReservationSystem.csproj"
Kode ini telah memerintahkan untuk mengambil gambar yang berisi .NET Core Framework SDK. File proyek untuk aplikasi web (
HotelReservationSystem.csproj
) dan proyek pustaka (HotelReservationSystemTypes.csproj
) disalin ke folder /src dalam kontainer. Perintahdotnet restore
mengunduh dependensi yang diperlukan oleh proyek-proyek ini dari NuGet.Tambahkan kode berikut ke bagian bawah Dockerfile:
COPY . . WORKDIR "/src/HotelReservationSystem" RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /app
Perintah ini menyalin kode sumber untuk aplikasi web ke kontainer, lalu jalankan perintah build dotnet untuk membangun aplikasi. DLL yang dihasilkan ditulis ke folder /app dalam kontainer.
Tambahkan perintah berikut di bagian bawah Dockerfile.
RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
Perintah
dotnet publish
menyalin file yang dapat dijalankan untuk situs web ke folder baru dan menghapus semua file sementara. File di dalam folder ini kemudian bisa disebarkan ke sebuah situs web.Tambahkan perintah berikut ke bagian bawah Dockerfile.
EXPOSE 80 WORKDIR /app ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]
Perintah pertama membuka port 80 dalam kontainer. Perintah kedua berpindah ke folder
/app
yang berisi versi aplikasi web yang dipublikasikan. Perintah akhir menentukan bahwa ketika kontainer berjalan, maka kontainer tersebut akan menjalankan perintahdotnet HotelReservationSystem.dll
. Pustaka ini berisi kode yang dikompilasi untuk aplikasi web.Simpan file dan tutup editor teks Anda. Pastikan Anda menyimpannya sebagai jenis file All Files tanpa ekstensi file.
Membuat dan menyebarkan citra menggunakan Dockerfile
Pada prompt perintah, jalankan perintah berikut guna menyusun citra untuk aplikasi sampel menggunakan Dockerfile. Jangan lupa
.
pada akhir perintah. Perintah ini membangun citra dan menyimpannya secara lokal. Citra diberi namareservationsystem
. Verifikasikan bahwa citra berhasil dibangun. Peringatan tentang izin file dan direktori akan ditampilkan ketika proses selesai. Anda dapat mengabaikan peringatan ini untuk tujuan latihan. Gambar mungkin membutuhkan waktu sejenak untuk membangun.docker build -t reservationsystem .
Jalankan perintah berikut untuk memverifikasi bahwa gambar telah dibuat dan disimpan di registri lokal:
docker image list
Citra ini akan memiliki nama
reservationsystem
. Anda juga akan memiliki gambar bernama microsoft/dotnet:REPOSITORY TAG IMAGE ID CREATED SIZE reservationsystem latest d2501f0f2ced About a minute ago 1.76GB
Menguji aplikasi web
Masukkan kode berikut untuk menjalankan kontainer menggunakan gambar
reservationsystem
. Docker akan mengembalikan string panjang digit hex. Kontainer berjalan di latar belakang tanpa antarmuka pengguna apa pun. Port 80 dalam kontainer dipetakan ke port 8080 pada komputer host. Kontainer diberi namareservations
.docker run -p 8080:80 -d --name reservations reservationsystem
Mulai browser web dan navigasi ke
http://localhost:8080/api/reservations/1
. Anda akan melihat objek JSON yang berisi data untuk nomor reservasi 1 yang mirip dengan output berikut:Ganti "1" di akhir URL localhost dengan nomor reservasi yang berbeda, seperti 2 atau 20, untuk melihat detail reservasi yang sesuai.
Jalankan perintah berikut untuk melihat status kontainer:
docker ps -a
Output mencantumkan hal berikut untuk semua kontainer yang tersedia:
- ID KONTAINER
- GAMBAR
- PERINTAH
- Waktu YANG DIBUAT
- STATUS
- PORT
- NAMA
Verifikasi bahwa kontainer
STATUS
sudah Aktif.CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07b0d1de4db7 reservationsystem "dotnet HotelReserva…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp reservations
Masukkan perintah berikut untuk menghentikan kontainer reservasi :
docker container stop reservations
Hapus kontainer reservasi dari registri lokal.
docker rm reservations
Biarkan reservationsystem di registri lokal. Anda akan menggunakan citra ini di latihan berikutnya.
Selamat! Anda telah membuat gambar untuk aplikasi web, dan Anda telah menjalankannya menggunakan kontainer Docker.