Docker, uygulamaları izole edilmiş ve taşınabilir ortamlarda çalıştırmanızı sağlayan güçlü bir platformdur. Geliştirme, test ve üretim ortamları arasında tutarlılık sağlayarak “benim makinemde çalışıyordu” gibi yaygın sorunların önüne geçer.
Docker Image Nedir?
Bir Docker Image, uygulamaları çalıştırmak için gereken her şeyi (kod, çalışma zamanı, sistem araçları, kütüphaneler ve ayarlar) içeren salt okunur bir şablondur. Onu bir yazılımın “kalıbı” veya “paketlenmiş hali” olarak düşünebilirsiniz. Örneğin, bir MySQL image’i içinde MySQL veritabanı sunucusunu çalıştırmak için gereken tüm bileşenleri barındırır.
- İçerik: Genellikle minimal bir işletim sistemi (çoğunlukla Linux dağıtımı), kütüphaneler, bağımlılıklar, uygulama kodu ve uygulamanın tüm konfigürasyonlarını içerir.
- Taşınabilirlik: Image’ler, Docker kurulu herhangi bir sistemde tutarlı bir şekilde çalıştırılabilir.
- Katmanlı Yapı: Image’ler, verimli depolama ve yeniden kullanılabilirlik sağlayan üst üste yığılmış katmanlardan oluşur.
Docker Image’ler Nerede Bulunur?
Docker Image’leri, merkezi depolama alanlarında tutulur. Bu depolama alanlarına Registry denir. En bilinen ve kullanılan registry Docker Hub‘dır.
- Docker Hub: Binlerce resmi ve topluluk tarafından oluşturulmuş image’i barındıran en büyük genel registry’dir. Çoğu popüler yazılımın (Ubuntu, Node.js, MongoDB vb.) resmi image’leri burada bulunur.
- Özel Registry’ler: Kuruluşlar, kendi özel uygulamaları için image’leri barındırmak üzere kendi özel Docker registry’lerini de kurabilirler.
- Bulut Sağlayıcıların Registry’leri: AWS ECR (Elastic Container Registry), Google Container Registry (GCR) ve Azure Container Registry (ACR) gibi bulut hizmet sağlayıcıları da kendi yönetilen container image registry hizmetlerini sunar.
Docker Container Nedir?
Bir Docker Container, bir Docker Image’inin çalışan bir örneğidir. Image pasif bir şablonken, container bu şablonun “çalıştırılmış” halidir. Bir container’ı, kendi izole edilmiş ortamında çalışan bir işlem (process) olarak düşünebilirsiniz.
- İzolasyon: Her container, ana bilgisayardan ve diğer container’lardan izole edilmiş kendi dosya sistemi, ağ ve işlem alanına sahiptir. Bu, çakışmaları önler ve güvenlik sağlar.
- Hafiflik: Geleneksel sanal makinelerin aksine, container’lar ana bilgisayarın işletim sistemi çekirdeğini paylaşır. Bu da onları çok daha hafif ve hızlı başlatılabilir yapar.
- Geçicilik: Container’lar genellikle geçicidir. Bir container durdurulduğunda veya silindiğinde, içinde yapılan değişiklikler varsayılan olarak kalıcı olmaz (veri persistency için farklı mekanizmalar kullanılır).
Docker Hub Kullanımı ve Image Çekme
Docker Hub, geliştiricilerin ve şirketlerin Docker image’lerini keşfetmeleri, paylaşmaları ve depolamaları için merkezi bir konumdur.
Docker Hub’dan Image Çekme (Pull):
Docker Hub’daki bir image’i kendi Docker ortamınıza indirmek için docker pull
komutunu kullanırsınız. Bu komut, belirtilen image’in en son sürümünü (tag belirtilmezse latest
tag’i çekilir) yerel Docker host’unuza indirir.
Örnekler:
- Ubuntu işletim sistemi image’ini indirme:
docker pull ubuntu
- Node.js çalışma zamanı image’ini indirme:
docker pull node
- MongoDB veritabanı image’ini indirme:
docker pull mongo
Belirli Bir Sürümü Çekme (Tag Kullanımı):
Bir image’in belirli bir sürümünü indirmek isterseniz, image adının sonuna :
ile sürüm etiketini (tag) eklersiniz.
docker pull ubuntu:22.04 # Ubuntu 22.04 LTS sürümünü çeker
docker pull node:18-alpine # Node.js'in Alpine tabanlı 18. sürümünü çeker
Docker Image’leri Çalıştırmak
Bir image’i bir container olarak çalıştırmak için docker run
komutunu kullanırız. Bu komut, belirtilen image’den yeni bir container oluşturur ve onu başlatır.
docker run ubuntu
Bu komutu her çalıştırdığınızda, yeni bir Ubuntu container’ı oluşturulur ve başlatılır. Yani, yukarıdaki komutu iki kez çalıştırırsanız, iki ayrı Ubuntu container’ınız olacaktır.
docker run
komutu, çalışma şekli açısından akıllıdır:
- İlk olarak, belirtilen image’i yerel Docker ortamınızda arar.
- Eğer image yerelde bulunamazsa, otomatik olarak Docker Hub’dan (veya yapılandırılmış başka bir registry’den)
pull
etmeye çalışır. - Image bulunduğunda (ister yerelde isterse pull edildikten sonra), image’den yeni bir container oluşturur ve çalıştırır.