Docker ile çalışırken, bazen container’ların host sistemdeki uygulamalara bağlanması gerekebilir. Örneğin, uygulamanızı Docker içinde çalıştırırken, bazı bileşenler hala host sistemde çalışıyor olabilir. Bu yazıda, Docker container’larından host sistemdeki uygulamalara erişmenin yollarını anlatacağım.
Docker Ağı Hakkında Temel Bilgiler
Docker container’ları, küçük sanal makineler gibi çalışır. Her biri izole edilmiştir ve varsayılan olarak birbirleriyle ve host ile iletişim kurmazlar. Docker, genellikle bir köprü ağı (bridge network) oluşturur ve bu, container’ların host’a doğrudan bağlanmasına izin vermez.
Container’ların Host Uygulamalarına Bağlanması
Docker kurulduğunda, docker0
adında bir sanal ağ arayüzü oluşturur ve bu genellikle 172.17.0.1 IP adresini alır. Container’lar bu ağa bağlıdır, bu nedenle host üzerindeki uygulamaların bu ağ üzerinden dinlemesi gerekir.
Örnek: Host Üzerinde MariaDB’yi Yapılandırma
MariaDB gibi bir veritabanının host üzerinde çalıştığını düşünelim. Bu veritabanına container’lar tarafından erişilmesini sağlamak için MariaDB’nin dinleme adresini docker0
IP’sine ayarlayabiliriz:
bind-address = 172.17.0.1
Bu ayar, MariaDB’yi tüm container’ların erişebileceği hale getirir. Şimdi, container’dan MariaDB’ye şu komutla bağlanabiliriz:
$ mariadb -h 172.17.0.1
Bu yöntem, TCP veya UDP protokolünü kullanan çoğu uygulama için geçerlidir. Örneğin, Redis veya Nginx gibi uygulamalar da benzer şekilde yapılandırılabilir.
Host Network Modunu Kullanma
En basit çözüm, container’ı host
ağ modunda çalıştırmaktır. Bu modda, container ve host, aynı ağ yapılandırmasını paylaşır. Böylece container, host’un ağ arayüzlerine doğrudan erişebilir.
Container’ı host
modunda başlatmak için şu komutu kullanabilirsiniz:
$ docker run --rm -it --network host alpine sh
Bu yapılandırmada, container içindeki 127.0.0.1
(localhost) adresi, doğrudan host’un kendisini işaret eder. Örneğin, host üzerindeki bir MariaDB veritabanına bağlanmak için şu komutu kullanabiliriz:
mariadb -h 127.0.0.1
Bu modun avantajı, tüm TCP ve UDP portlarının container tarafından erişilebilir hale gelmesidir. Ancak, bu durum izolasyonu azalttığı için güvenlik açısından dikkat edilmelidir.
Sonuç
Container’ların host sistemdeki uygulamalara erişimini sağlamak için iki temel yöntem vardır: docker0
IP adresini kullanarak uygulamaları dinletmek veya host
ağ modunu kullanmak. Hangi yöntemin daha uygun olduğunu projenizin ihtiyaçlarına göre seçebilirsiniz.
Docker ile host ve container iletişimini kolaylaştırmak, bu yapılandırmalarla basit hale gelir. İhtiyaçlarınıza göre bu yöntemleri kullanarak esnek çözümler oluşturabilirsiniz.