Docker Stack Nedir? Nasıl Kullanılır?
5 min read

Docker Stack Nedir? Nasıl Kullanılır?

Docker Stack, Swarm altyapınızı compose aracılığıyla yönetmenizi sağlar.
Docker Stack Nedir? Nasıl Kullanılır?
Photo by Jonas / Unsplash

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:

  1. Dağıtım kolaylığı: Docker Stack, Docker Compose dosyasını kullanarak, Docker Swarm clusterında uygulamaları kolayca dağıtmanıza olanak tanır.
  2. 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.
  3. Yönetim kolaylığı: Docker Stack, Docker CLI komutlarını kullanarak uygulamalarınızı tek bir noktadan yönetmenize olanak tanır.
  4. 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:

Docker Compose Nedir ve Nasıl Kullanılır?
Docker Compose birden fazla container’ı kolayca oluşturulmada ve yönetmede kullanılır.

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:

  1. Ö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.
  2. 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.
  3. 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:

  1. Replicas: Hizmetin kaç adet replika çalıştırılmasını belirtir.
  2. Placement constraints: Hizmetin hangi Swarm node'larında çalıştırılmasını sınırlar.
  3. Update policy: Hizmet güncellendiğinde hangi yöntemin uygulanması gerektiğini belirtir (örneğin, yavaş yavaş güncelleme yapmak).
  4. Resource limits: Hizmetin bellek, CPU gibi kaynaklarına erişebilmesi için belirtilen sınırlar.
  5. 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 ile web hizmeti 3 adet replika olarak çalıştırılacaktır.
  • placement: bölümü ile web hizmeti sadece node.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ü ile redis 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:

  1. docker stack deploy: Docker Stack dosyasını bir Swarm hizmeti olarak dağıtır.
  2. docker stack services: Bir Docker Stack hizmetlerinin listesini görüntüler.
  3. docker stack ps: Bir Docker Stack hizmetlerinin durumunu görüntüler.
  4. docker stack rm: Bir Docker Stack hizmetini kaldırır.
  5. docker stack inspect: Bir Docker Stack hizmetinin detaylarını görüntüler.
  6. docker stack ls: Mevcut Docker Stack hizmetlerinin listesini görüntüler.
  7. docker stack update: Mevcut bir Docker Stack hizmetini günceller.
  8. docker stack services update: Bir Docker Stack hizmetinin konfigürasyonunu günceller.
  9. 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 stack kullanabilmeniz için swarm modunu aktif etmelisiniz. Docker Swarm için detaylı bilgiye şu yazımızdan ulaşabilirsiniz.
Docker Swarm İle Container Cluster Yönetimi
Docker Swarm, Docker’la birlikte gelen dağıtık ortam orkestrasyon aracıdır.
  1. Docker Swarm modunu başlatın: docker swarm init
  2. Docker Stack dosyasını dağıtın: docker stack deploy -c <stack-file>.yml <stack-name>
  3. Docker Stack hizmetlerinin listesini görüntüleyin: docker stack services <stack-name>
  4. 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.

Swarmpit
Lightweight Docker Swarm Management UI

Docker serimizin sıradaki yazısı için aşağıdaki bağlantıyla devam edebilirsiniz.

Docker Secret Nedir? Nasıl Kullanılır?
Docker secret, Swarm dağıtımlarında hassas verilerinizin güvenliğini sağlar.