Latihan - Mengkustomisasi citra Docker untuk menjalankan aplikasi web Anda sendiri

Selesai

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

  1. Jika belum berjalan, mulai Docker di komputer Anda.

  2. 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
    
  3. Masukkan perintah berikut untuk membuka direktori src.

    cd mslearn-hotel-reservation-system/src
    
  4. src Di direktori, masukkan perintah berikut untuk membuat file baru bernama Dockerfile 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.

  5. 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. Perintah dotnet restore mengunduh dependensi yang diperlukan oleh proyek-proyek ini dari NuGet.

  6. 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.

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

  8. 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 perintah dotnet HotelReservationSystem.dll. Pustaka ini berisi kode yang dikompilasi untuk aplikasi web.

  9. Simpan file dan tutup editor teks Anda. Pastikan Anda menyimpannya sebagai jenis file All Files tanpa ekstensi file.

Membuat dan menyebarkan citra menggunakan Dockerfile

  1. 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 nama reservationsystem. 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 .
    
  2. 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

  1. 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 nama reservations.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. 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:

    Screenshot of the hotel reservations system web app running in a browser.

    Ganti "1" di akhir URL localhost dengan nomor reservasi yang berbeda, seperti 2 atau 20, untuk melihat detail reservasi yang sesuai.

  3. 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
    
  4. Masukkan perintah berikut untuk menghentikan kontainer reservasi :

    docker container stop reservations
    
  5. Hapus kontainer reservasi dari registri lokal.

    docker rm reservations
    
  6. 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.