Docker Stack Nedir? Nasıl Kullanılır?
Docker Stack, Docker Compose dosyasını kullanarak, Docker Swarm cluster'ı içindeki servisleri yapılandırmanıza, dağıtmanıza ve yönetmenize olanak tanır. Böylece Swarm yönetiminiz oldukça kolay bir hale gelir.
Docker Stack, aşağıdaki avantajları sunar:
- Dağıtım kolaylığı: Docker Stack, Docker Compose dosyasını kullanarak, Docker Swarm clusterında uygulamaları kolayca dağıtmanıza olanak tanır.
- Yapılandırma kolaylığı: Docker Stack, Docker Compose dosyasını kullanarak, uygulamalarınızın yapılandırmasını tek bir dosya üzerinde yapmanıza olanak tanır.
- Yönetim kolaylığı: Docker Stack, Docker CLI komutlarını kullanarak uygulamalarınızı tek bir noktadan yönetmenize olanak tanır.
- Uygulama ölçeklendirme: Docker Stack, Docker Swarm clusterını kullanarak, uygulamalarınızın skalabilitesini artırmanıza olanak tanır.
1. Docker Stack Compose Dosyası
Docker Stack, yapılandırma için Docker Compose dosyası kullanır. Docker Stack Compose yapılandırması için basit bir örnek verelim:
version: "3.8"
services:
app:
image: python:3.9-alpine
command: ["python", "-m", "flask", "run", "--host=0.0.0.0"]
environment:
FLASK_APP: app.py
FLASK_ENV: development
DATABASE_URL: mysql://db:3306/app
ports:
- "5000:5000"
volumes:
- ./app:/app
working_dir: /app
deploy:
replicas: 2
restart_policy:
condition: on-failure
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: app
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
Bu dosya, Flask uygulaması ve MySQL veritabanı içeren iki Docker hizmeti tanımlar. Flask uygulaması, veritabanına bağlanmak için DATABASE_URL
ortam değişkenini tanımlar ve veritabanı hizmeti tarafından sunulan db
adlı servis tarafından tanımlanır. Veritabanı verileri, dışarıdaki db-data
isimli bir Docker volume'unda saklanır.
Docker Compose dosyası hakkında daha detaylı bilgiler için şu yazımızı okuyabilirsiniz:
2. Docker Compose ve Docker Stack Compose Farkı Nedir?
Docker Compose ve Docker Stack Compose aynı syntax ve yaml dosya uzantısını kullanır. Fakat bazı parametreler sadece stack için tanımlanabilir. Aynı şekilde compose'da kullanılan bazı parametreler de stack compose dosyasında desteklenmez. Bu parametrelere geçmeden önce diğer temel farklılıklara göz atalım.
Docker Stack Compose dosyası ve normal Compose dosyası arasındaki temel farklar şunlardır:
- Ölçeklenebilirlik: Docker Stack Compose dosyası, Docker Swarm üzerinde çalışan hizmetlerin dağıtımını ve yönetimini destekler. Normal Compose dosyası ise sadece tek bir makinede çalışan hizmetlerin dağıtımını ve yönetimini destekler.
- Yapılandırma: Docker Stack Compose dosyası, Docker Swarm üzerinde hizmet dağıtımı ve yönetimi için daha geniş bir yapılandırma seçeneği sunar. Örneğin, replikalar, servis kapasitesi, güncelleme politikaları vb.
- Yapı: Docker Stack Compose dosyası, birçok hizmetin dağıtımını ve yönetimini içeren daha büyük ve kapsamlı bir yapı sunar. Normal Compose dosyası ise daha küçük ve basit yapıları destekler.
Docker Stack Compose dosyasında ekstra kullanabileceğiniz birkaç parametre şunlardır:
- Replicas: Hizmetin kaç adet replika çalıştırılmasını belirtir.
- Placement constraints: Hizmetin hangi Swarm node'larında çalıştırılmasını sınırlar.
- Update policy: Hizmet güncellendiğinde hangi yöntemin uygulanması gerektiğini belirtir (örneğin, yavaş yavaş güncelleme yapmak).
- Resource limits: Hizmetin bellek, CPU gibi kaynaklarına erişebilmesi için belirtilen sınırlar.
- Networks: Hizmetin kullanması gereken ağları belirtir.
Bu parametleri dahil ederek bir stack compose dosyası örneği görelim:
version: "3.7"
services:
web:
image: nginx
replicas: 3
placement:
constraints:
- node.role == worker
networks:
- webnet
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
volumes:
- db-data:/var/lib/postgresql/data
networks:
- dbnet
redis:
image: redis
command: redis-server --appendonly yes
deploy:
update_config:
parallelism: 2
delay: 10s
failure_action: rollback
networks:
- redisnet
networks:
webnet:
dbnet:
redisnet:
volumes:
db-data:
replicas: 3
parametresi ileweb
hizmeti 3 adet replika olarak çalıştırılacaktır.placement:
bölümü ileweb
hizmeti sadecenode.role == worker
node'larında çalıştırılması belirtilmiştir. Dilerseniz şu constraints seçeneklerini de uygulayabilirsiniz:
Parametre | Tanım | Örnek |
---|---|---|
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 |
networks:
bölümü ile hizmetlerin kullanması gereken ağlar belirtilmiştir.update_config:
bölümü ileredis
hizmetinin güncellendiğinde uygulanması gereken yöntem belirtilmiştir (parallelism, delay, failure_action).
3. Docker Stack Komutları
Docker Stack kullanarak kullanabileceğiniz temel komutlar şunlardır:
docker stack deploy
: Docker Stack dosyasını bir Swarm hizmeti olarak dağıtır.docker stack services
: Bir Docker Stack hizmetlerinin listesini görüntüler.docker stack ps
: Bir Docker Stack hizmetlerinin durumunu görüntüler.docker stack rm
: Bir Docker Stack hizmetini kaldırır.docker stack inspect
: Bir Docker Stack hizmetinin detaylarını görüntüler.docker stack ls
: Mevcut Docker Stack hizmetlerinin listesini görüntüler.docker stack update
: Mevcut bir Docker Stack hizmetini günceller.docker stack services update
: Bir Docker Stack hizmetinin konfigürasyonunu günceller.docker stack events
: Bir Docker Stack hizmetine ait olayları görüntüler.
Bu komutlar, Docker CLI aracılığıyla kullanılır ve Docker Stack hizmetlerini yönetmek için kullanılabilir.
4. Docker Stack Nasıl Çalıştırılır?
Docker Stack, Docker CLI aracılığıyla çalıştırılır. Docker Stack dosyasınız hazır ise, aşağıdaki adımları izleyerek Docker Stack hizmetlerini başlatabilirsiniz:
- Docker Swarm modunu başlatın:
docker swarm init
- Docker Stack dosyasını dağıtın:
docker stack deploy -c <stack-file>.yml <stack-name>
- Docker Stack hizmetlerinin listesini görüntüleyin:
docker stack services <stack-name>
- Docker Stack hizmetlerinin durumunu görüntüleyin:
docker stack ps <stack-name>
Bu adımlar, Docker Stack hizmetlerini başlatmanızı ve yönetmenizi sağlar. Her adım hakkında daha fazla bilgi için bir üstteki başlığı tekrar okuyabilirsiniz.
5. Docker Stack Yönetim Arayüzü
Docker stack ile oluşturduğunuz swarm altyapınızın yönetimini CLI üzerinden yapabileceğiniz gibi bir arayüz üzerinden de yapabilirsiniz. Swarmpit isimli proje ile swarm yönetimini arayüz aracılığıyla yapmak için aşağıdaki bağlantıyı ziyaret edebilirsiniz.
Docker serimizin sıradaki yazısı için aşağıdaki bağlantıyla devam edebilirsiniz.