Amaç: Tailscale VPN üzerinden güvenli bir Docker Swarm cluster’ı kurmak, servisleri yönetmek ve gizli/konfigürasyon verilerini container’larda kullanmak.
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.jsoniçinde advertise IP Tailscale IP’si olmalı:
{
"swarm-default-advertise-addr": "<TAILSCALE_IP>"
}Test makinesinde (sadece worker veya manager olarak katılacaksa):
docker swarm initKontrol:
docker node lsWorker 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>:2377Worker node’da çalıştırılır.
Token’ı kaybettiysen:
docker swarm join-token workerManager token’ı:
docker swarm join-token managerNode’lar cluster’daki makineleri temsil eder.
Listeleme:
docker node lsDetay:
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>Servis, bir veya daha fazla container’ın yönetilen bir birimidir.
Oluşturma:
docker service create --name test --replicas 3 nginxDurum kontrolü:
docker service ls
docker service ps test
docker service logs testScale (büyütme/küçültme):
docker service scale test=5Rolling update:
docker service update --image nginx:1.27 testServis silme:
docker service rm testStack, 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.
Registry, container image’larını depolamak için kullanılır.
Login:
echo YOUR_TOKEN | docker login ghcr.io -u YOUR_USERNAME --password-stdinBuild:
docker build -t ghcr.io/organization/app:latest .Push:
docker push ghcr.io/organization/app:latestSwarm update:
docker service update --image ghcr.io/organization/app:latest <SERVICE_NAME>Stack update:
docker stack deploy -c compose.yml <STACK_NAME>Secret, şifre veya token gibi gizli verileri container’da saklamak için kullanılır.
Oluşturma:
docker secret create api_key api_key.txtListeleme:
docker secret lsSilme:
docker secret rm api_keyCompose kullanımı:
services:
app:
image: app:latest
secrets:
- api_key
secrets:
api_key:
external: trueContainer içindeki yol:
/run/secrets/api_key
Python ile okuma:
API_KEY = open("/run/secrets/api_key").read().strip()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_configCompose içinde mount:
services:
app:
configs:
- source: db_config
target: /app/config/db_config.env
configs:
db_config:
external: truePython ile okuma:
from dotenv import dotenv_values
cfg = dotenv_values("/app/config/db_config.env")
DB_PORT = cfg["DB_PORT"]Swarm’tan çıkmak:
Worker:
docker swarm leaveManager (force):
docker swarm leave --forceContainer içinde komut çalıştırmak:
Task ID al:
docker service ps <SERVICE>Container ID bul:
docker inspect <TASK_ID> | grep ContainerIDContainer’a gir:
docker exec -it <CONTAINER_ID> sh| İş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> |
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-addrveyaswarm-default-advertise-addrTailscale IP’si olmalı