Öncelikle bu makalenin daha kapsamlı hallerini internette çok rahat bulabileceğinizi belirtmek isterim. Daha önceki makalelerimize auth server, discovery server, api gateway ve çeşitli microservice’ler oluşturarak github üzerinde paylaşmıştık. Bu kadar kapsamlı örneklerin üzerine, ilgili servisleri docker üzerinde host etmemek bir eksiklik olacağı için bu makaleyi yazmaya karar verdim 🙂

Makalemize her yerde duyduğumuz bu teknolojinin yani Docker’ın tanımıyla başlayalım. Docker, “konteynerleştirme” olarak da bilinen işletim sistemi seviyesinde sanallaştırma sağlayan bir bilgisayar programıdır. İlk sürümü 2013’te yayınlanmıştır. Docker, “konteyner” adı verilen yazılım paketlerini çalıştırmak için kullanılmaktadır.

Daha önce bilgisayarınıza Docker kurmadıysanız aşağıdaki adres üzerinden kurulumunu gerçekleştirebilirsiniz.

Mac OS X

Windows

Linux

Docker ile birlikte karşımıza çıkacak kavramlardan biriside Imagekavramıdır. Kısaca Image’den bahsetmek gerekirse. İçerisinde uygulamalarını barındıran ve docker container’lar üzerinde çalıştırılan paketlerdir. Bu makalemizde daha önce oluşturduğumuz .net core uygulamasını bir image haline getirerek docker üzerinde nasıl host edeceğimizi inceleyeceğiz.

Öncelikle dockerize etmek istediğimizi uygulamamızın ana dizininde Dockerfile (dosya ismi önemli) adında bir dosya oluşturuyoruz. Şimdi bu dosyamızın içine yazacağımız kodu inceleyeleim.

Dockerfile iki ana bölümden oluşur biri build diğeri ise run etme.

FROM hangi base image’ı kullanacağımızı belirttiğimiz yer.

WORKDIR hangi working directory alanını kullanacağımız yeri belirtiyoruz.

COPY Proje dosyalarını local file sistemden docker image içine kopyaladığımız kısım.

ENTRYPOINT Container ayağa kalkarken ilk çalışacak komut ve parametreleri bu alanda tanımıyoruz.

Evet productapi uygulamamızın Dockerfile’ını inceleyelim. İlk kısımda base image olarak microsoft/dotnet:sdk ‘yı kullanacağımızı belirtiyoruz. İlgili image’a buradan ulaşabilirsiniz.

Ardından dotnet restore komutunu çalıştırarak .net core uygulamamıza ait paketlerin güncellenmesini sağlıyoruz. Bir sonraki komutta ise projemizi publish ediyoruz.

Build runtime image kısmında ise uygulamamızı image üzerinde çalıştıracağımız yere kopyaladıktan sonra docker üzerinden dışarı açacağımız protu belirtiyoruz.

Şimdi oluşturduğumuz Dockerfile dosyasını aşağıdaki komutu kullanarak image build işlemini yapalım.

docker build - t productapi .

Dockerfile oluşturma ile ilgili daha fazla bilgiye yine Docker’ın kendi sitesinde yayınlamış olduğu dökümandan ulaşabilirsiniz.

Daha önce oluşturduğumuz microservice’ler için ayrı ayrı dockerfile’ları yine bu şekilde oluşturduktan sonra docker-compose dosyamızı inceleyelim.

Nedir bu docker-compose ?

Docker Compose, oluşturmuş olduğumuz birden fazla docker image’ını tek bir seferde çeşitli parametre’ ler ile çalıştırdığımız .yml dosyasıdır. Özellikle developmen ve deployment aşamalarında kolaylıklar sağlamaktadır.

Evet her servis için ilgili image, hostname, port ve link’lenecek servisleri belirterek docker-compose dosyamızı oluşturuyoruz. Ardından aşağıdaki komut ile ilgili dosyamızı çalıştırıyoruz.

docker-compose up

Evet tek bir komutla tüm servislerimizi çalıştırdık 🙂

Faydalı olması dileğiyle. Hoşçakalın…