Yeni Başlayanlar İçin Docker Swarm
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 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 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.