Alıştırma - Bir Docker görüntüsünü kendi web uygulamanızı çalıştıracak şekilde özelleştirme
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
Henüz çalışmıyorsa bilgisayarınızda Docker'ı başlatın.
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
Dizini açmak
src
için aşağıdaki komutu girin.cd mslearn-hotel-reservation-system/src
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
.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.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.
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.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ığındadotnet HotelReservationSystem.dll
komutunun yürütülmesi gerektiğini belirtir. Bu kitaplık, web uygulaması için derlenmiş kodu içerir.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
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üyereservationsystem
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 .
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
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
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:İ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.
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
Reservations kapsayıcısını durdurmak için aşağıdaki komutu girin:
docker container stop reservations
reservations adlı kapsayıcıyı yerel kayıt defterinden silin.
docker rm reservations
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.