Top Ad unit 728 × 90

Docker Temel Kavramlar ve Bir ASP.Net Core Uygulamasını Docker Üzerinde Çalıştırma

Docker Nedir?


Docker, herhangi bir ortamda uygulamaları kolay bir şekilde yaratmak, derlemek, çalıştırmak ve deploy etmek için kullanılan bir container teknolojisidir. Container teknolojisi ile, uygulamanın ihtiyaç duyduğu bütün kütüphaneler ile tek bir paket haline getirilerek sunulur. Docker container’ı çalıştırılması gereken kodları, çalışma ortamını, sistem araçları ve kütüphaneleri tek bir dosya sistemi üzerinde bir araya getiririr. Böylece ortamından bağımsız olarak yazılım her yerde çalışabilir. Container’ların sanal makinelere göre farkı daha lightweight olmaları ve farklı bir mimari yaklaşım sergileyerek daha taşınabilir ve verimli olmalarıdır. Sanal makineler, uygulamayı, uygulamayla ilgili kütüphaneleri ve bütün işletim sistemini barındırırlarken, container’lar, uygulamayı ve uygulamanın bütün bağımlı olduğu kütüphaneleri taşırlar, kernel ve işletim sistemini paylaşarak, birbirinden bağımsız olarak çalışırlar.




Resimde de göreceğiniz üzere Docker Engine, container’larımız derleyip çalıştırmamızı sağlayan lightweight bir container runtimedır.

Docker ile çalışmaya başlamadan önce işletim sistemimize göre, Docker For Windows, Docker For Linux veya Docker For Mac yükleyebiliriz.

Docker For Windows, Windows 10 bilgisayarlarda çalışan native bir Windows uygulamasıdır. Sanallaştırma için Hyper- V kullanır. Hem windows hem de Linux üzerinde container’lar çalışmamıza olanak sağlar (https://docs.docker.com/engine/getstarted/step_one/#/docker-for-windows). Docker’ı makinemize yükledikten sonra, bir command-line ve powershell yardımıyla docker komutlarını çalıştırmaya başlayabiliriz.


Docker Image ve Container Kavramları Hakkında

Docker Engine bize docker image yaratmak ve Docker container’larını çalıştırmak için bir ortam sunar. Docker komutlarını kullanarak docker image’larımızı oluşturur ve bu image’ları container’lar olarak çalıştırırız.
Docker Image container’ların temelini oluşturur. Bir image, dosya sistemi ve çalışma zamanında kullanılacak olan parametrelerden oluşmaktadır. Bir docker image (birazdan da ayrıntılı olarak inceleyeceğiz) her biri birbirinin üstüne koyulmuş olan katmanlı bir yapıdaki dosya sistemlerinden oluşur. Docker image’ları çalışan bir konumda olmadıkları için hiç bir zaman değişmezler.

Docker Container Docker image’ının çalışan halidir. Bir docker image’ını çalıştırdığımız zaman, bir Docker container oluşur. 

Burada bir de Docker Hub’dan  bahsetmek istiyorum. Image’ların katmanlı olarak başka image’lardan oluştuğundan bahsetmiştik. Bizler de kendi image dosyalarımızı yaratırken, başka image dosyalarına ihtiyaç duymaktayız. Docker Hub, docker image’larının tutulduğu merkezileştireleştirilmiş bir yerdir. Docker Hub’dan ihtiyacımız olan image’ı indirip çalıştırabilir. Veya biz de kendi image dosyalarımızı yükleyebiliriz. (https://hub.docker.com/)

Bir image’ı çalıştırmak istediğimiz zaman, docker image’ı önce yerel sistemde arar, orada bulamazsa docker hub’ından indirmeye çalışır.

DockerFile ve Yapısı

DockerFile Docker image oluştururken, ihtiyaç duyulan komutları içeren bir text dosyasıdır. Dockerfile okunup, bu dosyadaki komutlar otomatik olarak sırasıyla çalıştırılarak docker image oluşturulur.
Basit bir haliyle dockerfile aşağıdaki gibi bir yapıdadır.


FROM oluşturulacak Docker Image dosyasının hangi image dosyasını temel alarak oluşturulacağını gösterir.

WORKDIR bu komuttan sonra gelecek olan RUN,CMD, COPY ve ENTRYPOINT komutları içinde kullanılan container’da kullanılan çalışma dizinini gösterir.

COPY kaynak hedef yeni dosyaları kaynak olarak belirtilen yerden alarak, dosya sistemi üzerinde hedef olarak gösterilen yere kopyalar.

EXPOSE Container’ın çalışma zamanında hangi portları dinlediğini gösterir.

ENTRYPOINT container’ı çalıştırılabilir bir dosya olarak yapılandırmanızı sağlar.

Bir ASP.Net Core Uygulamasını Docker Üzerinde Çalıştırma

Docker For Windows’u kurduktan sonra, Docker’ın Docker host işletim sistemini kendini kurduğunu görebiliriz. Hyper V Manager’a baktığımızda, Linux host’unu görebiliyoruz.


Docker For windows’u açıp buradan container’larımızı tutması için diskimizi paylaşmamız gerekiyor.


Şimdi bir ASP.Net Core uygulaması açıp Linux üzerinde host edelim.

Öncelikle boş bir ASP.Net Core uygulaması açıp, bunu publish edelim. Daha sonra publish ettiğimiz klasore giderek içerisinde bir DockerFile oluşturacağız. TestNetCoreApplication adıyla açtığım projeye ait docker dosyası aşağıdaki gibidir.

Microsoft/aspnetcore image’ı, publish edilmiş ASP.Net Core uygulamalarını çalıştırmamızı sağlayan image’dir. İmage dosyalarının katmanlı bir yapıda oluştuğundan bahsetmiştik. Bu image dosyası da temel olarak microsoft/netcore image dosyasını almaktadır.


Docker image’ımızı oluşturmakta kullanacağımız DockerFile ve publish ettiğimiz ASP.Net Core dosyaları hazır olduğuna göre artık docker image’ımızı çalıştırma aşamasına geçebiliriz.

PowerShell veya command prompt açıp  publish ettiğimiz klasorumuze gidiyoruz.

Docker build komutunu kullanarak docker image dosyamızı oluşturacağız. Burada options olarak oluşturacağımız image’ın ismini vermemiz şu an için yeterli olacaktır. Image ismini tamamen küçük harf ile kabul etmektedir. Path, image’ı oluşturacağımız dizini veya alacağımız url ‘i göstermektedir. Biz zaten publish klasoru içinde olduğumuz için path olarak şu anki dizini göstermek amacıyla “.” vereceğiz.

docker build [OPTIONS] PATH | URL | -
docker build –t testnetcoreapp .

Resimde de görüldüğü üzere dockerfile’da verdiğimiz komutlar sırasıyla işletilmeye başlanmıştır. Öncelikle microsoft/aspnetcore image’ı docker hub üzerinden çekilmiştir. Bizim publish dosyalarımız yeni image’imizin içerisine kopyalanarak yeni image dosyamız başarılı bir şekilde yaratılmıştır.


İmage dosyalarını docker images komutuyla listeleyebiliriz. Listelediğimiz zaman oluşan image dosyamızı da burada görebiliriz.



Şimdi sıra bu dosyayı çalıştırma kısmına geldi. Docker run komutunu kullanarak image dosyamızı çalışan bir container haline dönüştüreceğiz.  Dockerfile’da container’ın 80 portunu dinlediğini belirtmiştik. Bu portu bizim 8080 portumuzundan sunarak image dosyamıza verdiğimiz isim ile çalıştırıyoruz.

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
docker run -p 8080:80 testnetcoreapp


Browser üzerinden localhost:8080 portuna girerek uygulamamızı görebiliriz.

Referanslar : 



Özlem KARAGEDİK YESÜGAY





Docker Temel Kavramlar ve Bir ASP.Net Core Uygulamasını Docker Üzerinde Çalıştırma Reviewed by Taşkalem on Kasım 19, 2017 Rating: 5

Hiç yorum yok:

All Rights Reserved by test tema © 2014 - 2015
Powered By Blogger, Designed by Sweetheme

İletişim Formu

Ad

E-posta *

Mesaj *

Blogger tarafından desteklenmektedir.