Docker Kavramları

Mert KILIÇASLAN
5 min readAug 6, 2023

--

Docker, containerleştirme teknolojisi sayesinde yazılım uygulamalarını izole edilmiş ortamlarda çalıştırmamızı sağlar. Yazılım geliştiricilerin uygulamalarını daha hızlı, taşınabilir ve ölçeklenebilir bir şekilde oluşturmasına ve dağıtmasına yardımcı olur.

Bu blog yazısında, her bir kavramı ayrıntılı bir şekilde açıklayacak ve örnek komutlarla nasıl kullanıldığını öğreneceğiz.

  1. Container

Docker Container, uygulamaların ve tüm bağımlılıklarının izole edilmiş bir ortamda çalıştırıldığı hafif ve taşınabilir bir yapıdır. Containerization sayesinde, uygulama ve altyapı arasındaki bağımlılıklar minimuma indirilir ve uygulamaların farklı ortamlarda tutarlı bir şekilde çalışması sağlanır.

Docker Container, bir sanal makinede olduğu gibi kendi işletim sistemi çekirdeğine sahip değildir. Bunun yerine, ana makinedeki çekirdek paylaşılır ve containerların üzerine uygulamaların çalışması için gereken kütüphaneler ve dosyalar eklenir.

Docker Image’den Container Çalıştırma

docker run <options> <image_name>
docker run -d -p 8080:80 nginx

Çalışan Konteynerleri Listeleme

docker ps

Tüm Konteynerleri Listeleme (Çalışan ve Durdurulmuş)

docker ps -a

Konteyneri Başlatma

docker start <container_id / container_name>
docker start mert_container

Konteyneri Durdurma

docker stop <container_id / container_name>
docker stop mert_container

Konteyneri Silme

docker rm <container_id / container_name>
docker rm mert_container

Çalışan Konteynerlerde Komut Çalıştırma

docker exec <options> <container_id veya container_name> <komut>
docker exec -it my_container bash

Konteynerin Loglarını Görüntüleme

docker logs <container_id / container_name>
docker logs mert_container

Konteyneri Dışardan Bir Porta Yönlendirme

docker run -p <host_port>:<container_port> <image_name>
docker run -p 8080:80 nginx

Konteynerin İçine Dosya Kopyalama

docker cp <host_file> <container_id / container_name]:<container_path>
docker cp app.py mert_container:/app

Çalışan Konteynerlerin Kaynak Kullanımını Görüntüleme

docker stats

2. Image

Docker Image, her şeyi içeren bir pakettir: uygulama kodu, çalıştırılabilir dosyalar, kütüphaneler, ortam değişkenleri ve gereksinim duyulan tüm dosyalar. Bu görüntüler, uygulamaların bağımsız bir şekilde çalışmasını ve farklı ortamlarda (geliştirme, test ve üretim gibi) aynı şekilde davranmasını sağlar.

Docker Imageler, “Dockerfile” adı verilen bir dosya kullanılarak oluşturulur. Dockerfile, adım adım talimatlar dizisi içerir ve bir Docker Image’inın nasıl oluşturulacağını tanımlar. Dockerfile’ı oluşturarak, uygulamanızın gereksinimlerini belirleyebilir, uygulama kodunuzu ekleyebilir, bağımlılıklarınızı yükleyebilir ve container’ın çalıştıracağı komutları belirleyebilirsiniz. Ardından, Dockerfile’ı kullanarak Docker Image’inizi oluşturabilirsiniz.

Docker Image’lar, katmanlı bir yapıya sahiptir. Her Docker Image katmanı, Dockerfile’daki talimatların bir sonucu olarak oluşturulan değişiklikleri temsil eder. Katmanlı yapı sayesinde, farklı Docker Imageler arasında benzer katmanları paylaşabiliriz. Bu da daha az disk alanı kullanımı ve daha hızlı image oluşturma ve dağıtma süreçleri sağlar.

Docker Imageler, Docker Hub gibi Public ve Private Docker Registry’lerde depolanabilir ve paylaşılabilir. Docker Hub, en popüler ve yaygın kullanılan Public Docker Image depolama ve paylaşım platformudur. Private Docker Registry’ler, kendi private Docker Image’lerinizi depolamak ve güvenli bir şekilde paylaşmak için kullanılabilir.

docker build: Docker Image oluşturmak için kullanılır. Bir Dockerfile’ı alır ve ona göre Docker Image’ını oluşturur.

docker build -t mert_image:latest .

docker images: Sistemdeki mevcut Docker Image’ları listelemek için kullanılır.

docker images

docker pull: Docker Registry’den (default olarak Docker Hub) bir Docker Image çekmek için kullanılır.

docker pull ubuntu:latest

docker push: Oluşturduğunuz veya güncellediğiniz/değiştirdiğiniz Docker Image’ı Docker Registry’ye göndermek için kullanılır.

docker push mertkilicaslan/medium-blog:latest

docker rmi: Bir Docker Image’ı silmek için kullanılır.

docker rmi mert_image:latest

docker tag: Varolan bir Docker Image’a etiket eklemek için kullanılır. Bu, Docker Image’ı farklı bir etiketle tekrar adlandırmak için de kullanılabilir.

docker tag mert_image:latest mert_image:v1.0

docker inspect: Bir Docker Image hakkında ayrıntılı bilgileri görüntülemek için kullanılır.

docker inspect mert_image:latest

docker history: Bir Docker Image’ın katmanlarını ve boyutunu görüntülemek için kullanılır.

docker history mert_image:latest

3. Volume

Docker Volume, Docker container’ların dışında bulunan ve kalıcı veri saklamak için kullanılan bir mekanizmadır. Docker Volume’ler, containerlardan bağımsız olarak yönetilir. Containerlar silindiğinde veya yeniden başlatıldığında verilerin silinmesini önlerler.

docker volume create: Yeni bir Docker Volume oluşturmak için kullanılır.

docker volume create mert_volume

docker volume ls: Sistemdeki mevcut Docker Volume’ları listelemek için kullanılır.

docker volume ls

docker volume inspect: Bir Docker Volume hakkında ayrıntılı bilgileri görüntülemek için kullanılır.

docker volume inspect mert_volume

docker volume rm: Bir Docker Volume’ı silmek için kullanılır.

docker volume rm mert_volume

docker volume prune: Kullanılmayan (hiçbir konteyner tarafından kullanılmayan) Docker Volume’ları temizlemek için kullanılır.

docker volume prune

Docker Volume’ü container ile ilişkilendirme

docker run -d -v <volume_adı>:<container_path> <image_adı>
docker run -d -v mert_volume:/path/to/mount mert_image:latest

4. Network

Docker Network, Docker containerlar arasında iletişim kurmayı ve dış dünya ile etkileşimde bulunmayı sağlayan sanal bir ağdır. Docker, çeşitli network drive ve modları aracılığıyla containerlara bağlanan farklı network oluşturabilir. Containerların network trafiği izole edilir, bu da güvenliği ve performansı artırır.

docker network create: Yeni bir Docker Network oluşturmak için kullanılır.

docker network create mert_network

docker network ls: Sistemdeki mevcut Docker Network’leri listelemek için kullanılır.

docker network ls

docker network inspect: Bir Docker Network hakkında ayrıntılı bilgileri görüntülemek için kullanılır.

docker network inspect mert_network

docker network rm: Bir Docker Network’ü silmek için kullanılır.

docker network rm mert_network

docker network connect: Bir çalışan bir container’ı mevcut bir Docker Network’e bağlamak için kullanılır. Böylece, container, belirtilen Docker Network içinde diğer containerlar ile iletişim kurabilir.

docker network connect mert_network mert_container

docker network disconnect: Bir çalışan bir container’ı mevcut bir Docker Network’ten ayırmak için kullanılır.

docker network disconnect mert_network mert_container

docker network prune: Kullanılmayan (hiçbir container tarafından kullanılmayan) Docker Network’leri temizlemek için kullanılır.

docker network prune

5. Docker Daemon

Docker Daemon, Docker nesnelerini yöneten temel arka plan hizmetidir. Kullanıcı tarafından doğrudan etkileşime girilemez. Docker Daemon, Docker API’larını dinler ve Docker CLI veya diğer araçlar tarafından yapılan isteklere yanıt verir.

Docker Daemon, Docker CLI veya diğer istemci araçlarından gelen talepleri dinler ve Docker Image’lerini yönetir, containerları oluşturur, çalıştırır, durdurur ve siler. Ayrıca, Docker Volume’leri ve Docker Network’leri yönetir, logları izler ve Docker Hub veya Private Docker Registry’lerine Docker Image’lerini yükler ve çeker.

İstemci ve sunucu modeline dayanır ve istemciler Docker Daemon ile iletişim kurarak Docker komutlarını çalıştırır. Hypervisor’ ün tam karşılığına denk gelmektedir.

6. Docker CLI (Command-Line Interface)

Docker CLI, Docker Engine ile etkileşimde bulunmamızı sağlayan komut satırı arayüzüdür. Kullanıcılara Docker’ı yönetme ve kontrol etme imkanı verir.

CLI, Docker’in temel komutlarını içerir ve kullanıcıların container oluşturmasını, çalıştırmasını, durdurmasını, silmesini, Docker Image’lerini yönetmesini, Docker Network’lerini ve Docker Volume’lerini oluşturmasını ve daha birçok işlemi gerçekleştirmesini sağlar.

7. Docker Swarm

Docker Swarm, birden fazla Docker container’ı tek bir sanal çatı altında yönetme ve dağıtma yeteneği sağlayan bir container orchestration tool. Swarm, containerları birden fazla node’da çalıştırarak uygulamalarınızın yüksek erişilebilirlik ve ölçeklenebilirlik sağlamasına olanak tanır. Swarm, Docker containerlarını nodelara dağıtarak, uygulamalarınızın sürekli olarak çalışmasını sağlar.

Docker Swarm, Manager Node ve Worker Nodelardan oluşur. Manager Node, Swarm cluster’ı yöneten ve container dağıtımını koordine eden anahtar rolü oynar. Worker Nodelar ise uygulamaları çalıştıran ve ölçeklendiren düğümlerdir.

Docker Swarm, Docker CLI aracılığıyla yönetilir. Manager Node’a Docker CLI ile komutlar vererek containerlar oluşturabilir, çalıştırabilir, durdurabilir ve yeniden başlatabilirsiniz. Swarm, containerları Manager Node’dan, Worker Nodelara dağıtarak yükü dengeler ve ölçeklendirir.

--

--