Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

.NET Core Uygulamasını Dockerize Etmek – Dockerfile Dosyası Nasıl Oluşturulur?

Merhaba,

.NET Core & Docker yazı dizimizin bu 5. makalesinde artık basit bir uygulamayı dockerize edebilmenin ilk adımı olan Dockerfile dosyasının nasıl oluşturulduğunu inceleyeceğiz.

Hatırlarsanız eğer Dockerfile dosyasının tanımlamasını buradaki makalelemizde detaylıca yapmış bulunmaktayız. Yinede bu makaleye hususi olarak bir tanım bırakmamız gerekirse eğer;

… içerisinde yayınlanacak olan uygulamanın nasıl bir ortamda çalışacağına dair talimatları barındıran Docker projelerinin esasını teşkil eden özel bir dosyadır…

şeklinde bir tarif sanırım dizideki bu makalenin düzeyi için oldukça yeterli ve hatırlatıcıdır kanaatindeyim.

Dockerize edeceğimiz .NET Core uygulamasına gelirsek eğer bu aşağıdaki gibi basit bir kod barındıran Console uygulaması olacaktır.

    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine(DateTime.Now.Second);
                Thread.Sleep(1000);
            }
        }
    }

Şimdi adım adım bir Dockerfile dosyasını oluştururken yapılması ve dikkat edilmesi gereken hususları inceleyelim;

  • Adım 1 Uygulamayı publish etme
    Dockerfile dosyasına yazılacak talimatlarda kullanabilmemiz için öncelikle uygulamanın publish edilmiş datasına ihtiyacımız olacaktır.Bunun için projeye sağ tıklayarak sırasıyla ‘Publish’ -> ‘Folder’ -> ‘Create Profile’ -> ‘Publish’ kombinasyonunu takip etmeniz yeterlidir.
    .NET Core Uygulamasını Dockerize Etmek - Dockerfile Dosyası Nasıl Oluşturulur?

    Burada productiona yönelik bir işlem amaçlandığından dolayı yapılacak publish konfigurasyonunun özellikle realese olmasına dikkat ediniz. ‘Peki hoca, Debug ile Realese arasındaki fark nedir?‘ sualine takılırsanız eğer hadi sırası gelmişken bununda cevabını araya kısaca sıkıştıralım.

    Debug; Hata ayıklamaya yönelik uygulamayı derlemek ve çıktı almaktır.
    Realese; Production’a yönelik uygulamayı derlemek ve çıktı almaktır.

    Velhasıl uygulamayı publish ettikten sonra uygulamanın dizinine girdiğinizde ‘\bin\Realese\netcoreapp3.1(değişkenlik gösterebilir)\publish’ yolunu takip ederseniz uygulamanın derlenmiş çıktısını elde edebilirsiniz.

  • Adım 2 Dockerfile dosyasını oluşturma
    Uygulamaya Dockerfile dosyasını ekleyebilmek için projeye sağ tıkladıktan sonra ‘Add’ -> ‘Docker Support…’ -> ‘Linux’ kombinasyonunu seçip OK butonuna tıklamanız yeterlidir.
    .NET Core Uygulamasını Dockerize Etmek - Dockerfile Dosyası Nasıl Oluşturulur?Evet… Görüldüğü üzere işletim sistemi olarak Windows’u değil Linux işletim sistemini seçmiş bulunmaktayız. Neden mi? Çünkü Linux imageler Windows imagelere nazaran daha küçük boyutlarda oldukları için… Ayrıca .NET Core sayesinde Cross platformda çalışmanın getirdiği bu avantajı değerlendirmekteyiz. Tabi ki de .NET Core değilde standart framework üzerinde geliştirilen bir uygulamayı Windows üzerinde çalıştırmamız gerektiğini unutmayalım.

    Velhasıl bu işlemide gerçekleştirdikten sonra Solution Explorer penceresinden bakarsanız eğer uygulamaya bir Dockerfile dosyasının eklendiğini görmüş olacaksınız.
    .NET Core Uygulamasını Dockerize Etmek - Dockerfile Dosyası Nasıl Oluşturulur?

    Şimdi bu Dockerfile dosyası içerisinde uygulamaya dair gerekli talimatlarımızı belirteceğiz. Tabi ilk olarak siz ilgili dosyayı açın ve içerisinde var olan hazır tüm komutları temizleyin.

    Şimdi neye ihtiyacımız var? düşünelim… İçerisinde .NET Core kütüphaneleri bulunan bir Linux işletim sistemine… Yani bir image’e. Evet her ne kadar biz bu image’i kendimiz oluşturabiliyor olsakta Docker Registry üzerinden Microsoft’un bizlere sağladığı hazır image’i kullanmanızı tavsiye ederim. Bunun için hub.docker.com sitesine giderek açtığınız hesap üzerinden giriş yapınız ve search kısmında ‘.net core runtime’ keywordünü yazınız.

    .NET Core Uygulamasını Dockerize Etmek - Dockerfile Dosyası Nasıl Oluşturulur?

    Gördüğünüz gibi Docker Registry üzerinde bulunan hazır bir image 😉 Şöyle incelerseniz eğer docker registry üzerinden bu image’i nasıl indirebileceğimize dair sağ tarafta bir kod sunulmuş bulunmaktadır.

  • Adım 3 Data Registry’den ilgili image’i çek talimatı
    Artık sıra Dockerfile dosyasına gerekli talimatları vermeye geldi. İlk olarak yukarıda bulduğumuz image’i data registry üzerinden çekmesini söyleyeceğiz. Böylece base image’i belirlemiş olacağız.Bunun için aşağıdaki prototipte komut vermemiz yeterlidir.

    PROTOTİP
    FROM -Image Yolu-

    KOD
    FROM mcr.microsoft.com/dotnet/core/runtime:3.1

    Burada ‘docker pull’ komutu olmaksızın sadece yolun ve ilgili imajın sürümünün belirtildiğine dikkatinizi çekerim.

    Bu komutu yazdıktan sonra Dockerfile içerisindeki her bir satıra karşılık image’de katman oluşmasından dolayı ilk katmanımızı oluşturmuş oluyoruz.

  • Adım 4 Çalışma klasörü oluştur talimatı
    Sırada uygulamaya dair bir çalışma klasörü oluşturma var. Bunun için kod prototipimiz aşağıdaki gibi olacaktır.PROTOTİP
    WORKDIR -path-

    KOD
    WORKDIR /app

  • Adım 5 Publish dosyalarını taşı talimatı
    Sıra oluşturulan /app dizinine uygulamanın publish datalarını taşımaya geldi.PROTOTİP
    COPY -publish path- -target path-

    KOD
    COPY /bin/Release/netcoreapp3.1/publish /app

  • Adım 6 Çalıştırılacak .dll talimatı
    Bu Dockerfile dosyası üzerinden üretilecek Image’den(sonraki yazıda göreceğiz) ayağa kaldırılacak Container’da(bi sonraki yazıda göreceğiz) hangi .dll dosyasının çalıştırılacağını belirlememiz gerekmektedir.PROTOTİP
    ENTRYPOINT [“dotnet”, “dll path”]

    KOD
    ENTRYPOINT ["dotnet", "DockerizeExample.dll"]

Ve böylece temel düzeyde bir Dockerfile dosyasını tasarlamış bulunmaktayız. Yukarıda parça parça ele aldığımız kodları toplayıp aşağıda birleştirelim;

FROM mcr.microsoft.com/dotnet/core/runtime:3.1
WORKDIR /app
COPY /bin/Release/netcoreapp3.1/publish /app
ENTRYPOINT ["dotnet", "DockerizeExample.dll"]

İşte bu kadar…

Oluşturduğumuz Dockerfile dosyasına bakarsak eğer 4 satırlık talimat barındırmaktadır. Bu container ayağa kalkarken oluşturulan yazılabilir katmanla birlikte toplam 5 katmanlık bir çalışma olacağını göstermektedir.

Bu yazımızda bir Dockerfile dosyasının nasıl oluşturulduğunu ve içerisine yazılan temel talimatların neler olduğunu detaylıca incelemiş bulunmaktayız. Bir sonraki yazımızda bu Dockerfile dosyasındaki talimatlara uygun imajlar oluşturmayı detaylarıyla ele alacağız. O halde siz bu yazıyı bitirene kadar bende diğer makaleye başlamış olurum 🙂 Görüşmek üzere…

İlgilenenlerin faydalanması dileğiyle…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. Kamil Yasin dedi ki:

    Teşekkürler

  1. 24 Mart 2020

    […] .NET Core Uygulamasını Dockerize Etmek – Dockerfile Dosyası Nasıl Oluşturulur? […]

  2. 25 Mart 2020

    […] önceki Dockerfile Dosyası Nasıl Oluşturulur? başlıklı makalemizde Dockerfile dosyasının nasıl oluşturulduğunu incelemiş bulunmaktayız. […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir