Container Teknolojilerine Giriş: Container Nedir?

27.07.2021

Caner Korkmaz

Container ile container imajı aynı şey midir? Değilse aralarındaki farklar nelerdir? Bu yazımızda kısaca container teknolojisi ile ilgili bilmeniz gereken en temel kavramlara değinmeye çalışacağız.

server

Container’lar günümüzün popular teknolojileri arasında yerini almış kavramlardan biridir. Peki container tam olarak nedir? Container ile container imajı aynı şey midir? Değilse aralarındaki farklar nelerdir? Bu yazımızda kısaca container teknolojisi ile ilgili bilmeniz gereken en temel kavramlara değinmeye çalışacağız.

Container’ın ne olduğunu anlayabilmek için öncelikle container imajının ne olduğuna bir değinelim. Container imajı uygulamanızı paketlemeye yarayan teknolojilerden bir tanesidir. Mesela siz bir java uygulaması yazdığınızda, uygulamanızı bir JAR ya da WAR paketi halinde paketleyebilirsiniz. Ya da diyelim ki bir python uygulaması yazdınız, benzer şekilde uygulamanızı bir zip dosyası haline getirerek paketleyebilirsiniz. Container imajı dediğimiz şey de, tıpkı bir JAR dosyası ya da bir zip dosyası gibi uygulamanızı paketlemeye yarar. Ancak JAR/WAR ya da zip dosyasından farklı olarak, uygulamanızı bir container imajı olarak paketlediğinizde uygulamanızın tüm gereksinimlerini de -runtime gereksinimleri, OS gereksinimleri, kütüphane gereksinimleri vs- uygulamanız ile paketlemiş olursunuz. Böylece artık container imajı haline getirdiğiniz uygulamanızı ister laptop’ınızda, ister development ortamınızda, isterseniz test ortamınızda, isterseniz buluttaki production ortamınızda hiçbir dış bağımlılığı olmadan kolayca çalıştırabilirsiniz.

Bu örneği biraz daha açacak olursak diyelim ki siz bir java uygulaması yazdınız ve uygulamanızı JAR dosyası şeklinde paketlediniz.  Bu uygulamanızı dev ortamındaki yeni bir sanal Linux makinede çalıştırmak istiyorsunuz.   Yeni sanal Linux sunucunuz oluşturuldu, ihtiyaç duyduğunuz kullanıcılar oluşturuldu, ve erişim bilgileri sizinle paylaşıldı. Sizde sftp kullanarak jar dosyanızı bu sunucuya attınız. Ancak uygulamanızı çalıştırabilmek için uygun java runtime’ının sanal makinenize kurulu olması gerekir. Java runtime’ının kurulması için ise bir takım sistem kütüphanelerine gereksinim vardır. Bu sistem gereksinimleri ve Java runtime kurulduktan sonra, bu defa da uygulamanızın ihtiyaç duyduğu java kütüphanelerinin (mesela json java kütüphanesi) yeni sanal sunucunuzda hazır bulunması gerekir. Tüm bu gereksinimler karşılandıktan sonra uygulamanızı artık dev ortamındaki yeni sanal sunucuda çalıştırabilirsiniz.  

Peki diyelim ki artık uygulamanızı dev ortamından test ortamındaki yeni bir sanal sunucuya taşımak istiyorsunuz. Yukarıda saydığımız tüm işlemleri yeni test sanal sunucunuz için de yapmanız gerekecektir. 

Bir başka olasılık olarak da uygulamanızı dev ortamınızdan test ortamında halihazırda mevcut olan bir sunucuya aktarmak istediğinizi varsayalım. Bu durumda yapmanız gereken bir çok kontrol olacaktır. Öncelikle mevcut sunucuda bir java runtime olup olmadığını kontrol etmelisiniz. Yoksa kurmalı, varsa uygun versiyonda olduğunu teyit etmelisiniz. Benzer şekilde tüm sistem ve java kütüphanelerinin sistemde bulunup bulunmadığını ve uygun versiyonda olup olmadığını, konfigürasyonlarının doğru yapılandırılmış olup olmadığını kontrol etmeniz gerekecektir.

Halbuki uygulamanızı bir container imajı olarak paketlerseniz, paketiniz içerisinde sadece uygulamanız değil, uygulamanızın ihtiyaç duyduğu tüm gereksinim ve bağımlılıklar da (gerekli java runtime, sistem ve java kütüphaneleri vs) mevcut olacağı için tek yapmanız gereken container imajınızı yeni ortamınıza taşıyıp çalıştırmak olacaktır. 

Container imajının ne olduğunu anladıktan sonra container nedir sorumuzun cevabını oldukça kolay bir şekilde verebiliriz. Uygulamamızın paketlenmiş haldeki bir zip dosyasına benzer hali container imajı ise, bu imaj çalıştırıldığı zaman elde ettiğimiz şeye de container diyoruz.

Umarım bu yazımız aklınızdaki “Container Nedir?” sorusuna bir miktar cevap olabilmiştir. Container teknolojileri, Kubernetes ve Red Hat OpenShift Container Platformu hakkında daha fazla bilgi için bizimle iletişime geçebilirsiniz.