Alıştırma - Bir Docker görüntüsünü kendi web uygulamanızı çalıştıracak şekilde özelleştirme

Tamamlandı

Dockerfile, özel bir Docker görüntüsü oluşturma adımlarını içerir.

Docker kullanarak kuruluşunuzun web uygulamalarından birini dağıtmaya karar verirsiniz. Otel rezervasyonları web sitesi için web API'sini uygulayan basit bir web uygulaması seçersiniz. Web API'sinde müşterilerin rezervasyonlarını oluşturan ve alan HTTP POST ve GET işlemleri kullanıma sunulur.

Dekont

Web uygulamasının bu sürümünde rezervasyonlar kalıcı değildir ve sorgular sahte veriler döndürür.

Bu alıştırmada bir uygulama için Dockerfile oluşturacaksınız. Ardından görüntüyü oluşturacak ve yerel ortamda çalıştıracaksınız.

Web uygulaması için Dockerfile oluşturma

  1. Henüz çalışmıyorsa bilgisayarınızda Docker'ı başlatın.

  2. Yerel bilgisayarınızdaki komut istemi penceresinde aşağıdaki komutu çalıştırarak web uygulamasının kaynak kodunu indirin.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  3. Dizini açmak src için aşağıdaki komutu girin.

    cd mslearn-hotel-reservation-system/src
    
  4. dizinine src aşağıdaki komutları girerek adlı Dockerfile yeni bir dosya oluşturun ve Not Defteri açın:

    copy NUL Dockerfile
    notepad Dockerfile
    

    Dekont

    Varsayılan olarak not defteri komutu bir metin dosyası açar. Dosya uzantısı olmayan Tüm Dosyalar dosya türü olarak kaydettiğinizden emin olun. Doğrulamak için src klasörünü Dosya Gezgini açın, Dosya adı uzantılarını göster'i >> seçin. Gerekirse, dosyayı yeniden adlandırın ve dosya adından kaldırın .txt .

  5. Dockerfile dosyasına aşağıdaki kodu ekleyin:

    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"
    

    Bu kod, .NET Core Framework SDK'sını içeren bir görüntüyü getirmeye yönelik komutlara sahiptir. Web uygulamasının (HotelReservationSystem.csproj) proje dosyaları ve kitaplık projesi (HotelReservationSystemTypes.csproj) kapsayıcıdaki /src klasörüne kopyalanır. komutu, dotnet restore bu projeler için gereken bağımlılıkları NuGet'ten indirir.

  6. Aşağıdaki kodu Dockerfile dosyasının altına ekleyin:

    COPY . .
    WORKDIR "/src/HotelReservationSystem"
    RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /app
    

    Bu komutlar web uygulamasının kaynak kodunu kapsayıcıya kopyalar ve ardından uygulamayı derlemek için dotnet build komutunu çalıştırır. Sonuçta elde edilen DLL'ler, kapsayıcıdaki /app klasörüne yazılır.

  7. Dockerfile dosyasının en altına aşağıdaki komutu ekleyin.

    RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
    

    komutu, dotnet publish web sitesinin yürütülebilir dosyalarını yeni bir klasöre kopyalar ve ara dosyaları kaldırır. Bu klasördeki dosyalar bir web sitesine dağıtılabilir.

  8. Aşağıdaki komutları Dockerfile dosyasının altına ekleyin.

    EXPOSE 80
    WORKDIR /app
    ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]
    

    İlk komut, kapsayıcıdaki 80 numaralı bağlantı noktasını açar. İkinci komut, web uygulamasının yayımlanmış sürümünü içeren /app klasörüne geçiş yapar. Son komut, kapsayıcı çalıştırıldığında dotnet HotelReservationSystem.dll komutunun yürütülmesi gerektiğini belirtir. Bu kitaplık, web uygulaması için derlenmiş kodu içerir.

  9. Dosyayı kaydedin ve metin düzenleyicinizi kapatın. Dosya uzantısı olmayan Tüm Dosyalar dosya türü olarak kaydettiğinizden emin olun.

Dockerfile dosyasını kullanarak görüntüyü oluşturma ve dağıtma

  1. Komut isteminde aşağıdaki komutu çalıştırarak Dockerfile dosyasıyla örnek uygulamanın görüntüsünü oluşturun. Komutun sonundaki . karakterini unutmayın. Bu komut, görüntüyü oluşturur ve yerel ortamda depolar. Görüntüye reservationsystem adı verilmiştir. Görüntünün başarıyla oluşturulduğunu doğrulayın. İşlem tamamlandığında dosya ve dizin izinleriyle ilgili bir uyarı görüntülenir. Bu alıştırmada bu uyarıları yoksayabilirsiniz. Görüntünün oluşturulması biraz zaman alabilir.

    docker build -t reservationsystem .
    
  2. Görüntünün oluşturulduğunu ve yerel kayıt defterinde depolandığını doğrulamak için aşağıdaki komutu çalıştırın:

    docker image list
    

    Görüntünün adı reservationsystem olacaktır. Ayrıca microsoft/dotnet adlı bir görüntüye de sahip olursunuz:

    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    reservationsystem   latest              d2501f0f2ced        About a minute ago   1.76GB
    

Web uygulamasını test etme

  1. Görüntüyü kullanarak reservationsystem bir kapsayıcı çalıştırmak için aşağıdaki kodu girin. Docker, onaltılık basamaklardan oluşan uzun bir dize döndürür. Kapsayıcı herhangi bir kullanıcı arabirimi olmadan arka planda çalışır. Kapsayıcının 80 numaralı bağlantı noktası, konak makinenin 8080 numaralı bağlantı noktasına eşlenmiştir. Kapsayıcının adı reservations olarak belirlenmiştir.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. Bir web tarayıcısı başlatın ve http://localhost:8080/api/reservations/1 sayfasına gidin. Aşağıdaki çıkışa benzer şekilde 1 numaralı rezervasyon verilerini içeren bir JSON nesnesi görmeniz gerekir:

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

    İlgili rezervasyon ayrıntılarını görüntülemek için localhost URL'sinin sonundaki "1" değerini 2 veya 20 gibi farklı bir rezervasyon numarasıyla değiştirin.

  3. Kapsayıcının durumunu görüntülemek için aşağıdaki komutu çalıştırın:

    docker ps -a
    

    Çıkışta tüm kullanılabilir kapsayıcılar için aşağıdakiler listelenir:

    • KAPSAYıCı Kimliği
    • GÖRÜNTÜ
    • KOMUT
    • OLUŞTURULMA ZAMANı
    • DURUM
    • BAĞLANTI NOKTA -LARI
    • AD -LARINI

    Kapsayıcının STATUS Çalışır durumda olduğunu doğrulayın.

    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. Reservations kapsayıcısını durdurmak için aşağıdaki komutu girin:

    docker container stop reservations
    
  5. reservations adlı kapsayıcıyı yerel kayıt defterinden silin.

    docker rm reservations
    
  6. reservationsystem adlı görüntüyü yerel kayıt defterinden kaldırmayın. Sonraki alıştırmada bu görüntüyü kullanacaksınız.

Tebrikler! Web uygulamanız için bir görüntü oluşturdunuz ve bunu docker kapsayıcısı kullanarak çalıştıracaksınız.