- Docker ve konteyner nedir?
- Temel kavramlar: imaj, konteyner, Dockerfile, registry
- Bir uygulamayı adım adım konteynerleştirmek
- Volume, ağ ve Compose ile çok servisli uygulamalar
- Sık yapılan hatalar
- Güvenli ve temiz imaj için hangi pratikler izlenir?
- CI/CD sürecine Docker nasıl bağlanır?
- Öğrenme yolu ve Mindset bağlantısı
- Sık sorulan sorular
Docker ile Uygulama Konteynerleştirme Nasıl Yapılır?
Docker ile uygulama konteynerleştirmeyi öğrenin: imaj ve konteyner mantığı, Dockerfile, volume, ağ, Compose, sık hatalar ve öğrenme yolu.
Docker ve konteyner nedir?
Docker, uygulamaları geliştirmek, taşımak ve çalıştırmak için kullanılan açık bir platformdur. Uygulamanızı bağımlılıklarıyla birlikte bir konteynere paketler; böylece uygulama geliştirici bilgisayarında, test ortamında ve sunucuda aynı şekilde çalışır. Resmî dokümantasyon, konteyneri bir imajın çalıştırılabilir örneği olarak tanımlar.
Bu yaklaşım, "benim bilgisayarımda çalışıyordu" sorununu büyük ölçüde ortadan kaldırır. Ortam farklılıkları imajın içinde sabitlendiği için dağıtım tekrarlanabilir hale gelir.
Bir geliştirme ekibi için bu, yeni gelen kişinin ortam kurulumuyla saatler harcamak yerine tek komutla çalışan bir ortama kavuşması anlamına gelir. Operasyon tarafında ise aynı imajın test ve üretimde kullanılması, sürüm hatalarını azaltır.
Docker öğrenmenin güzel yanı, kısa sürede somut sonuç alınabilmesidir. İlk gün bir uygulamayı konteynerde çalıştırdığınızda temel mantığı görürsünüz; sonraki günler bu temeli güvenlik, otomasyon ve ölçeklemeye taşımakla geçer.
Temel kavramlar: imaj, konteyner, Dockerfile, registry
İmaj, bir konteyner oluşturmak için talimatlar içeren salt okunur şablondur. Konteyner, bu imajın çalışan örneğidir; oluşturabilir, başlatabilir, durdurabilir ve silebilirsiniz. Kalıcı depolamaya kaydedilmeyen veriler konteyner silindiğinde kaybolur, bu önemli bir nokta.
Dockerfile, imajın hangi adımlarla oluşturulacağını tanımlayan metin dosyasıdır. Her talimat bir katman ekler ve değişiklik sonrası yeniden derlemede yalnızca değişen katmanlar yeniden oluşturulur. Registry ise imajların saklandığı yerdir; herkese açık varsayılan örnek Docker Hub'dır, özel bir registry de kurulabilir.
Bir uygulamayı adım adım konteynerleştirmek
Sıra genellikle şöyledir:
- Uygulamanın çalışması için gereken çalışma ortamını, bağımlılıkları ve başlatma komutunu belirleyin.
- Uygun bir temel imaj seçip Dockerfile'ı yazın: bağımlılıkları kurun, uygulama dosyalarını kopyalayın, başlatma komutunu tanımlayın.
- İmajı derleyin ve yerelde bir konteyner olarak çalıştırın.
- Ayarları imaja gömmek yerine ortam değişkenleriyle dışarıdan verin.
- Kalıcı veri gerekiyorsa volume tanımlayın.
- Çalışan imajı registry'ye gönderin.
Bu akışı küçük bir web uygulamasıyla uçtan uca denemek, kavramları ezberlemekten çok daha öğreticidir.
Başlangıç için küçük bir örnek seçin: tek sayfalık bir web uygulaması. Dockerfile'ı yazın, imajı derleyin, konteyneri çalıştırıp tarayıcıdan erişin, sonra kodu değiştirip imajı yeniden derleyin. Bu döngüyü birkaç kez tekrarlamak, katman ve önbellek mantığını doğal olarak öğretir. Ardından veritabanı ekleyerek çok servisli yapıya geçebilirsiniz.
Volume, ağ ve Compose ile çok servisli uygulamalar
Gerçek uygulamalar genellikle birden fazla servisten oluşur: bir web servisi, bir veritabanı, belki bir önbellek. Veritabanı gibi servislerin verisi konteyner ömründen bağımsız korunmalıdır; bunun yolu volume kullanmaktır. Servislerin birbirini bulabilmesi için ise Docker ağı tanımlanır.
Docker Compose, birden çok konteynerden oluşan uygulamaları tek bir yapılandırma dosyasıyla tanımlayıp birlikte başlatmayı sağlayan istemcidir. Geliştirme ortamını tek komutla ayağa kaldırmak, ekipler için büyük zaman kazancıdır.
Ağ tarafında temel fikir, aynı ağdaki konteynerlerin birbirini servis adıyla bulabilmesidir. Bu sayede uygulama kodunda sabit adres yazmak yerine servis adı kullanılır. Dışarıya hangi bağlantı noktalarının açılacağını bilinçli seçmek ise hem güvenlik hem düzen açısından önemlidir. Geliştirme ve üretim için ayrı yapılandırma dosyaları tutmak da yaygın bir pratiktir.
Sık yapılan hatalar
En sık hatalardan biri, konteynerin içinde veri tutup volume tanımlamamaktır; konteyner silinince veri de gider. İkincisi, parola ve anahtar gibi gizli bilgileri imajın içine yazmaktır. İmaj paylaşıldığında bu bilgiler de paylaşılmış olur.
Bir diğer hata, gereksiz büyük temel imajlar ve katmanlar yüzünden şişkin imajlar üretmektir. Dockerfile talimat sırası da önemlidir; sık değişen dosyaları geç kopyalamak, önbellekten yararlanmayı kolaylaştırır. Son olarak, tek bir konteynerde birden çok ilgisiz servisi çalıştırmaya çalışmak yönetimi zorlaştırır.
Bir başka sık görülen sorun, konteyneri sanal makine gibi düşünüp içine bağlanarak elle değişiklik yapmaktır. Konteyner geçici kabul edilmeli, değişiklikler Dockerfile ya da yapılandırma yoluyla tekrarlanabilir biçimde yapılmalıdır.
Güvenli ve temiz imaj için hangi pratikler izlenir?
İmaj güvenliği ve boyutu birlikte düşünülür. Gereksiz paketleri içermeyen küçük bir temel imaj seçmek, hem saldırı yüzeyini hem imaj boyutunu azaltır. Çok aşamalı derleme, derleme araçlarını son imajın dışında tutarak temiz bir sonuç elde etmenizi sağlar.
Konteyneri mümkün olduğunca ayrıcalıksız bir kullanıcıyla çalıştırın, gizli bilgileri imaja yazmayın ve imajları güvenilir kaynaklardan çekin. İmajları düzenli olarak güncellemek ve tarayıcı araçlarla zafiyet kontrolü yapmak da işletme alışkanlığının parçası olmalıdır.
CI/CD sürecine Docker nasıl bağlanır?
Sürekli entegrasyon sürecinde her kod değişikliğinde uygulama imajı otomatik derlenir, testler konteyner içinde çalıştırılır ve başarılı imaj registry'ye gönderilir. Böylece testte çalışan imajın aynısı üretime gider; ortam farkından doğan sürprizler azalır.
İmajları anlamlı etiketlerle sürümlemek önemlidir. Hangi imajın hangi koda karşılık geldiğini bilmek, geri dönüş ve hata ayıklamayı kolaylaştırır. Bu otomasyon, ekip büyüdükçe en çok değer üreten Docker kullanım alanlarından biridir.
Öğrenme yolu ve Mindset bağlantısı
Başlangıçta imaj ve konteyner komutlarını, ardından Dockerfile yazmayı öğrenin. Orta düzeyde volume, ağ ve Compose gelir. İleri düzeyde sürekli entegrasyon ve dağıtım süreçlerine Docker'ı bağlamak, ardından büyük ölçekte konteyner yönetimi için Kubernetes gibi araçlara geçmek mantıklı bir sıradır.
Temel Docker Eğitimi, Docker'a giriş ve temel kavramlar, imaj ve konteyner yönetimi, Dockerfile ile özel imaj oluşturma, volume ve ağ yönetimi, Compose ile çoklu servis yönetimi ve CI/CD entegrasyonu modüllerini içerir.
İlgili Mindset programı
Temel Docker Eğitimi
Sık sorulan sorular
Docker ile sanal makine arasındaki fark nedir?
Konteynerler, sanal makinelerin aksine her biri için ayrı bir işletim sistemi çalıştırmaz; ana makinenin çekirdeğini paylaşırken izole çalışır. Bu nedenle genellikle daha hafif ve hızlı başlar. Yalıtım ve güvenlik özellikleri ise kullanım senaryosuna göre değerlendirilmelidir. Bu fark, aynı makinede çok sayıda konteyneri düşük kaynakla çalıştırmayı mümkün kılar; ancak yalıtım ihtiyacı çok yüksekse sanal makine hâlâ tercih edilebilir.
Dockerfile nedir?
Bir imajın hangi adımlarla oluşturulacağını tanımlayan metin dosyasıdır. Temel imajı, kopyalanacak dosyaları, kurulacak bağımlılıkları ve başlatma komutunu içerir. Aynı Dockerfile ile imaj her seferinde aynı biçimde derlenebildiği için dağıtım tekrarlanabilir olur. Kısaca Dockerfile, uygulamanızın nasıl paketleneceğini belgeleyen bir tarif gibidir ve ekip arkadaşlarınız aynı tarifi kullanarak aynı sonucu elde eder.
Docker Compose ne zaman gerekir?
Uygulamanız birden fazla servisten oluşuyorsa, örneğin web uygulaması ve veritabanı, Compose bunları tek bir dosyada tanımlayıp birlikte yönetmenizi sağlar. Tek konteynerlik basit uygulamalar için çoğu zaman gerekmez. Geliştirme ortamında Compose ile tüm servisleri tek komutla başlatıp durdurabilmek, ekip içinde ortak çalışma düzenini de kolaylaştırır.
Konteyner silinirse verilerim kaybolur mu?
Kalıcı depolamaya kaydedilmeyen veriler kaybolur. Önemli verileri korumak için volume kullanmalısınız. Volume konteynerin ömründen bağımsız yaşar ve konteyner yeniden oluşturulsa da veri saklanır. Bu yüzden veritabanı dosyaları ve yüklenen belgeler gibi kalıcı olması gereken her veri için volume tanımlamayı alışkanlık haline getirin.
Docker öğrenmek için hangi ön bilgiler gerekir?
Komut satırı kullanımı ve temel Linux bilgisi büyük kolaylık sağlar. Ayrıca çalıştırmak istediğiniz uygulamanın kendi gereksinimlerini bilmek gerekir. Programlama uzmanlığı şart değildir ama yapılandırma dosyalarını okuyabilmelisiniz. Başlangıç için bir metin düzenleyiciyle yapılandırma dosyası yazabilmek ve bir terminalde birkaç komut çalıştırabilmek yeterlidir.
Docker ile Kubernetes birlikte mi kullanılır?
Sıklıkla evet. Docker uygulamayı imaj olarak paketleyip konteyner halinde çalıştırmanıza yardım eder; Kubernetes ise çok sayıda konteyneri bir kümede düzenler ve ölçekler. Küçük projeler Docker ve Compose ile yetinebilir. Büyüyen sistemlerde düzenleme ihtiyacı ortaya çıktığında Kubernetes gündeme gelir. Küçük projelerde Docker ve Compose çoğu zaman yeterlidir; sorumluluk büyüdüğünde Kubernetes devreye girer.