Docker Nedir ? Geliştirme ve Test ortamında neden Docker ihtiyaç duyarız.

Ufak bir uygulama geliştirdiğinizi düşünün REST servisleri ile dışarıya servisler sağlıyorsunuz. Local’inizde test ettiniz servisler çok güzel şekilde çalışıyor. Sonra Test ekibinin bu servisleri test edebilmesi için uygulamayı test ortamına attınız. Test ortamında işletim sisteminden tutun, JDK versiyonu veya o ortamda bulunan 3rd party kütüphanelerin farklılığından, network ve güvenlik ayarlarından kaynaklı problemlerden uygulamanızın çalışmadığı durumlarla sık sık karşılaşırsınız.

Günümüz yöntemleri ile istenen değişiklikleri yönetmek, versiyonlamak, bu değişiklikleri sunuculara sürekli deploy etmek oldukça zordur. Günümüz yöntemleri dediğim uygulamaları derleyerek war, jar vb.. paketler oluşturmak ve bunları Tomcat, Glassfish, Weblogic vb.. ilgili sunuculara yüklemektir.

Bunun için CI(Continuous Integration) araçları kullanabilir ve sunucu pluginleri ve Source Control Araç pluginleri ile bu işleri otomatik olarak yapabilirsiniz. Örneğin Bamboo aracını Stash ile entegre edip, kodda bir günceleme olduğunda Bamboo’nun Mvn kodlarını arka planda çalıştırıp hem kodu derlemesi, hemde paket haline getirip Repository ve ilgili sunuculara deploy’unu sağlatabilirsiniz.

Ama test ortamı dediğimizde A,B,C özellikleri geliştirilen 3 ayrı ekip olsun. Bu ekiplerin aynı sunucuları aynı anda farklı yetenekler için kullanıp test ortamı haline getirmeleri oldukça zordur. Bu yetenekleri ortamları ile birlikte kurup , kaldırabilecek bir araca ihtiyaç vardır. Container dediğimiz bu yapılar sizin için bu ortamı sağlarlar.

AWS’de yer alan CloudFormation hizmeti sizin Infrastructure’ Code olarak oluşturmanızı ve versiyonlamanızı sağlayan bir araçtır. JSON içerisinde aşağıdaki örnek template ler ile https://s3-us-west-2.amazonaws.com/cloudformation-templates-us-west-2/EC2InstanceWithSecurityGroupSample.template Infrastructure tanımlayabilirsiniz.

CloudFormation nasıl Infrastructure tanımlamaya izin veriyorsa. Docker’da declerative syntax ile Container tanımlamaya izin verir. Docker Container’larının özelliği ayrı bir virtualization platformu ihtiyacı olmamasıdır. Mevcut işletim sistemi fonksiyonlarına çağırımlar yaparak çalıştırmaları gerçekleştirir. Bundan dolayı oldukça hızlı ve performanslı çalışır.

Aşağıdaki resimde normal VM’ler ile Container’lar arasındaki farkı görebilirsiniz. Normal VM’ler Guest OS callarını Host Operating System çağrılarına çevirebilmek için oldukça zaman ve enerji harcarlar. Docker bu kayıp yoktur.

DOCKER

Docker container’da yer alan libcontainer çalıştırma ortamı, Linux çekirdeğinde yer alan namespace ve cgroups isolasyon yeteneklerine bir arayüz sağlayarak uygulamaların aynı makinede farklı farklı container’lar içerisinde birbirlerinden bağımsız olarak çalışmalarını sağlar. Özetle Docker Containerlar kendilerine özel bir işletim sistemine ihtiyaç duymazlar, aynı işletim sistemini birden fazla Docker Container’ı paylaşır.

DOCKER MİMARİSİ

Docker mimarisine bakacak olursak. Docker Client’ı direk Containerlar ile iletişime geçmez. Host üzerinde yer alan Docker Daemon ile TCP/REST üzerinden haberleşir. Docker Daemon hostda yer alan containerlar ile haberleşir.

Docker’da 3 ana kavramı (images, registeries ve containers) iyi anlamak gerekiyor.

Images : Constainer örneklerinin templatidir. Tekrar tekrar aynı containerlardan oluşturmak için bunlar Images olarak saklanır. Aynı AWS’de yer alan AMI dosyaları gibi düşünebiliriz bu Images’leri

Registeries: Images’lerin saklandığı public ve private alanlardır. Bunlar public’te DockerHub içerisinde saklanırlar ve istenirse local’de indirilip kullanılabilirler .

  • Source (Codes) stores in GitHub
  • Jar (Binaries) stores in Maven Repos
  • Docker (Containers) images stores in Docker Hub
  • AMI (EC2) images stores in S3 and AWS AMI MarketPlace..

Containers: Docker image bir instance üzerinde çalıştırılmış halidir.

Docker Image’ları oluşturmanın en iyi yöntemi DockerFile dosyalarıdır. CloudFormation template’lerinden(Infrastructure Template) farklı olarak aynı ant, maven gibi Docker image’larını build eder.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.