Giriş
Konteynerleştirme son yıllarda yazılım teknolojisi alanında büyük bir ivme kazandı. Bu durum Docker adlı, konteynerler içindeki süreçlerin yönetimini basitleştiren bir konteyner platformuna bağlanabilir.
Konteynerler; yazılımın, fiziksel ana makinede çalışan diğer yazılımlardan yalıtılmış olarak çalışmasını sağlayan hafif, sanallaştırılmış, taşınabilir, yazılımla tanımlanmış standartlaştırılmış ortamlardır. Bu taşınabilirlik özelliği, geliştiricilerin uygulamalarını yalıtılmış hizmetler halinde modüler hale getirmelerine olanak tanır. Dahası, bağımsız olarak sunulabilir ve ölçeklendirmeye olanak tanır.
Bir uygulamayı birden fazla hizmete bölmek kesinlikle harika olsa da, beraberinde birkaç konteyneri yönetme yükünü de getirir. Bunların iletişim kurmasını, aynı anda başlamasını ve kapanmasını sağlamalısınız. Docker Compose adlı araç sayesinde bu kolay bir görev haline gelir. Docker Compose, geliştiricilerin bir YAML dosyasında tanımlanan kuralları kullanarak çoklu konteyner içeren Docker uygulamalarını çalıştırmalarına olanak tanır. YAML dosyası, uygulama hizmetlerinin tanımlarını ve bunların veri birimlerini ve ağları nasıl paylaşabileceklerini içerir. Hizmetleri tanımladıktan sonra, tek bir komutla hepsini başlatabilirsiniz. Bu eğitimde, Ubuntu 20.04 üzerinde Docker Compose'u nasıl kuracağınızı, yapılandıracağınızı ve kullanmaya başlayacağınızı göstereceğiz.
Gereksinimler
-
Bu uygulamalı bir eğitim olduğundan, başlangıç işletim ortamınız olarak kurulu bir Ubuntu 20.04'e sahip olmalısınız. Ayrıca sudo yetkilerine sahip root olmayan bir kullanıcınız olmalıdır. İşte size yardımcı olacak Ubuntu sunucunuzu kurmanıza yardımcı olacak adım adım bir eğitim. Sudoers dosyanızı yapılandırmak için bu eğitimi takip edin.
-
. Ayrıca Docker'ı da kurmanız gerekir. Lütfen Ubuntu 18.04 üzerinde Docker'ın nasıl kurulacağı ve çalıştırılacağı konusundaki bu eğitime başvurun.
Adım 1: Docker Compose Kurulumu
Docker Compose'un en son kararlı sürümünü resmi GitHub deposundan indireceğiz. En son sürümü sürümler (releases) sayfasından öğrenebilirsiniz; bu eğitimin yazıldığı sırada en son sürüm 1.28.5.
İlk olarak, root olmayan sudo kullanıcısı ile Ubuntu sunucunuza giriş yapın ve aşağıdaki komutu girin. Bu komut en son sürümü (1.28.5) indirir ve yürütülebilir dosyayı /usr/local/bin/docker-compose dizinine kaydeder. Bu, docker-compose olarak küresel düzeyde erişilebilir olmasını sağlar:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
İndirme işlemi tamamlandıktan sonra, docker-compose komutunun yürütülebilir olması için uygun izinleri ayarlamak üzere aşağıdaki komutu girin:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
Şimdi, kurulumun başarılı olduğunu ve aşağıdaki komutu çalıştırarak komutun çağrılabildiğini doğrulayın:
|
1 |
docker-compose –version |
Şöyle bir çıktı almalısınız:

Bu, Docker Compose'un sisteminize başarıyla kurulduğunu onaylar.
Adım 2: docker-compose.yml Dosyasını Oluşturma
Şununla nasıl çalışılacağını anlamanıza yardımcı olmak için: docker-compose.yml, resmi Nginx imajını kullanarak Docker Hub üzerinden bir web sunucusu ortamı yapılandıracağız. Dağıtıldıktan sonra, konteynerden temel bir HTML sayfası sunabilmeliyiz.
Çalışacağımız çalışma dizinimizi ev (home) klasöründe oluşturacağız. Dizini oluşturmak için aşağıdaki komutu girin:
|
1 |
mkdir ~/compose-example |
Ardından, dizine gidin:
|
1 |
cd ~/compose-example |
Dizinin içine girdikten sonra, Nginx ortamı için belge kökü (document root) olacak bir uygulama klasörü oluşturun. Bu klasöre app:
|
1 |
mkdir app |
- Bir HTML sayfası oluşturma
Uygulama klasörü içinde nano metin düzenleyicisini kullanarak index.html dosyasını oluşturalım:
|
1 |
nano app/index.html |
Ardından, dosyaya aşağıdaki HTML kodunu ekleyin:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Docker Compose Örneği</title> <!-- Bootstrap core CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">CloudSigma ile Harika Docker Compose Örneği</h1> <p class="h4"> Bu, temel bir statik HTML sayfasıdır. </p> <p class="lead text-muted"> Bu sayfa, <b>docker-compose kullanılarak oluşturulmuş bir Nginx Docker Konteynerinden sunulmaktadır. </b> </p> </div> </div> </section> </main> </body> </html> |
Dosyayı kaydetmek için CTRL +O, ENTER tuşlarına basın. Ardından CTRL +X ile kapatın. Sırada, proje kök dizinimizde docker-compose.yml dosyasını oluşturacağız.
- HTML sayfasını docker-compose kullanarak barındırma
Ardından, dosyayı nano editörüyle açmak için aşağıdaki komutu girin:
|
1 |
nano docker-compose.yml |
Bundan sonra, dosyanın içine aşağıdaki kod parçacığını ekleyin:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
The docker-compose.yml dosyası, Docker Compose'a hangi yapılandırma sürümünü kullandığımızı bildiren sürüm numarasıyla başlar. Hakkında daha fazla bilgi edinmek için lütfen bu bağlantıyı takip edin: Docker Compose sürüm oluşturma.
Sürüm numarasından sonra, ortamı oluşturan servisleri içeren services bloğumuz var. Bu öğreticide, yalnızca adında tek bir servis belirttik: webserver. webserver servisi nginx:alpine imajını kullanacaktır. Ayrıca port yönlendirmesini de tanımladık: 8000:80. Bunun anlamı, ana makinedeki 8000 portundan gelen tüm isteklerin, Nginx'in çalıştığı 80 portundaki webserver konteynerine yönlendirileceğidir.
Volumes yönergesi, verileri kalıcı hale getirmek için kullanabileceğimiz, ana makine ile konteyner arasında bir paylaşılan birim oluşturmanıza olanak tanır. Bizim yml kod parçacığımızda, yerel app klasörünü konteyner ile paylaşıyoruz. Konteyner içinde bu klasör /usr/share/nginx/html konumuna yerleştirilecektir. Dolayısıyla, Nginx için varsayılan belge kök dizininin üzerine yazmaktadır. Şimdi dosyayı kaydedip kapatabilirsiniz.
Bu noktaya kadar, örnek HTML web sayfanızı ve konteynerleştirilmiş bir web sunucusu ortamı oluşturma talimatlarını içeren docker-compose.yml dosyasını oluşturdunuz. Bir sonraki adımda bu kurulumu nasıl ayağa kaldırabileceğimizi görelim.
Adım 3: Docker Compose Komutunu Çalıştırma
Bu adımda, konteynerleştirilmiş ortamımızı başlatmak için komutu çalıştıracağız. Aşağıda, Docker imajlarının indirme işlemini başlatacak, webserver servisi için bir konteyner oluşturacak ve konteynerleştirilmiş ortamı arka planda başlatacak tek bir komut yer almaktadır:
|
1 |
docker-compose up -d |
Docker hızlı ve verimli olacak şekilde tasarlanmıştır, bu nedenle yukarıdaki komutu çalıştırdığınızda, öncelikle yerel sisteminizde tanımlanan imajı kontrol eder. Eğer eksikse, Docker Hub deposundan alacaktır. Şuna benzer bir çıktı göstermelidir:

Komutun çalışması bittiğinde, arka planda çalışan konteyner ortamını başlatacaktır. Çalıştığını şu komutu kullanarak doğrulayabilirsiniz:
|
1 |
docker-compose ps |
Benzer bir çıktı almalısınız:

Sunucunuzun IP adresine veya alan adına gidip 8000 portunu eklerseniz, yani sunucu_alan_adi_veya_IP:8000 oluşturduğumuz örnek HTML sayfasını görebilmeniz gerekir:

Hatırlarsanız, konteyner ile ana sistem arasında paylaşılan bir birim kurmuştuk. Bu, konteynerdeki dosyaların ana sistemdeki dosyalarla senkronize kalmasını sağlar. Dolayısıyla, index.html dosyasında bir değişiklik yaparsanız, bu değişiklik konteyner ile otomatik olarak senkronize edilir ve tarayıcıda sayfayı yenilediğinizde yansıtılır. Bunu nano editörü ile deneyebilirsiniz. Bir sonraki adımda birkaç komut daha öğrenelim.
Adım 4: Konteyner Ortamlarını Yönetmek İçin Ek Docker Compose Komutları
Tek bir docker-compose-up komutunu kullanarak bir web sayfasını başarıyla dağıttığınıza göre, konteynerleştirilmiş ortamları yönetmede yararlı olabilecek bazı ek komutları görelim.
Logs komutuyla başlayacağız. Uygulama hatalarınızı giderirken günlükler (logs) çok önemli olabilir. İlk olarak, Nginx konteyneri tarafından üretilen günlükleri görüntülemek için aşağıdaki komutu çalıştırın:
|
1 |
docker-compose logs |
İşte günlüklerin örnek bir çıktısı:

Konteynerlerin durumunu değiştirmeden ortamın yürütülmesini şu komutla duraklatabilirsiniz:
|
1 |
docker-compose pause |
![]()
Ardından, yürütmeleri devam ettirmek veya duraklatmayı kaldırmak için şu komutu kullanın:
|
1 |
docker-compose unpause |
![]()
Verilerini yok etmeden konteynerleri durdurmak isteyebilirsiniz. Bunu yapmak için aşağıdaki komutu kullanın:
|
1 |
docker-compose stop |
![]()
Konteynerleştirilmiş ortamla ilişkili konteynerleri, ağları ve birimleri yok etmek için şu komutu kullanın:
|
1 |
docker-compose down |
![]()
Yukarıdaki komutun, Docker Compose tarafından ortamı başlatmak için kullanılan temel imajları kaldırmadığını unutmayın. Bu, eşleşen imajlar için yerel makineyi kontrol ettiğinden, ortamınızı başlattığınızda daha hızlı derlemeler yapılmasını sağlar. Temel imajı tamamen kaldırmak istiyorsanız, bunu komutta belirtmeniz gerekir. Örneğimiz için, nginx:alpine imajını şu komutu kullanarak kaldırabiliriz:
|
1 |
docker image rm nginx:alpine |

Son olarak, resmi Docker Compose Komut Satırı Referansı belgelerinde daha fazla komut bulabilirsiniz.
Sonuç
Bu öğreticide, Ubuntu 20.04 üzerine Docker Compose kurdunuz, bir Nginx web sunucusu imajına dayalı konteynerleştirilmiş bir ortam oluşturdunuz ve Docker Compose Komutlarını kullanarak çeşitli hizmetleri nasıl yöneteceğinizi öğrendiniz.
Birden fazla konteynere bağlı gerçek dünyadan dinamik bir uygulamanın nasıl dağıtılacağını öğrenmek istiyorsanız, lütfen Docker Compose ile Laravel, Nginx ve MySQL Dağıtımı başlıklı öğreticimizi okuyun. Ayrıca docker-compose komutlarının tam listesini resmi Docker Compose Belgeleri.
Keyifli Çalışmalar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.