Docker Swarm, Stack
Docker tarafından sunulan bir konteyner yönetim ve orkestrasyon aracıdır. Swarm, birden fazla Docker konteynerını yönetmek ve düzenlemek için kullanılır. Swarm, Docker konteynerlarına yüksek kullanılabilirlik, yük dengeleme, çoğaltma ve yeniden başlatma yetenekleri ekler.
Swarm master ve worker adı verilen makinelerin oluşturduğu bir ağdır "cluster"
raft consensus group ,internal distributed state store :masterların birbirine bağlı olduğu anlık makine durumlarını gösteren saklayan yapı.
docker swarm enable etmek için aşağıdaki komutu kullanıyoruz. ip döner.
> docker swarm init
master nodu belirmek için aşağıdaki kodu kulanıyoruz.
-- listen-addr node gelen istekleri dinlemek için
> docker swarm init --advertise-addr ip_adresi -- listen-addr ip_adresi
yeni bir master node belirtmek istediğimizde container'a bağlanıp aşağıdaki kodu çalıştırıyoruz.
> docker swarm join-token manager
yeni bir bir worker eklemek istiyorsak aşaıdaki kodu çalıştırıcağız.
> docker swarm join-token worker
swarm altında docker containerları görmek için artık service komutuyla ayağa kaldıracağız.
replicas 1 : birden fazla kurmasını istiyorsak .
> docker service create --name s_nginx --replicas 1 nginx
veya
> docker service create --name s_nginx -p 80:80 --replicas 3 nginx
altındaki çalışan container durumunu gösterir.
> docker service ps s_nginx
eşitlik algoritması oldugu için 2. makine varsa 2. makinede kuracaktır.
>docker service scale s_nginx=2
servisleri kaldırmak için kullanılır.
> docker service rm s_nginx
node ile ilgili bilgilerini görmek için kullanılır
> docker node
worker olan bir node manager olarak güncellemek için aşağıdaki kodu kullanılır.
> docker node promote node_ismi
node durdurup başlatmak ve sonlandırmak istediğimizde kulnacağımız komutlar.
active aktifleştirir
pause durdurur
drain sonlandırır
> docker node update avability pause node_ismi
Docker Stack
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.
yml dosyasında deploy için parametreler girilmiştir.
yml dosyamızı kaydettikten sonra, dosyamızın bulundugu dizine giderek aşağıdaki komutu çalıştırıyoruz ve stack servislerimiz ayağa kalkıyor.
> docker stack deploy -c docker-compose.yml s_wordpress
docker-compose.yml dosya içeriği:
version: '3.1'
services:
s_wordpress:
image: wordpress
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: s_db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 12345
WORDPRESS_DB_NAME: wordpress_db
volumes:
- C:\docker_stack_wordpress\wordpress_data:/var/www/html
restart: always
deploy:
replicas: 1 # 2 ikitane replicae oluştur
restart_policy: #yeniden başlatma kuralı
max_attempts: 3 # 3 kere dene max
condition: on-failure # hata oldugunda dene
placement:
constraints:
- node.role == manager
s_db:
image: mysql:5.7
environment:
MYSQL_DATABASE: wordpress_db
MYSQL_USER: root
MYSQL_PASSWORD: 12345
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- C:\docker_stack_wordpress\mysql_data:/var/lib/mysql
ports:
- 3307:3306
deploy:
replicas: 1
restart_policy: #yeniden başlatma kuralı
condition: on-failure # hata oldugunda dene
placement:
constraints:
- node.role == manager