Skip to content

Instantly share code, notes, and snippets.

@kantrveysel
Created December 19, 2025 07:12
Show Gist options
  • Select an option

  • Save kantrveysel/1d462cab5722e0031ed9788b90792936 to your computer and use it in GitHub Desktop.

Select an option

Save kantrveysel/1d462cab5722e0031ed9788b90792936 to your computer and use it in GitHub Desktop.
Docker Swarm & Tailscale Kullanım Notları

Tailscale ile Docker Swarm Notları

Amaç: Tailscale VPN üzerinden güvenli bir Docker Swarm cluster’ı kurmak, servisleri yönetmek ve gizli/konfigürasyon verilerini container’larda kullanmak.


🟥 1) Docker Swarm Başlatma

Swarm, container’ları cluster halinde yönetir. Tailscale ile node’lar birbirini doğrudan görebilir, port açmaya gerek yok.

Manager node’da:

docker swarm init

daemon.json içinde advertise IP Tailscale IP’si olmalı:

{
  "swarm-default-advertise-addr": "<TAILSCALE_IP>"
}

Test makinesinde (sadece worker veya manager olarak katılacaksa):

docker swarm init

Kontrol:

docker node ls

🟦 2) Worker Node Ekleme

Worker node, manager’ın yönetimi altında container çalıştırır.

Manager çıktısında göreceğin komut:

docker swarm join --token <TOKEN> <TAILSCALE_IP>:2377

Worker node’da çalıştırılır.

Token’ı kaybettiysen:

docker swarm join-token worker

Manager token’ı:

docker swarm join-token manager

🟩 3) Node Yönetimi

Node’lar cluster’daki makineleri temsil eder.

Listeleme:

docker node ls

Detay:

docker node inspect <NODE>

Node’u devre dışı bırak (deploy almasın):

docker node update --availability drain <NODE>

Node’u aktif yap:

docker node update --availability active <NODE>

Node silme:

docker node rm <NODE>

🟧 4) Servis Yönetimi

Servis, bir veya daha fazla container’ın yönetilen bir birimidir.

Oluşturma:

docker service create --name test --replicas 3 nginx

Durum kontrolü:

docker service ls
docker service ps test
docker service logs test

Scale (büyütme/küçültme):

docker service scale test=5

Rolling update:

docker service update --image nginx:1.27 test

Servis silme:

docker service rm test

🟨 5) Stack Deploy

Stack, birden fazla servisi docker-compose.yml üzerinden yönetir.

Deploy:

docker stack deploy -c compose.yml <STACK_NAME>

Listeleme:

docker stack ls
docker stack services <STACK_NAME>

Silme:

docker stack rm <STACK_NAME>

Stack, compose dosyasındaki tüm servisleri production-ready Swarm mode’da çalıştırır.


🟥 6) Image Yönetimi (Registry)

Registry, container image’larını depolamak için kullanılır.

Login:

echo YOUR_TOKEN | docker login ghcr.io -u YOUR_USERNAME --password-stdin

Build:

docker build -t ghcr.io/organization/app:latest .

Push:

docker push ghcr.io/organization/app:latest

Swarm update:

docker service update --image ghcr.io/organization/app:latest <SERVICE_NAME>

Stack update:

docker stack deploy -c compose.yml <STACK_NAME>

🟦 7) Secret Yönetimi

Secret, şifre veya token gibi gizli verileri container’da saklamak için kullanılır.

Oluşturma:

docker secret create api_key api_key.txt

Listeleme:

docker secret ls

Silme:

docker secret rm api_key

Compose kullanımı:

services:
  app:
    image: app:latest
    secrets:
      - api_key

secrets:
  api_key:
    external: true

Container içindeki yol:

/run/secrets/api_key

Python ile okuma:

API_KEY = open("/run/secrets/api_key").read().strip()

🟩 8) Config Yönetimi

Config, gizli olmayan ayarları container’larda saklamak için kullanılır.

Dosya (db_config.env):

DB_PORT=5333
LOG_LEVEL=info

Oluşturma:

docker config create db_config db_config.env
docker config ls
docker config rm db_config

Compose içinde mount:

services:
  app:
    configs:
      - source: db_config
        target: /app/config/db_config.env

configs:
  db_config:
    external: true

Python ile okuma:

from dotenv import dotenv_values
cfg = dotenv_values("/app/config/db_config.env")
DB_PORT = cfg["DB_PORT"]

🟧 9) Swarm Node / Cluster Yönetimi

Swarm’tan çıkmak:

Worker:

docker swarm leave

Manager (force):

docker swarm leave --force

🟫 10) Container Debug / Shell

Container içinde komut çalıştırmak:

Task ID al:

docker service ps <SERVICE>

Container ID bul:

docker inspect <TASK_ID> | grep ContainerID

Container’a gir:

docker exec -it <CONTAINER_ID> sh

🟪 11) Önemli Komutların Özeti

İşlem Komut
Swarm başlat docker swarm init
Worker join docker swarm join
Service deploy docker service create
Service update docker service update
Service scale docker service scale
Stack deploy docker stack deploy
Secret oluştur docker secret create
Config oluştur docker config create
Node drain docker node update --availability drain <NODE>

🔹 12) Tailscale ile Overlay Network

Tailscale VPN sayesinde node’lar güvenli bir şekilde birbirini görür. Bu nedenle:

  • Firewall/port açmaya gerek yok
  • Overlay network otomatik çalışır
  • --advertise-addr veya swarm-default-advertise-addr Tailscale IP’si olmalı
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment