Docker birimleri ve ağları: konteynerler için veriler ve bağlantılar
Kısaca: Konteynerler geçicidir: birimler (volumes) verileri konteynerin dışında kalıcı olarak saklar, ağlar konteynerleri birbirine bağlar.
Biraz daha ayrıntılı: Bir konteynerin dosya sistemi onun yaşam döngüsüne aittir: silindiğinde içindeki veriler gider. Veritabanları, yüklemeler ve yapılandırmalar için bu yüzden birimlere ihtiyacınız vardır. Birkaç konteynerin (örneğin web uygulaması ve veritabanı) birbiriyle konuşması için Docker ağları kullanır.
Ayrıntılı
Birimler ve bind mount’lar
- Birim (volume): Docker tarafından yönetilen depolama.
docker run -v data:/var/lib/postgresql/data postgres,databirimini oluşturur ve konteynere bağlar. Konteyner silinse de varlığını sürdürür. - Bind mount: ana makinenin bir klasörü doğrudan bağlanır (
-v $(pwd)/code:/app). Geliştirme için kullanışlıdır, çünkü değişiklikler konteynerde hemen görünür. - tmpfs: RAM’de bellek, durduğunda kaybolur.
docker volume ls
docker volume inspect data
docker volume rm data
Ağlar
Kullanıcı tanımlı bir köprü ağındaki konteynerler birbirine ana makine adı olarak konteyner adlarıyla ulaşır:
docker network create appnet
docker run -d --name db --network appnet postgres
docker run -d --name web --network appnet -p 8080:80 my-app
Uygulamada veritabanı adresi o zaman db:5432 olur. Bir hizmet yalnızca -p (port yayımlama) ile ana makineden veya internetten de erişilebilir olur; onsuz ağda gizli kalır ve bu güvenlik için iyidir (veritabanını yayımlamayın).
Docker Compose
Bir compose.yaml içinde birkaç konteyneri birimler ve ağlarla birlikte tanımlarsınız:
services:
web:
build: .
ports: ["8080:3000"]
depends_on: [db]
db:
image: postgres:17
volumes: [dbdata:/var/lib/postgresql/data]
volumes:
dbdata:docker compose up -d her şeyi başlatır, docker compose down durdurur (-v dışında birimler kalır).
Notlar
Birimlerde saklanan verileri diğer her veritabanı gibi yedekleyin (yedekler!). Ana makine ile konteyner arasındaki izinler (kullanıcı kimlikleri), bind mount’larda sık görülen bir engeldir. host gibi ağ kipleri yalıtımı kaldırır. Kubernetes’te bu görevleri PersistentVolume’lar ve Service’ler üstlenir.
Ayrıca bak: Docker, Dockerfile, Kubernetes temelleri, Yedekleme stratejisi