Docker Stack Nedir?

Docker Stack Nedir?

Docker stack aslında docker swarm’ın production tarafında daha yönetilebilir bir şekilde işlemesi için ,bir konfigürasyon dosyası üzerinden kurgulandığı ve yönetildiği bir yapıdır. Ya da başka bir tanımlama ile docker compose dosyası ile docker swarmın tek elden yönetilmesini sağlamaktır.

Stack kullanırken tek YAML dosyası üzerinden birden fazla servisi , network ve volume yönetebiliriz.

Docker Stack Nasıl Oluşturulur?

İlk olarak docker-compose gibi bir yaml dosyası oluşturmamız lazım. Daha öncedende docker-compose ile bahsetmiştik. docker-compose nedir ve nasıl kullanırlır buradan ulaşabilirsiniz.

Örnek olarak bu docker-compose.yml dosyasını kullanalım. Docker Stack için dosya ismi docker-compose olmak zorunde değildir.

Docker Stack ile service oluşturmak için docker swarm yapısını oluşturmanız gerekmektedir. Bunun için Docker Swarm Nedir? CentOS 7 Docker Swarm Oluşturma makalemizden yararlanabilirsiniz.

Resmideki .yml dosyanı içeriğini hazırladıktan sonra docker stack oluşturma işlemine başlayabiliriz. Oluşturduğumuz .yml dosyasının adı docker-compose.yml olsun. Bunun üzerinden işlem yapalım.

docker stack deploy -c docker-compose.yml nginx

Komutu çalıştırdıktan sonra docker stack ile docker service oluşturmuş olduk.

Komutu inceleyecek olursak:

-c parametresi --compose-file kısaltmasıdır.Yani deploy edilecek .yml dosyasını belirttiğimiz kısımdır.

-c parametresinden sonra deploy edilecek .yml dosyanısı belirtiyoruz.YAML dosyasını belirttikten sonra docker service ve docker stack için herhangi bir name veriyoruz.Örnekte görüleceği üzere nginx server oluşturduğumuzdan dolayı name kısmını nginx verdik.

Docker Stack ve Docker Service için Constraint Yapısı

node attribute matches Example 
node.id Node ID node.id==23vxic23axc3w
node.hostname Node Hostname node.hostname!=node2 or node.hostname==node1
node.role Node role (manager/worker) node.role==manager
node.platform.os Node Operating System node.platform.os==windows
node.platform.arch Node Architecture node.platform.arch==x86_64
node.labels User-defined node labels node.labels.security
engine.labels Docker Engine's Labels engine.labels.operatingsystem==ubuntu-14.04

Docker stack kullanırken constraint hangi node,hostname,os 'da oluşturulacağını bildirdiğiniz bir yapıdır. Böylelikle istediğiniz nodelarda docker service ve docker container oluşturabilirsiniz. Bunu kullanırken operatörlerden yararlanabilirsiniz.

Örneğin;

docker service create --name db --constraint "node.hostname==node1" mysql -> ile node1 'de mysql docker service ve docker container oluşturur.

docker service create --name db --constraint "node.hostname!=node1" mysql -> ile node1 dışındaki bütün node ve managerlarda docker service ve docker container oluşturulur.

Docker Stack ile aktardığımız bilgilerin yararlı olması dileğiyle başka bir docker yazımızda görüşmek üzere...