Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Docker image, bir uygulamayı çalıştırmak için gereken dosyaları, bağımlılıkları ve varsayılan komutları içeren salt-okunur şablondur. Container ise bu image kullanılarak oluşturulan ve çalışan ya da durdurulmuş durumdaki uygulama örneğidir. Kısaca image kalıp, container ise o kalıptan oluşturulan çalıştırılabilir örnektir.

Bir image tek başına çalışan bir süreç değildir. docker run komutu image'ı kullanarak yeni bir container oluşturur; container'a ayrı bir isim, ağ, ortam değişkenleri ve yazılabilir geçici katman verir.

Temel farklar​


Image genellikle paylaşılır, sürümlenir ve değiştirilmeden saklanır. Container ise image'ın belirli bir çalıştırma örneğidir. Aynı image'dan birden fazla container oluşturulabilir; her biri farklı port, isim veya ayarla çalışabilir.

ÖzellikDocker imageContainer
GöreviÇalışma ortamı şablonunu taşırUygulamayı çalıştırır
DurumuSalt-okunur katmanlardan oluşurÇalışan veya durmuş olabilir
OluşturmaDockerfile'dan derlenebilir veya registry'den indirilebilirImage ile docker run kullanılarak oluşturulur
VeriUygulama dosyalarını içerirGeçici yazma katmanına ve bağlanan volume'lere sahip olabilir

Container silinirse yalnızca container'ın yazılabilir katmanındaki veriler kaybolabilir. Kalıcı veriler için volume veya sunucudaki bind mount kullanılmalıdır. Çalışan container içinde sonradan yazılan dosyalar temel image'ı değiştirmez; yalnızca ilgili container'ın geçici katmanında tutulur.

Somut örnek: Bir image'dan container çalıştırmak​


Önkoşul olarak Docker Engine kurulmuş ve Docker daemon çalışıyor olmalıdır. Aşağıdaki örnek, Nginx image'ını indirir, web-demo adlı bir container başlatır ve sunucunun yalnızca yerel adresindeki 8080 portundan erişime açar.

  1. Nginx image'ını indirin ve container'ı arka planda başlatın:
    Kod:
    docker run -d --name web-demo -p 127.0.0.1:8080:80 nginx
    Başarılı olursa Docker bir container kimliği döndürür. Image yerel makinede yoksa önce registry'den indirilir.
  2. Container'ın çalıştığını kontrol edin:
    Kod:
    docker ps
    curl http://127.0.0.1:8080
    docker ps çıktısında web-demo görünmeli, curl ise Nginx'in HTML yanıtını döndürmelidir.
  3. Container'ın hangi image'dan oluşturulduğunu inceleyin:
    Kod:
    docker inspect --format '{{.Config.Image}}' web-demo
    Çıktı nginx olmalıdır. Bu, çalışan container ile onu oluşturan image arasındaki ilişkiyi gösterir.
  4. İşiniz bittiğinde container'ı durdurup kaldırın:
    Kod:
    docker rm -f web-demo

Sonuç beklenenden farklıysa​


docker ps içinde container görünmüyorsa docker ps -a ile durmuş container'ları da listeleyin. Container hemen kapanıyorsa, image'ın varsayılan komutu tamamlanmış veya hata vermiş olabilir; docker logs web-demo ile kayıtları inceleyin. 8080 portu kullanımda ise başka bir host portu seçin; örneğin -p 127.0.0.1:8081:80. Bu durumda erişim adresi de 8081 olur.

Güncel Docker’ın varsayılan bridge düzeninde 127.0.0.1 yayını erişimi hostla sınırlar. Docker’ın 28.0.0 öncesi sürümlerinde aynı yerel ağ segmentinden erişim istisnası belgelendiğinden eski bir kurulumu yalnız bu ayara güvenerek yalıtılmış saymayın. Dışarıdan erişim gerekiyorsa port eşlemesindeki host adresi ayrıca değerlendirilmelidir; yalnızca portu değiştirmek uygulamanın container içindeki dinleme portunu değiştirmez.

Karar verirken dikkat edilmesi gerekenler​


  1. Uygulamanın çalıştırılabilir paketine ihtiyaç duyuyorsanız image seçin veya Dockerfile ile image oluşturun.
  2. Uygulamayı başlatmak, durdurmak, yeniden başlatmak ve ağa bağlamak için container yönetin.
  3. Aynı uygulamanın birden fazla örneği gerekiyorsa aynı image'dan ayrı container'lar oluşturun; her birine farklı isim ve çakışmayan host portu verin.
  4. Veritabanı veya yüklenen dosyalar gibi kalıcı verileri container'ın geçici yazma katmanına bırakmayın; volume ya da uygun bir bind mount kullanın.
  5. Üretimde image etiketini ve yapılandırmayı bilinçli seçin. Değişebilen bir etiket yerine doğrulanabilir bir sürüm veya digest kullanmak, aynı image'ın tekrar çalıştırılmasına yardımcı olur.

En sık yapılan hata, container silinince image'ın da silindiğini sanmaktır. docker rm container'ı kaldırır; image'ı kaldırmaz. Image'ı ayrıca silmek için docker rmi kullanılır. Tersine, image'ı silmeye çalışırken onu kullanan container varsa Docker işlemi reddedebilir; önce ilgili container'ların durumunu kontrol etmek gerekir.

Bir başka hata da image içindeki dosyaları kalıcı depolama sanmaktır. Image yeniden oluşturulduğunda veya container yenilendiğinde container katmanındaki değişiklikler otomatik olarak yeni image'a aktarılmaz. Kalıcı olması gereken dosyaları volume'e taşıyın ve uygulamanın hangi dizine yazdığını doğrulayın.

Kaynaklar​



Sık sorulan sorular​


Bir image'dan aynı anda birden fazla container çalıştırılabilir mi?​

Evet. Her container kendi kimliğine ve çalışma durumuna sahip olur. Aynı host IP’si, port ve protokol birleşimini iki ayrı yayın aynı anda kullanamaz. Port yayınlamayan container’ların ise sırf çoğaltıldıkları için host portu ayırması gerekmez.

Container durdurulunca image silinir mi?​

Hayır. Durdurulan container yerel olarak kalabilir ve yeniden başlatılabilir. Image da ayrıca saklanır; container ile image birbirinden bağımsız olarak yönetilir.

Dockerfile ile image arasındaki ilişki nedir?​

Dockerfile, image'ın nasıl oluşturulacağını tarif eden metin dosyasıdır. docker build çalıştırıldığında Dockerfile'daki adımlar uygulanır ve sonucunda yeni bir image üretilir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic