Yeni Başlayanlar İçin Docker Swarm

elifcan cakmak
Kod Gemisi
Published in
3 min readJul 21, 2017

Docker Swarm, Docker containerları için ortaya konulmuş bir kümeleme ve planlama aracı diyebiliriz. Docker Swarm ile containerlarınızı çok kolay bir şekilde çalıştırabilir, ölçeklendirebilir ve yönetebilirsiniz.

Bugünkü yazımızda basitçe Docker Swarm node’u ayaga kaldırmayı ve Docker Swarm’da örnek bir uygulama çalıştırmayı anlatacağız.

Ön Koşullar

  • Bir manager ve bir worker olmak üzere iki adet sunucu
  • İki sunucuda da Docker kurulu olması.

Docker Kurulumu

Aşağıdaki adımları izleyerek Docker’ı her iki sunucuya da kurabilirsiniz.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add — #GPG keyi eklemesudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” #Docker deposunu APT paket yöneticisi kaynaklarına eklemesudo apt-get updatesudo apt-get install docker-cesudo service docker status

Docker Swarm’u Başlatma

Manager olarak çalıştırmak istediğimiz makinada aşağıdaki komut ile Swarm’u başlatıyoruz.

docker swarm init --advertise-addr manager-ip-adresi

Bunun sonucunda bize aşağıdaki gibi bir çıktı veriyor:

Swarm initialized: current node (siqyf3yricsvjkzvej00a9b8h) is now a manager.To add a worker to this swarm, run the following command:docker swarm join \ --token SWMTKN-1–0eith07xkcg93lzftuhjmxaxwfa6mbkjsmjzb3d3sx9cobc2zp-97s6xzdt27y2gk3kpm0cgo6y2 \manager-ip-adresi:2377To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.

Bu çıktıda gördüğümüz şu komutu da worker olarak kullanmak istediğimiz makinada çalıştırıyoruz ve bu node’a katılmasını sağlıyoruz:

docker swarm join \ --token SWMTKN-1–0eith07xkcg93lzftuhjmxaxwfa6mbkjsmjzb3d3sx9cobc2zp-97s6xzdt27y2gk3kpm0cgo6y2 \manager-ip-adresi:2377

Eğer Swarm’u çalıştıralı üzerinden zaman geçtiyse ve bu komuta tekrar ihtiyacınız olduysa aşağıdaki komutla erişebilirsiniz:

docker swarm join-token manager

Swarm içerisindeki makinaları görmek için aşağıdaki komutu kullanabilirsiniz:

docker node ls

Bununla birlikte Swarm’u birden fazla node ile çalıştırmak gibi bir zorunluluk yoktur. Tek node ile de çalıştırabilirsiniz.

Docker Swarm Temel Komutlar

docker service create --replicas 1 --name helloworld alpine ping docker.com #servis oluştururdocker service ls #servisleri listelerdocker service inspect --pretty helloworld #oluşturduğumuz servis hakkında bilgi verir
docker service inspect — pretty helloworld
docker service scale helloworld=5 #servisi ölçeklendirir (örneğin burada 5 container oluşturuyor)docker service ps helloworld #servisin bütün containerlarını listeler
docker service ps helloworld
docker service rm helloworld #servisi silerdocker service update --image redis:3.0.7 redis #servisi güncellerdocker node inspect --pretty manager #swarm node’unun bilgilerini verir

Docker Swarm Network Oluşturma

Docker Swarm’da network, swarm içerisindeki docker servislerinin birbirleriyle iletişim kurmalarını sağlar. Örneğin elimizde bir mikroservis uygulaması varsa, bu uygulamaların containerlarını tek bir network’te çalıştırarak birbirleriyle konuşmalarını sağlayabilirsiniz. Network oluşturmak için aşağıdaki komutu kullanabilirsiniz.

docker network create --driver overlay mynetwork

Docker Swarm’da Servis Çalıştırma

Docker Swarm’da servis çalıştırmak için kullandığımız komut en basit haliyle şudur:

docker service create --name servis-adı docker-imagedocker service create --name esearch elasticsearch:2.4

Bir servis oluştururken kullanabileceğiniz tüm parametrelerin listesini aşağıdaki şekilde alabilirsiniz:

docker service create --help

Sık kullanılan parametrelerle örnek bir servis oluşturmak istersek aşağıdaki komutu inceleyebiliriz:

docker service create --env-file env-myapp --reserve-memory 512mb   --network mynet --detach=false --with-registry-auth -p 8084:8084    --name my-app private-repo:18444/my-app

Bu komutu parça parça inceleyecek olursak:

-p portu dışarıya açmak için

--with-registry-auth private registry den image çekerken kullanmak için.

--network network seçmek için

--detach=false container ayağa kalktı mı yoksa hala bekliyor mu görebilmek için

--env-file ortam değişkenlerini almak için

--reserve-memory bu servise memory ayırmak için kullanılır.

Bu aşamadan sonra yine docker service ls komutu ile servisleri listeleyebilirsiniz.

Örneğin uygulamamıza bir güncelleme geldi ve Docker image’ı değişti. Yukarıda belirttiğim gibi docker service update — image docker-image servis-adı komutu ile servisi güncelleyebilirsiniz.

Ekstra: Swarm İçin Kullanıcı Arayüzü Portainer

Portainer, Swarm ile oluşturduğunuz servislerinizin takibini terminal üzerinden değil de bir kullanıcı arayüzü üzerinden de yapabilmenizi sağlayan bir uygulama. Portainer’i çalıştırmak ise yine çok basit. Aşağıdaki komutla Portainer’ı da bir servis olarak ayağa kaldırabilirsiniz. Ardından da 9000 portundan erişebilirsiniz.

docker service create \
--name portainer \
--publish 9000:9000 \
--constraint ‘node.role == manager’ \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=/path/on/host/data,dst=/data \
portainer/portainer \
-H unix:///var/run/docker.sock

Docker Swarm’un dokümanlarına linkten ulaşabilirsiniz.

--

--