Docker Image
- Türkçe karşılığı
- docker imajı, konteyner imajı, kapsayıcı görüntüsü
- Okunuşu
- dokır imic
Günlük kullanımda iki ad da yaygın.
Kısaca
Docker image, bir uygulamayı, bağımlılıklarını ve ayarlarını içeren, salt okunur ve katmanlı bir pakettir; konteynerler bu şablondan başlatılır.
Docker image nedir?
Docker image (imaj), bir uygulamanın çalışmak için ihtiyaç duyduğu her şeyi taşır: kodunu, Node.js ya da Python gibi bir çalışma zamanını, sistem kütüphanelerini, dosyaları ve varsayılan komut, ortam değişkenleri ve dinlediği port gibi meta verileri. İmajlar salt okunurdur; postgres:17 gibi bir ad ve etiketle (tag) ve içeriklerinin SHA-256 özeti olan bir digest ile tanımlanır. Docker imajları Open Container Initiative (OCI) biçiminde oluşturur; bu yüzden aynı imaj containerd, Podman ve Kubernetes üzerinde de çalışır ve konteyner imajı (container image) diye de anılır.
Bir imaj, docker build ile bir Dockerfile'dan derlenir. COPY ya da RUN gibi dosyaları değiştiren her talimat, yalnızca bu değişiklikleri kaydeden bir katman ekler. Katmanlar önbelleğe alınır ve paylaşılır: aynı temel imaj üzerine kurulu on imaj o temeli yalnızca bir kez saklar; kod değiştikten sonra yapılan bir derleme de değişen adımdan önceki her katmanı yeniden kullanır. İmajlar Docker Hub gibi registry'ler üzerinden paylaşılır; tek bir imaj adı amd64 ve arm64 gibi birkaç işlemci mimarisini kapsayabilir.
Aradaki ilişki, programlamadaki bir sınıf ile nesneleri ya da bir kurabiye kalıbı ile kurabiyeler gibidir: imaj şablondur, her konteyner de ondan üretilmiş bir örnektir. Bir konteyner başladığında Docker imajın üstüne ince, yazılabilir bir katman ekler. Konteynerin değiştirdiği dosyalar bu katmana gider, imajın kendisi hiç değişmez ve aynı imajdan aynı anda birçok konteyner çalışabilir.
En yaygın karışıklık imaj ile konteyner arasındadır. İmaj, derleyip sakladığınız ve kopyaladığınız durağan bir çıktıdır; konteyner ise onun kendi süreçleri, yazılabilir katmanı ve ağı olan, çalışan ya da durdurulmuş bir örneğidir. Bir konteyneri silmek imajını silmez; bir konteynerin içinde yapılan değişiklikler de bir volume'a kaydedilmedikçe konteyner kaldırıldığında kaybolur. Dockerfile ise üçüncü bir şeydir: imajı üreten tarif.
Önemli noktalar
- Docker image, bir uygulamayı, bağımlılıklarını ve ayarlarını içeren salt okunur bir şablondur.
- Bir Dockerfile'dan katman katman derlenir; katmanlar önbelleğe alınır ve paylaşılır.
- Etiketler sürümleri adlandırır; digest ise tam içeriği tanımlar.
- İmajlar OCI biçimine uyar, bu yüzden uyumlu her çalışma zamanında çalışır.
- İmaj şablondur; konteyner onun çalışan bir örneğidir.
Örnek
# Build an image from the Dockerfile in this folder and tag it
docker build -t shop-api:1.0 .
# List local images and look at the layers of this one
docker image ls
docker history shop-api:1.0
# Start two independent containers from the same image
docker run -d --name api-1 -p 8081:3000 shop-api:1.0
docker run -d --name api-2 -p 8082:3000 shop-api:1.0
# Removing the containers leaves the image untouched
docker rm -f api-1 api-2
docker image ls shop-apiSık sorulan sorular
Docker image ile konteyner arasındaki fark nedir?
İmaj salt okunur bir şablondur; konteyner ise ondan oluşturulan, kendi yazılabilir katmanı olan çalışan bir örnektir. Bir imajdan birçok konteyner başlatabilirsiniz; onları kaldırmak imajı yerinde bırakır.
Docker imajları nerede saklanır?
Yerelde, Docker'ın makinenizde yönettiği depolamada; uzakta ise Docker Hub, GitHub Container Registry ya da bir bulut sağlayıcısının registry'si gibi, her sunucunun onları çekebildiği konteyner registry'lerinde.
Bir Docker imajını nasıl küçültebilirim?
Alpine, slim ya da distroless sürümü gibi küçük bir temel imajla başlayın, derleyiciler ve derleme araçları son imaja girmesin diye çok aşamalı (multi-stage) bir derleme kullanın ve imajın ihtiyaç duymadığı dosyaları .dockerignore içinde listeleyin.
İlgili sayfalar
- DockerDevOps ve Bulut, s. 16Docker, bir uygulamayı ve ihtiyaç duyduğu her şeyi, her makinede aynı şekilde çalışan bir konteyner içinde paketlemeye yarayan açık kaynaklı bir platformdur.
- KonteynerDevOps ve Bulut, s. 31Konteyner, bir uygulamayı bağımlılıklarıyla paketleyip ana makinenin paylaşılan işletim sistemi çekirdeği üzerinde çalıştıran hafif, yalıtılmış bir pakettir.
- Container RegistryDevOps ve Bulut, s. 11Container registry, konteyner imajları için bir depolama ve dağıtım hizmetidir; ekipler derlenmiş imajları push eder, onları çalıştıran her sunucuya pull eder.
- Docker ComposeDevOps ve Bulut, s. 17Docker Compose, web sunucusu ve veritabanı gibi birkaç container'dan oluşan uygulamaları tek bir YAML dosyası ve tek komutla tanımlayıp çalıştıran araçtır.
- PodDevOps ve Bulut, s. 43Pod, Kubernetes'te dağıtılabilen en küçük birimdir: ağ adresini ve depolamayı paylaşan, tek bir node'da birlikte zamanlanan bir ya da daha çok konteynerdir.
- Değiştirilemez AltyapıDevOps ve Bulut, s. 13Değiştirilemez altyapı, sunucuların dağıtımdan sonra hiç değiştirilmediği, her güncellemede yerlerine sıfırdan kurulan yenilerinin geldiği bir yaklaşımdır.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin