Docker Kavramları
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.
- 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.