Docker-Compose ile İki Konteyner Nasıl Bağlanır
DOCKER AĞLARINI ANLAMA
Docker Compose’da ağları düzgün bir şekilde tanımlamak, konteyner iletişimi için çok önemlidir. Aynı ağdaki konteynerler yalnızca servis adlarını kullanarak iletişim kurabilir.
Docker Compose’da konteynerleri bağlamak, servisleri ve iletişim kuracakları ağı belirten bir docker-compose.yml dosyası oluşturmayı içerir. Kuruluma bir göz atalım.
Adım Adım Talimatlar
- docker-compose.yml Dosyası Oluşturun: Yeni bir dizin ve içinde bir docker-compose.yml dosyası oluşturarak başlayın.
$ mkdir my_project && cd my_project
$ touch docker-compose.yml
Bu dosya uygulamanız için servisleri ve ağları tanımlayacaktır.
- Hizmetlerinizi Tanımlayın: docker-compose.yml dosyasını açın ve bağlanmak istediğiniz hizmetleri tanımlayın. Ağ için iki seçeneğiniz var: açık bir ağ kullanmak veya Docker’ın varsayılan bir ağ oluşturmasına izin vermek.
Seçenek 1: Açık Ağ
Bu yöntem, my_network adında özel bir ağı açıkça tanımlayarak ağ üzerinde daha fazla kontrol sahibi olmanızı sağlar.
Bu kurulumda:
- Özel bir ağ olan my_network açıkça oluşturulur.
- Web ve veritabanı servisleri my_network’e bağlıdır.
- Bu, aynı ağa manuel olarak eklenmedikleri sürece hizmetleri diğer kapsayıcılardan izole eder.
Seçenek 2: Varsayılan Ağ (Otomatik Olarak Oluşturulur)
Bir ağ tanımlamazsanız, Docker Compose otomatik olarak your_project_default adlı bir ağ oluşturur. Konteynerler yine de hizmet adlarını kullanarak iletişim kurabilir.
- Bu kurulumda:
- Docker Compose otomatik olarak your_project_default adında bir ağ oluşturur.
- Hem web hem de veritabanı bu varsayılan ağa bağlıdır.
- Konteynerler hala servis adlarını (örneğin, db) kullanarak iletişim kurabilir.
Açık ve Varsayılan Ağlar Arasındaki Temel Farklar
Özellik Açık Ağ Varsayılan Ağ Ağ Adı Kullanıcı tanımlı (örneğin, my_network) Otomatik olarak oluşturuldu (your_project_default) Hizmet Adı Çözümlemesi Evet Evet Çoklu Ağlar Evet (hizmetleri birden fazla ağa atayabilirsiniz) Hayır (tüm servisler tek bir varsayılan ağdadır) İzolasyon Evet (sadece aynı özel ağdaki konteynerler iletişim kurabilir) Evet (sadece aynı projedeki konteynerler iletişim kurar) Manuel Temizlik Gerekli mi? Evet (konteynerler durduğunda ağ kaldırılır) Evet (konteynerler durduğunda varsayılan ağ kaldırılır) Hangi Seçeneği Seçmelisiniz?
- Daha iyi ağ yönetimine, birden fazla ağa veya hizmet izolasyonuna ihtiyacınız varsa açık ağı kullanın.
- Aynı proje içerisinde tüm servislerin ekstra yapılandırmaya gerek kalmadan otomatik olarak iletişim kurmasını istiyorsanız varsayılan ağı kullanın.
- Docker Compose Kurulumunuzu Çalıştırın: docker-compose.yml dosyası yerindeyken, aşağıdaki komutu kullanarak servislerinizi başlatın.
$ docker-compose up -d
Bu komut servislerinizi ayrı modda başlatır ve arka planda çalışmalarına izin verir.
- Konteyner İletişimini Test Etme: Konteynerlerin iletişim kurup kuramadığını görmek için web konteynerine girebilir ve servis adını kullanarak veritabanı konteynerine ping atabilirsiniz.
$ docker exec -it my_project_web_1 /bin/bash
Daha sonra docker konteynerinin içerisinde şunu çalıştırın:
root@container:/# apt update && apt install -y iputils-ping root@container:/# ping db
Başarılı pingler konteynerlarınızın doğru bir şekilde ağa bağlandığını gösterir.
ORTAK EN İYİ UYGULAMA
Yapılandırmalarınızda açıklık sağlamak ve olası çakışmaları önlemek için her zaman belirli hizmet adlarını kullanın.
Özetlersek
Konteynerleri Docker Compose ile bağlamak, uygulamalarınızdaki hizmetler arasındaki iletişimi geliştiren basit bir işlemdir. Docker ağlarını kullanarak, hizmetlerinizin mantıksal olarak gruplandırıldığından ve birbirleriyle etkili bir şekilde iletişim kurabildiğinden emin olabilirsiniz. Bu eğitim, temel bir web ve veritabanı hizmeti bağlantısı kurmanın pratik bir örneğini sağlamıştır. Daha karmaşık uygulamalar oluşturdukça, bu ağ kavramlarını anlamak hayati önem taşıyacaktır.
Sıkça Sorulan Sorular (SSS)
Docker Compose Nedir?
Docker Compose, çoklu konteyner Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Uygulamanızın hizmetlerini tek bir dosyada yapılandırmanıza olanak tanır.
Başka bir konteynerdan bir servise nasıl erişebilirim?
docker-compose.yml dosyanızda tanımlanan servis adını hostname olarak kullanarak başka bir konteynerdan bir servise erişebilirsiniz.
Bir konteyneri birden fazla ağa bağlayabilir miyim?
Evet, hizmet tanımınızda ek ağlar belirterek tek bir konteyneri birden fazla ağa bağlayabilirsiniz.
Bir ağ tanımlamazsam ne olur?
Bir ağ tanımlamazsanız, Docker konteynerleriniz için varsayılan bir köprü ağı oluşturacaktır, ancak bu
Yazının orijinalini buradan okuyabilirsiniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.