Introducing Docker Swarm

DevopsThunder
4 min readJan 16, 2024

--

Merhaba,

Bu yazımızda Docker Swarm’ın tanımını yapacak, sunduğu avantajları inceleyecek, kullanılan komutlara göz atacak ve basit bir örnek ile Docker Swarm’ı inceleyeceğiz.

Docker Swarm

Docker Swarm, docker uygulamalarını küme halinde yöneten ve dağıtan bir orkestrasyon aracıdır. Bu platform, büyük sistemlerin etkili bir şekilde yönetilmesini sağlar, konteyner uygulamalarını kolayca orkestre edip yüksek erişilebilirlik ve otomatik ölçeklendirme gibi avantajları sunar. Docker Swarm, basit kullanımı ve Docker ekosistemine entegrasyonuyla öne çıkar, büyük ölçekli konteyner tabanlı uygulamaları güvenilir bir şekilde yönetmek için etkili bir çözümdür.

Docker Swarm kurulumu;

Docker Swarm için ayrı bir kurulum yapmanıza gerek yoktur. Docker Swarm, Docker Engine entegre bir container orkestrasyon çözümüdür. Docker kurulu bir makinede docker swarm init komutunu kullanarak aktif hale getirebilirsiniz.

docker swarm init

Docker Swarm kümesinde, rolleri yönetmek ve belirlemek için “manager” ve “worker” rolleri bulunmaktadır.

Swarm Manager, Docker Swarm kümesinin stratejik bir yöneticisi olarak görev alır. Kümenin genel yönetimi ve orkestrasyonunu sağlar, konteynerları etkili bir şekilde dağıtarak ve yönlendirerek iş yükünü optimize eder. Aynı zamanda, konteynerları yönetir, başlatır, durdurur ve durumlarını aktif bir şekilde takip eder. Yüksek kullanılabilirlik ve hata toleransını temin ederek, kümenin sürekli ve güvenilir bir şekilde çalışmasını sağlar. Güvenlik politikalarını belirleme ve uygulama yeteneği ile kümenin güvenliğini güvence altına alır, izolasyonu yönetir ve erişim kontrollerini düzenler. Swarm Manager, karmaşık görevleri üstlenirken kümenin performansını, sağlığını ve güvenliğini sürekli olarak optimize etme sorumluluğunu taşır.

Swarm Worker, Docker Swarm kümesindeki manager’ın komutları doğrultusunda çalışan konteynerları barındırma ve işletme. Konteynerları barındırma ve çalıştırma işlevselliğine odaklanır. Kümenin bir parçasıdır ve manager’ın komutlarına uygun olarak konteynerları yönetir. Yüksek seviyeli yönetim görevleriyle uğraşmaz; bunlar manager’ın sorumluluğundadır.

Not; Worker node aşağıdaki komut ile ihtiyaç duyulduğunda Manager node yapılabilir;

docker swarm promote <node_name>

Bir Docker Swarm kümesi genellikle bir veya birden fazla manager ve bir dizi worker içerir. Manager node’lar kluster durumunu yönetmek için Raft Consensus Algoritmasını uygular.

Not; Manager’lar kendi aralarında ve workerlarla iletişim kurabilir fakat worker nodler kendi aralarında iletişim kuramazlar.

Docker Swarm Komutları

docker swarm

Bu komut docker swarm’ı yönetmek ve kullanım alanlarını gösterir.

docker swarm init

bu komut bir docker Swarm klusterı oluşturur ve mevcut Docker Host’unu manager node olarak ayarlar. Hali hazırda bulunan node’umuzu manager node eklemek için aşağıdaki komutu kullanabiliriz.

docker swarm init - advertise-addr <ip_adresi>
docker info

bu komut Swarm klusterı hakkında genel bilgileri gösterir.

docker node ls

Node durumunu ve rollerini listelemek için yukarıdaki komutu kullanabiliriz

docker swarm join - token <token> <manager-ip>:<manager-port>

node’u swarm’a worker olarak dahil etmek için yukarıdaki komutu kullanabiliriz.

docker swarm update
Bu komut swarm clusterı içindeki hizmetlerin özelliklerini ve cluster yapılandırmalarını değiştirmek için kullanılır.
docker node
Bu komut cluster’da ki node’ları yönetmek ve hizmetleri bu node’lar üzerinde dağıtmak için kullanılır.
docker node ls

komutu ile cluster’da ki master ve worker node’ları listeleyebiliriz.

docker service create [OPTIONS] IMAGE [COMMAND] [ARG…]

komutuyla Swarm cluster’ında çalışacak bir hizmet başlatmak mümkündür.

docker node ps <service_name>

Komutu ile de cluster üzerinde çalışan container’ları listeleyebiliriz.

docker swarm leave - force

Komutu ile swarmı sonlandırıp inactive konumuna getirebiliriz.

Bir örnek ile Docker swarm’ı inceleyelim. Bu örneğimizde nginx kullanarak basit bir web hizmeti oluşturacağız.

Örneğimize başlamadan önce Docker swarm durumunu aşağıdaki komut ile kontrol etmeliyiz.

docker info
docker info komutu ile kontrol ettiğimizde Docker Engine gömülü olarak gelen Docker Swarm’ın inactive olduğunu görüyoruz.
docker swarm init
bu komutla docker swarm’ı aktif hale getiriyoruz. Tekrar ‘docker info’ komutu ile bakarak active olduğunu görüntüleyebiliriz.

Bu komut hem Swarm’ı aktif hale getirdi hem de default olarak 1 manager node ayarladı. Ayrıca Swarm cluster’ına katılmak için bir token yarattı.

docker node ls

Swarm cluster’ı oluşturuldu ve node’lar katıldı. Şimdi cluster üzerinde bir hizmeti dağıtmak için ‘docker service create’ komutunu kullanabiliriz.

Bu komut devopsthunder adında bir hizmet oluşturur ve bu hizmeti Swarm cluster’ında çalışan tüm düğümlere dağıtarak dış dünyadan 80 portu üzerinden erişebilir hale getirir.
docker service ls komutu cluster’da ki çalışan hizmetleri ve temel bilgilerini listeler
Oluşan servisin içinde çalışan containerları incelemek için ‘docker service ps <service_name>’ komutunu kullanarak daha ayrıntılı inceleyebiliriz.

Bu cluster servisinin içindeki containerın durması halinde dağıtılan web sayfası kesintiye uğrayacaktır. Swarm’ın ölçeklendirme (Scability) ve yük dağıtımı (load balancing) özelliklerini kullanarak daha yönetilebilir bir cluster yapısı oluşacaktır.

docker service update - replicas 5 <service_name>
Bu komut kullanılarak replica sayısı 5’e yükseltilecektir. Her replika farklı node’lara dağıtılarak yüksek kullanılabilirlik ve hata toleransı sağlayacaktır. docker service ls komutu ile 4 replicanın daha eklendiğini görebiliriz.
docker service ps <service_name> ile container durumlarını kontrol edebiliriz.
docker container ls komutu ile kontrol ettiğimizde 5 replicalı çalıştığını görebiliriz.
Docker swarm cluster’ını docker swarm leave komutu ile sonlandırabiliriz.

Bu örnekte, Docker Swarm’ın temel kullanımını anlatmaya çalıştım. Gerçek bir uygulama senaryosunda, kümenin boyutu ve karmaşıklığına bağlı olarak daha fazla yapılandırma ve yönetim detaylarına ihtiyaç duyabilirsiniz.

Teşekkürler.

DevopsThunder

--

--

DevopsThunder

DevOpsThunder: Cloud and Devops Marvels! 🚀 #DevOps #CloudTech