- Konteyner nedir?
- Konteyner nasıl çalışır?
- Konteyner ile sanal makine arasındaki fark
- Küçük bir örnek: bir web uygulamasını paketlemek
- Konteynerlerin kullanım alanları ve sınırları
- Docker, konteyner ve Kubernetes ilişkisi
- Konteyner teknolojisini Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
Konteyner Teknolojisi: Uygulamayı Paketleyip Taşımak
Konteyner, bir uygulamayı bağımlılıklarıyla paketleyip yalıtılmış çalıştıran hafif bir teknolojidir. Çalışma mantığı, VM farkı ve sınırları burada.
Konteyner nedir?
Konteyner (container), bir uygulamayı kendi kütüphaneleri, ayarları ve bağımlılıklarıyla birlikte paketleyip diğer süreçlerden yalıtılmış biçimde çalıştıran teknolojidir. Paketin içinde uygulamanın ihtiyaç duyduğu her şey bulunduğu için aynı konteyner geliştiricinin bilgisayarında, test sunucusunda ve üretim ortamında aynı şekilde çalışır.
Bu, yazılım dünyasında sık duyulan 'bende çalışıyordu' sorununu azaltır. Sorunun kaynağı genellikle ortamlar arasındaki sürüm ve yapılandırma farklarıdır; konteyner bu farkları paketin içine alarak ortadan kaldırır.
Konteyner nasıl çalışır?
Konteyner bir sanal bilgisayar değildir. Aynı makinedeki konteynerler ana işletim sisteminin çekirdeğini paylaşır, ancak çekirdeğin sunduğu yalıtım özellikleriyle birbirinden ayrılır. Linux'ta bu yalıtım, süreçlerin, ağın ve dosya sisteminin ayrı görünmesini sağlayan namespace'ler ile her konteynerin kullanabileceği işlemci ve bellek miktarını sınırlayan kaynak kontrol mekanizmalarıyla sağlanır.
Konteyner mantığı şu parçalarla düşünülür: image (imaj), container ve registry. İmaj, uygulamanın değişmez paketlenmiş şablonudur. Konteyner, bu imajdan başlatılmış çalışan örnektir. Registry ise imajların saklandığı ve paylaşıldığı depodur. İmaj genellikle Dockerfile adlı bir tarif dosyasından üretilir; her satır katmana dönüşür, böylece değişmeyen katmanlar yeniden kullanılır ve imaj güncellemeleri hızlı olur.
Konteyner ile sanal makine arasındaki fark
Ölçüt: işletim sistemi. Sanal makine: her VM kendi tam işletim sistemini çalıştırır. Konteyner: ana makinenin çekirdeğini paylaşır, yalnızca uygulama ve kütüphaneleri taşır.
Ölçüt: boyut ve başlangıç. Sanal makine: daha büyük ve başlaması dakikalar alabilir. Konteyner: hafif, genellikle saniyeler içinde başlar.
Ölçüt: yalıtım. Sanal makine: donanım düzeyinde daha güçlü yalıtım. Konteyner: süreç düzeyinde yalıtım; çekirdek paylaşıldığı için güvenlik yapılandırması daha dikkat ister.
Ölçüt: yoğunluk. Sanal makine: aynı donanımda daha az örnek. Konteyner: aynı donanımda çok daha fazla örnek çalıştırılabilir.
Rakip değil, tamamlayıcıdırlar. Birçok bulut ortamında konteynerler sanal makineler üzerinde çalışır.
Küçük bir örnek: bir web uygulamasını paketlemek
Örneğin bir ekip, belirli bir programlama dili sürümü ve bazı kütüphanelerle çalışan bir web uygulaması geliştirdi. Dockerfile içinde temel imaj seçilir, uygulama dosyaları kopyalanır, bağımlılıklar kurulur ve başlatma komutu yazılır. Bu tariften bir imaj üretilir ve registry'ye gönderilir.
Test sunucusu ve üretim sunucusu aynı imajı çekip çalıştırır. Yeni sürümde yalnızca değişen katmanlar yeniden iner. Sunucuda uygulamanın çalışabilmesi için dil sürümünü ya da kütüphaneleri elle kurmak gerekmez; tek gereksinim konteyner çalışma zamanıdır. Hata çıkarsa eski imaj sürümüne dönmek de aynı basitlikte yapılır.
Konteynerlerin kullanım alanları ve sınırları
Konteynerler özellikle mikroservis mimarilerinde, CI/CD süreçlerinde, geliştirme ortamlarını standartlaştırmada ve bulut uygulamalarının taşınmasında kullanılır. Her servis kendi konteynerinde ve kendi bağımlılıklarıyla çalışabildiği için ekipler servisleri birbirinden bağımsız geliştirip yayınlayabilir.
Sınırlar da vardır:
- Veri kalıcılığı: konteyner silindiğinde içindeki veri kaybolur; kalıcı veri için volume gibi dış depolama kullanılır
- Güvenlik: imaj kaynağı güvenilir olmalı, gereksiz yetkiler verilmemeli, imajlar zafiyet taramasından geçirilmeli
- Yönetim karmaşıklığı: çok sayıda konteyner elle yönetilemez, bu noktada Kubernetes gibi orkestrasyon araçları devreye girer
- Çekirdek bağımlılığı: Linux konteyneri Linux çekirdeği ister, farklı çekirdek gerektiren iş yükleri için ayrı çözüm gerekir
Docker, konteyner ve Kubernetes ilişkisi
Docker, konteyner teknolojisini yaygınlaştıran araç ve şirkettir; imaj üretme, konteyner çalıştırma ve paylaşma işlerini kolaylaştırır. Konteyner ise bundan bağımsız, daha genel bir kavramdır ve başka araçlar da konteyner çalıştırabilir. Sektörde imaj ve çalışma zamanı biçimleri için ortak standartlar vardır.
Kubernetes konteyner çalıştırıcı değil, konteynerleri kümeler halinde yöneten orkestrasyon platformudur. Docker Compose ise birkaç konteynerden oluşan uygulamayı tek makinede tanımlamak için kullanılır. Yani sıra şöyledir: önce konteyner ve imaj mantığı öğrenilir, sonra çok konteynerli uygulamalar, en sonda küme düzeyinde orkestrasyon.
Konteyner teknolojisini Mindset programlarında nerede çalışırsınız?
Temel Docker Eğitimi programı Docker'a giriş, imaj ve konteyner yönetimi, Dockerfile ile özel imaj oluşturma, volume ve ağ yönetimi ile Docker Compose konularını içerir. Docker ve Container Teknolojileri programı 'Konteyner Teknolojisine Giriş' modülüyle başlar; registry ve imaj güvenliği ile üretim ortamı konularına ilerler.
Konteyner mantığını bir kez oturttuktan sonra Kubernetes ile orkestrasyon programı, çok sayıda konteynerin küme halinde nasıl yönetildiğini çalışmak için sonraki adım olarak düşünülebilir.
İlgili Mindset programı
Temel Docker Eğitimi
Sık sorulan sorular
Konteyner ve Docker aynı şey mi?
Hayır. Konteyner, uygulamayı yalıtılmış paket halinde çalıştırma fikri ve teknolojisidir. Docker ise bu teknolojiyi kolay kullanılır hale getiren, imaj üretme, çalıştırma ve paylaşma araçları sunan platformdur. Başka araçlar da konteyner çalıştırabilir; ancak Docker en yaygın başlangıç noktasıdır.
Konteyner sanal makineden daha mı güvenlidir?
Hayır, genelde sanal makine daha güçlü yalıtım sağlar çünkü her biri kendi işletim sistemini çalıştırır. Konteynerlerde çekirdek paylaşıldığı için güvenlik doğru yapılandırmaya bağlıdır: güvenilir imaj kullanmak, gereksiz yetki vermemek ve imajları taramak gerekir. Hassas iş yüklerinde bu yaklaşımlar birleştirilebilir.
Konteyner içindeki veri kalıcı mıdır?
Varsayılan olarak değildir. Konteyner silindiğinde ya da yeniden oluşturulduğunda yazılan veri kaybolur. Kalıcılık için veri, konteynerin dışındaki bir volume ya da ağ depolamasında tutulur. Veritabanı gibi durumlu uygulamaları konteynerde çalıştırırken bu ayrım özellikle önemlidir.
Konteyner öğrenmek için nereden başlanmalı?
Önce temel kavramlar öğrenilir: imaj, konteyner, registry. Ardından basit bir uygulamayı Dockerfile ile paketleyip çalıştırmak iyi bir alıştırmadır. Sonra volume ve ağ, daha sonra Docker Compose ile çok konteynerli uygulamalar gelir. Orkestrasyon ve Kubernetes bu temel oturduktan sonra anlam kazanır.