docker

Docker: Docker-compose ile İki Konteyneri Ağa Nasıl Bağlarım

Ağ oluşturma, Docker’da konteynerlerle çalışmanın temel yönlerinden biridir. Docker Compose kullanarak, birden fazla konteyneri kolayca bağlayabilir ve çeşitli hizmetlerden oluşan karmaşık uygulamaları yönetebilirsiniz. Bu makalede, Docker Compose kullanarak iki konteyneri etkili bir şekilde nasıl bağlayacağınızı inceleyeceğiz. Sonunda, yapılandırmanızda ağları nasıl tanımlayacağınız ve hizmetleriniz arasında sorunsuz iletişimi nasıl etkinleştireceğiniz konusunda net bir anlayışa sahip olacaksınız.

 

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

  1. 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.

  2. 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.

    version: '3'
    services:
      web:
        image: nginx
        networks:
          - my_network
      db:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: example
        networks:
          - my_network
    networks:
      my_network:

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.

version: '3'
services:
  web:
    image: nginx
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
  1. 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

    ÖzellikAçı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ümlemesiEvetEvet
    Çoklu AğlarEvet (hizmetleri birden fazla ağa atayabilirsiniz)Hayır (tüm servisler tek bir varsayılan ağdadır)
    İzolasyonEvet (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.
  2. 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.

  3. 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

     

    Successful pings indicate that your containers are correctly networked.
    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)

  1. 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.

  2. 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.

  3. 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.

  4. 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.