Rocky Linux 8 Üzerine Docker Compose Kurulumu ve Kullanımı
Rocky Linux 8, CentOS’un kararlı ve topluluk destekli bir halefi olarak, sunucu ortamlarında ve geliştirme iş akışlarında giderek daha fazla tercih edilmektedir. Modern uygulama geliştirme ve dağıtım süreçlerinde konteyner teknolojileri merkezi bir rol oynamaktadır. Docker, uygulamaları bağımlılıklarıyla birlikte hafif, taşınabilir konteynerler içinde paketleyerek bu süreci kolaylaştırır. Ancak gerçek dünya uygulamaları genellikle tek bir konteynerden fazlasını gerektirir; bir veritabanı, bir ön uç, bir arka uç servisi ve belki de bir önbellek gibi birden çok servisten oluşur. İşte bu noktada Docker Compose devreye girer.
Docker Compose, birden çok konteynerden oluşan Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Tek bir YAML dosyası kullanarak tüm uygulama servislerinizi yapılandırabilir, başlatabilir, durdurabilir ve yönetebilirsiniz. Bu, karmaşık çoklu servis mimarilerini basitleştirerek geliştiricilerin ve sistem yöneticilerinin hayatını önemli ölçüde kolaylaştırır.
Bu kapsamlı teknik makalede, Rocky Linux 8 işletim sistemi üzerine Docker Engine ve ardından Docker Compose’u nasıl kuracağınızı adım adım açıklayacağız. Ayrıca, temel Docker Compose komutlarını ve docker-compose.yml dosyasının yapısını anlayarak örnek bir çoklu konteyner uygulamasını nasıl dağıtacağınızı ve yöneteceğinizi göstereceğiz. Makalenin sonunda, Docker Compose ile çalışırken karşılaşabileceğiniz yaygın sorunlara ve en iyi uygulamalara da değineceğiz. Bu kılavuz, hem Docker ve konteyner teknolojilerine yeni başlayanlar hem de mevcut bilgilerini Rocky Linux 8 ortamında pekiştirmek isteyen deneyimli kullanıcılar için değerli bir kaynak olacaktır.
Ön Koşullar
Bu makaledeki adımları takip etmeden önce aşağıdaki ön koşulların yerine getirildiğinden emin olun:
* Rocky Linux 8 İşletim Sistemi: Kurulmuş ve çalışan bir Rocky Linux 8 sunucusu veya sanal makinesi.
* Sudo Yetkileri: Komutları çalıştırmak için sudo ayrıcalıklarına sahip bir kullanıcı hesabı.
* İnternet Bağlantısı: Gerekli paketleri ve Docker görüntülerini indirmek için aktif bir internet bağlantısı.
Adım 1: Rocky Linux 8 Sistemini Güncelleme
Herhangi bir yazılım kurulumuna başlamadan önce sisteminizin güncel olduğundan emin olmak iyi bir pratiktir. Bu, olası bağımlılık sorunlarını önlemeye ve en yeni güvenlik yamalarına sahip olmaya yardımcı olur.
Terminalinizi açın ve aşağıdaki komutları çalıştırın:
sudo dnf update -y
sudo dnf upgrade -y
* sudo dnf update -y: Sistemdeki tüm yüklü paketlerin meta verilerini günceller ve güvenlik yamaları ile hata düzeltmelerini içeren güncellemeleri kurar. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı verir.
* sudo dnf upgrade -y: Mevcut paketleri en son sürümlerine yükseltir.
Bu komutların tamamlanması biraz zaman alabilir. İşlem bittikten sonra, eğer çekirdek (kernel) güncellenmişse, sisteminizi yeniden başlatmanız önerilir:
sudo reboot
Adım 2: Docker Engine Kurulumu
Docker Compose, Docker Engine’in üzerine inşa edildiği için, öncelikle Docker Engine’in Rocky Linux 8 sisteminize kurulması gerekmektedir.
Docker Engine Nedir?
Docker Engine, Docker uygulamalarını oluşturan ve çalıştıran temel teknolojidir. Bir sunucu-istemci mimarisine sahiptir. Docker Daemon (sunucu), konteynerleri oluşturan, çalıştıran ve yöneten arka plan servisidir. Docker CLI (istemci), kullanıcıların Docker Daemon ile etkileşim kurmasını sağlayan komut satırı arayüzüdür.
Gerekli Bağımlılıkları Kurma
Docker deposunu eklemeden önce, Docker’ın ihtiyaç duyduğu bazı temel yardımcı programları ve depolama sürücülerini kurmanız gerekir.
sudo dnf install -y dnf-utils device-mapper-persistent-data lvm2
* dnf-utils: DNF paket yöneticisi için ek yardımcı programlar sağlar. dnf config-manager komutu bunun bir parçasıdır.
* device-mapper-persistent-data ve lvm2: Bunlar, Docker’ın depolama sürücüleri için gerekli olan paketlerdir.
Docker Deposunu Ekleme
Rocky Linux, CentOS ile ikili uyumlu olduğundan, Docker’ın CentOS için sağladığı resmi depoyu kullanabiliriz.
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Bu komut, Docker CE (Community Edition) deposunu sisteminizin DNF yapılandırmasına ekler. Artık Docker paketlerini DNF aracılığıyla kurabilirsiniz.
Docker Engine’i Kurma
Depo eklendikten sonra, Docker Engine’i ve ilgili bileşenlerini kurabiliriz.
sudo dnf install -y docker-ce docker-ce-cli containerd.io
* docker-ce: Docker Engine’in kendisi.
* docker-ce-cli: Docker komut satırı arayüzü (CLI).
* containerd.io: Konteyner yaşam döngüsünü yöneten bir endüstri standardı konteyner çalışma zamanı. Docker Engine, konteynerleri çalıştırmak için containerd‘i kullanır.
Docker Servisini Başlatma ve Etkinleştirme
Kurulum tamamlandıktan sonra Docker servisini başlatmanız ve sistem başlangıcında otomatik olarak başlaması için etkinleştirmeniz gerekir.
sudo systemctl start docker
sudo systemctl enable docker
Servisin durumunu kontrol ederek doğru çalıştığından emin olabilirsiniz:
sudo systemctl status docker
Çıktıda Active: active (running) ifadesini görmelisiniz.
Kullanıcıyı Docker Grubuna Ekleme
Varsayılan olarak, Docker komutlarını çalıştırmak için sudo kullanmanız gerekir. Her seferinde sudo yazmaktan kaçınmak için, mevcut kullanıcınızı docker grubuna ekleyebilirsiniz. Bu, kullanıcınıza Docker Daemon ile doğrudan etkileşim kurma yetkisi verir.
sudo usermod -aG docker $USER
* usermod: Kullanıcı hesaplarını değiştirmek için kullanılır.
* -aG: Kullanıcıyı belirtilen gruba ekler (-a eklemek, -G grup belirtmek için).
* docker: Eklemek istediğimiz grubun adı.
* $USER: Mevcut kullanıcınızın adını temsil eden bir kabuk değişkenidir.
Bu değişikliklerin etkili olması için oturumu kapatıp yeniden açmanız veya aşağıdaki komutu çalıştırmanız gerekir:
newgrp docker
Bu komut, mevcut kabuk oturumunuz için docker grubunun yeni üyeliklerini uygular.
Docker Kurulumunu Doğrulama
Docker’ın doğru şekilde kurulduğunu ve kullanıcınızın yetkilendirildiğini doğrulamak için basit bir test konteyneri çalıştırın:
docker run hello-world
Bu komut, küçük bir test görüntüsünü indirir ve bir konteyner içinde çalıştırır. Eğer her şey yolundaysa, terminalinizde “Hello from Docker!” mesajını içeren bir çıktı görmelisiniz.
Adım 3: Docker Compose Kurulumu
Docker Engine başarıyla kurulduktan sonra, sıra Docker Compose’a gelir. Docker Compose, Docker Engine gibi, docker-compose komutunu kullanarak kontrol edilen ayrı bir araçtır.
Docker Compose Nedir?
Daha önce de belirtildiği gibi, Docker Compose, çoklu konteyner Docker uygulamalarını tanımlamak ve çalıştırmak için kullanılan bir araçtır. Bir docker-compose.yml dosyası kullanarak, uygulamanızın tüm servislerini, ağlarını ve birimlerini tek bir dosyada yapılandırabilirsiniz. Bu, uygulamanızın tüm bileşenlerini tek bir komutla başlatmanıza olanak tanır.
Kurulum Yöntemleri
Docker Compose’u kurmanın birkaç yolu vardır, ancak en yaygın ve önerilen yöntem, Docker’ın GitHub deposundan doğrudan ikili (binary) dosyayı indirmektir. Eski sürümler Python pip aracıyla kurulabiliyordu, ancak Docker Compose v2 ile birlikte bu yöntem artık önerilmemektedir. Docker Compose v2, Go dilinde yeniden yazılmış ve docker compose olarak Docker CLI’ye entegre edilmiştir (ayrı bir docker-compose ikilisi olarak da kullanılabilir).
Binary İndirme Yöntemi ile Kurulum
Bu yöntem, en güncel ve kararlı Docker Compose sürümünü kurmanın en basit ve en güvenilir yoludur.
1. En Son Sürümü Bulma: Docker Compose’un en son kararlı sürümünü bulmak için Docker’ın GitHub yayınlar sayfasına (github.com/docker/compose/releases) göz atmanız önerilir. Bu makalenin yazıldığı an itibarıyla en son kararlı sürüm v2.24.5’tir. Siz kurulum yaparken daha yeni bir sürüm mevcut olabilir, bu yüzden URL’deki sürüm numarasını kontrol etmeyi unutmayın.
2. İkili Dosyayı İndirme: Aşağıdaki curl komutunu kullanarak Docker Compose ikili dosyasını /usr/local/bin dizinine indirin. Bu dizin, sistem genelinde çalıştırılabilir dosyalar için standart bir yoldur.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
* curl -L: Belirtilen URL’den dosyayı indirir ve yönlendirmeleri takip eder.
* https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m): İndirilecek dosyanın URL’sidir.
* v2.24.5: Docker Compose sürüm numarası. Bunu güncel sürümle değiştirebilirsiniz.
* $(uname -s): İşletim sisteminin adını (örneğin, Linux) döndürür.
* $(uname -m): Makine donanım mimarisini (örneğin, x86_64 veya aarch64) döndürür. Bu, doğru mimariye sahip ikili dosyayı indirmeyi sağlar.
* -o /usr/local/bin/docker-compose: İndirilen dosyayı /usr/local/bin dizinine docker-compose adıyla kaydeder.
3. Çalıştırılabilir İzinleri Verme: İndirilen dosyanın çalıştırılabilir olması için izinleri ayarlamanız gerekir.
sudo chmod +x /usr/local/bin/docker-compose
* chmod +x: Dosyaya çalıştırma izni verir.
4. Kurulumu Doğrulama: Docker Compose’un doğru şekilde kurulduğunu ve erişilebilir olduğunu doğrulamak için sürümünü kontrol edin.
docker-compose --version
Çıktı olarak Docker Compose version v2.24.5 (veya indirdiğiniz sürüm) gibi bir mesaj görmelisiniz.
Bazı durumlarda, docker compose komutunu doğrudan Docker CLI aracılığıyla da kullanabilirsiniz. Bu, genellikle Docker Desktop veya daha yeni Docker Engine sürümleriyle birlikte gelir. docker compose version komutunu da deneyebilirsiniz. Eğer docker-compose ayrı bir ikili olarak çalışıyorsa, her iki komut da aynı veya benzer çıktıyı verecektir.
Adım 4: Docker Compose Kullanımı
Docker Compose artık Rocky Linux 8 sisteminize kurulduğuna göre, nasıl kullanılacağını bir örnekle gösterelim. Basit bir web uygulaması (Nginx) ve bir veritabanı (PostgreSQL) içeren bir çoklu servis uygulaması oluşturalım.
Temel Kavramlar
* docker-compose.yml Dosyası: Docker Compose’un kalbidir. Uygulamanızın servislerini, ağlarını ve birimlerini YAML formatında tanımladığınız yerdir.
* Servisler (Services): Uygulamanızın her bir bileşeni (örneğin, web sunucusu, veritabanı, arka uç API’si) bir servis olarak tanımlanır. Her servis, bir Docker görüntüsünden oluşturulur ve kendi ayarlarıyla çalışır.
* Ağlar (Networks): Servislerin birbirleriyle iletişim kurmasını sağlayan sanal ağlardır. Docker Compose, varsayılan olarak tüm servisler için bir köprü ağı oluşturur.
* Birimler (Volumes): Konteynerler yeniden oluşturulduğunda bile verilerin kalıcı olmasını sağlamak için kullanılır.
Örnek Bir Uygulama Oluşturma
1. Proje Dizini Oluşturma: Uygulamanız için yeni bir dizin oluşturun ve içine girin. Bu, uygulamanızın tüm dosyalarını düzenli tutmanıza yardımcı olur.
mkdir my-nginx-postgres-app
cd my-nginx-postgres-app
2. docker-compose.yml Dosyası Oluşturma: Proje dizininizde docker-compose.yml adında bir dosya oluşturun ve aşağıdaki içeriği yapıştırın.
version: '3.8' # Docker Compose dosyasının versiyonu
services:
web: # Nginx servisi
image: nginx:latest # Nginx'in en son sürümünü kullan
ports:
- "80:80" # Host'un 80. portunu konteynerin 80. portuna yönlendir
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d # Özel Nginx yapılandırma dosyalarını bağla
- ./nginx/html:/usr/share/nginx/html # Web sitesi dosyalarını bağla
depends_on:
- db # 'web' servisi 'db' servisi başlamadan başlamaz
restart: always # Konteyner hata verirse veya sistem yeniden başlatılırsa otomatik olarak yeniden başla
db: # PostgreSQL veritabanı servisi
image: postgres:13 # PostgreSQL 13 sürümünü kullan
environment:
POSTGRES_DB: mydatabase # Veritabanı adı
POSTGRES_USER: myuser # Veritabanı kullanıcısı
POSTGRES_PASSWORD: mypassword # Veritabanı parolası
volumes:
- db_data:/var/lib/postgresql/data # Veritabanı verilerini kalıcı bir birime kaydet
restart: always # Konteyner hata verirse veya sistem yeniden başlatılırsa otomatik olarak yeniden başla
volumes: # Tanımlanmış birimler
db_data: # PostgreSQL verileri için adlandırılmış birim
Bu docker-compose.yml dosyası şunları tanımlar:
* web servisi: Nginx’in en son sürümünü kullanır, host’un 80. portunu konteynerin 80. portuna eşler. Özel Nginx yapılandırmaları ve HTML dosyaları için iki adet bind mount (bağlama birimi) kullanır. db servisine bağımlıdır.
* db servisi: PostgreSQL 13 sürümünü kullanır, veritabanı adı, kullanıcı adı ve parolası için ortam değişkenleri ayarlar. Veritabanı verilerinin kalıcılığı için db_data adında bir birim kullanır.
* volumes bölümü: db_data adında, Docker tarafından yönetilen kalıcı bir birim tanımlar.
3. Nginx Yapılandırma ve HTML Dosyalarını Oluşturma: web servisi için gerekli olan Nginx yapılandırma dosyasını ve basit bir HTML dosyasını oluşturalım.
mkdir -p nginx/conf.d
mkdir -p nginx/html
nginx/conf.d/default.conf dosyasını oluşturun ve aşağıdaki içeriği ekleyin:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
location /db-status {
# Bu sadece örnek bir yer tutucudur.
# Gerçek bir uygulamada, veritabanı bağlantısını kontrol eden bir API endpoint'i burada olabilir.
return 200 'Database is probably up and running!\n';
add_header Content-Type text/plain;
}
}
nginx/html/index.html dosyasını oluşturun ve aşağıdaki içeriği ekleyin:
Docker Compose Uygulaması
Nginx web sunucusu ve PostgreSQL veritabanı başarıyla çalışıyor.
Bu sayfa Nginx konteyneri tarafından sunulmaktadır.
Proje dizininizin yapısı şimdi şöyle görünmeli:
my-nginx-postgres-app/
├── docker-compose.yml
└── nginx/
├── conf.d/
│ └── default.conf
└── html/
└── index.html
Uygulamayı Başlatma
Artık her şey hazır olduğuna göre, Docker Compose ile uygulamayı başlatabiliriz. Proje dizininizde olduğunuzdan emin olun.
docker-compose up -d
* up: docker-compose.yml dosyasında tanımlanan tüm servisleri oluşturur ve başlatır.
* -d (detach): Konteynerleri arka planda çalıştırır ve terminali serbest bırakır. Bu olmadan, konteyner günlükleri terminalde gösterilir ve terminali kapatırsanız konteynerler durur.
Komutu çalıştırdıktan sonra, Docker Compose gerekli görüntüleri indirip servisleri oluşturacak ve başlatacaktır. İşlem tamamlandığında, servislerin durumunu kontrol edebilirsiniz:
docker-compose ps
Bu komut, uygulamadaki tüm servislerin durumunu gösterir. Her iki servisin de Up durumunda olduğunu görmelisiniz.
Tarayıcınızda sunucunuzun IP adresini veya localhost adresini ziyaret ederek (eğer yerel bir makinede çalıştırıyorsanız) Nginx web sayfanıza erişebilirsiniz: http://localhost/ veya http:///.
Uygulamayı Durdurma ve Kaldırma
Uygulamanızı durdurmak veya tamamen kaldırmak için aşağıdaki komutları kullanabilirsiniz:
* Uygulamayı durdurma (konteynerleri silmez):
docker-compose stop
Bu komut, çalışan tüm servis konteynerlerini durdurur ancak onları silmez. Daha sonra docker-compose start ile tekrar başlatabilirsiniz.
* Uygulamayı durdurma ve konteynerleri kaldırma (birimleri silmez):
docker-compose down
Bu komut, servislerle ilişkili konteynerleri, ağları ve varsayılan birimleri durdurur ve kaldırır. Ancak, volumes bölümünde tanımladığımız db_data gibi adlandırılmış birimleri kaldırmaz. Bu, veritabanı verilerinizin kalıcı olmasını sağlar.
* Uygulamayı durdurma ve tüm bileşenleri kaldırma (birimler dahil):
docker-compose down -v
-v (volumes) bayrağı, adlandırılmış birimler de dahil olmak üzere tüm birimleri kaldırır. Bu, uygulamanın tüm verilerini ve yapılandırmasını tamamen siler. Üretim ortamlarında dikkatli kullanılmalıdır.
Diğer Faydalı Komutlar
* Servis günlüklerini görüntüleme:
docker-compose logs [servis_adı]
Örneğin, web servisinin günlüklerini görmek için: docker-compose logs web
* Belirli bir servisi yeniden başlatma:
docker-compose restart [servis_adı]
* Belirli bir servisin içine komut çalıştırma:
docker-compose exec [servis_adı] [komut]
Örneğin, PostgreSQL veritabanı konteynerinin içine girip psql komutunu çalıştırmak için:
docker-compose exec db psql -U myuser mydatabase
* Sadece belirli servisleri başlatma:
docker-compose up -d web
Bu, sadece web servisini ve onun bağımlılıklarını (db servisi) başlatır.
Adım 5: Docker Compose Dosyası Yapısı ve En İyi Uygulamalar
docker-compose.yml dosyası, Docker Compose’un gücünün merkezidir. Bu bölüm, dosya yapısının detaylarına ve en iyi uygulamalara odaklanacaktır.
Versiyonlama
docker-compose.yml dosyasının en üstünde version anahtarı bulunur. Bu, Compose dosyasının hangi versiyon formatını kullandığını belirtir.
* version: '3.x' (örneğin 3.8), en güncel ve önerilen versiyonlardır. Docker Swarm gibi orkestrasyon araçlarıyla uyumluluk sağlar ve birçok yeni özelliği destekler.
Servisler (services)
services anahtarı altında uygulamanızın her bir servisini tanımlarsınız. Her servis için temel yapılandırma seçenekleri şunlardır:
* image: Servisin hangi Docker görüntüsünden oluşturulacağını belirtir (örneğin, nginx:latest, postgres:13).
* build: Eğer bir Dockerfile kullanarak özel bir görüntü oluşturmak istiyorsanız kullanılır. Bir dizin yolu veya context ve dockerfile anahtarlarını içeren bir nesne olabilir.
* ports: Host makinesindeki portları konteynerdeki portlara eşler (örneğin, "80:80").
* volumes: Konteyner ile host makinesi arasında veya Docker tarafından yönetilen birimler arasında veri paylaşımını sağlar.
* Bind Mounts: ./nginx/conf.d:/etc/nginx/conf.d gibi, host makinesindeki belirli bir yolu konteynerdeki bir yola bağlar.
* Named Volumes: db_data:/var/lib/postgresql/data gibi, Docker tarafından yönetilen adlandırılmış bir birimi kullanır.
* environment: Konteyner içine aktarılacak ortam değişkenlerini tanımlar (örneğin, POSTGRES_PASSWORD: mypassword). Hassas bilgiler için .env dosyası kullanılması önerilir.
* depends_on: Servisler arasındaki bağımlılıkları tanımlar. Örneğin, web servisinin db servisi başlamadan başlamamasını sağlar. Bu, servislerin doğru sırada başlatılmasına yardımcı olur.
* networks: Servisin hangi ağlara bağlanacağını belirtir.
* restart: Konteynerin ne zaman yeniden başlatılacağını kontrol eder.
* no (varsayılan): Konteyner durduğunda yeniden başlatılmaz.
* always: Konteyner durduğunda veya Docker Daemon yeniden başlatıldığında her zaman yeniden başlatılır.
* on-failure: Konteyner bir hata koduyla (sıfır olmayan bir çıkış kodu) durduğunda yeniden başlatılır.
* unless-stopped: Konteyner manuel olarak durdurulmadığı sürece her zaman yeniden başlatılır.
Ağlar (networks)
networks anahtarı altında özel ağlar tanımlayabilirsiniz. Varsayılan olarak, Docker Compose tüm servisler için bir köprü ağı oluşturur, ancak daha karmaşık senaryolar için özel ağlar tanımlamak faydalı olabilir.
networks:
my_custom_network:
driver: bridge
Ardından servislerinizi bu ağa bağlayabilirsiniz:
services:
web:
networks:
- my_custom_network
db:
networks:
- my_custom_network
Birimler (Volumes) (volumes)
volumes anahtarı altında adlandırılmış birimleri tanımlarsınız. Bu birimler, konteynerler silinse bile verilerin kalıcı olmasını sağlar.
volumes:
db_data:
# driver: local (varsayılan)
# driver_opts:
# type: nfs
# o: addr=192.168.1.1,rw
# device: :/path/to/share
Ortam Değişkenleri ve .env Dosyası
Hassas bilgileri (parolalar, API anahtarları) doğrudan docker-compose.yml dosyasına yazmak yerine, bunları .env adında ayrı bir dosyada saklamak ve Compose dosyasında referans göstermek en iyi uygulamadır.
my-app/.env dosyası:
POSTGRES_PASSWORD=mysecretpassword
docker-compose.yml dosyasında kullanımı:
services:
db:
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # .env dosyasından okunur
En İyi Uygulamalar
* Küçük ve Odaklanmış Servisler: Her servisin tek bir sorumluluğu olmalı. Bu, bakımı kolaylaştırır ve ölçeklenebilirliği artırır.
* Veri Kalıcılığı İçin Birimler Kullanma: Veritabanları ve diğer kalıcı veriler için adlandırılmış birimler kullanın.
* Ortam Değişkenlerini Akıllıca Yönetme: Hassas bilgileri .env dosyalarında veya Docker Secrets gibi daha güvenli yöntemlerle saklayın.
* restart Politikalarını Kullanma: Servislerin beklenmedik durumlarda veya sistem yeniden başlatıldığında otomatik olarak kurtarılmasını sağlamak için uygun restart politikalarını (always veya on-failure) kullanın.
* Versiyon Kontrolü: docker-compose.yml dosyanızı ve ilgili yapılandırma dosyalarını (örneğin Nginx yapılandırmaları) Git gibi bir versiyon kontrol sisteminde saklayın.
Adım 6: Sorun Giderme ve Yaygın Hatalar
Docker Compose ile çalışırken karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
* Port Çakışmaları:
* Hata: ERROR: for web Cannot start service web: driver failed programming external connectivity on endpoint...
* Çözüm: Host makinesinde zaten kullanılan bir portu eşlemeye çalışıyorsunuz. docker-compose.yml dosyasındaki ports bölümünü kontrol edin ve host portunu (ilk sayı) henüz kullanılmayan bir portla değiştirin. Örneğin, 8080:80.
* Docker Daemon Çalışmıyor:
* Hata: Cannot connect to the Docker daemon. Is the docker daemon running on this host?
* Çözüm: Docker servisi çalışmıyor. sudo systemctl start docker komutuyla servisi başlatın ve sudo systemctl enable docker ile otomatik başlamasını sağlayın.
* İzin Hataları (Kullanıcının Docker Grubunda Olmaması):
* Hata: Got permission denied while trying to connect to the Docker daemon socket...
* Çözüm: Kullanıcınız docker grubunda değil veya değişiklikler uygulanmadı. sudo usermod -aG docker $USER komutunu çalıştırın ve ardından oturumu kapatıp açın veya newgrp docker komutunu kullanın.
* YAML Sözdizimi Hataları:
* Hata: ERROR: yaml.scanner.ScannerError: while scanning a simple key veya ERROR: Invalid top-level property "services".
* Çözüm: YAML dosyalarında girintileme (indentation) çok önemlidir. Boşlukları doğru kullandığınızdan emin olun. Sekme (tab) yerine boşluk kullanın. Bir YAML doğrulayıcı (örneğin, online YAML validator) kullanarak dosyanızı kontrol edebilirsiniz.
* Bağımlılık Sorunları (Servislerin Başlamaması):
* Sorun: Bir servis, bağımlı olduğu başka bir servis tamamen hazır olmadan başlamaya çalışıyor ve hata veriyor. Örneğin, uygulama servisi veritabanı başlamadan veritabanı bağlantısı kurmaya çalışıyor.
Çözüm: depends_on sadece başlatma sırasını garanti eder, servisin hazır* olduğunu garanti etmez. Uygulama kodunuzda yeniden deneme mantığı (retry logic) kullanmanız veya Docker Compose’a healthcheck eklemeniz gerekebilir. Örneğin, veritabanı bağlantısı kurana kadar uygulamanın beklemesini sağlayın.
Sonuç
Bu makalede, Rocky Linux 8 işletim sistemi üzerine Docker Engine ve Docker Compose’u nasıl kuracağınızı ve kullanacağınızı detaylı bir şekilde ele aldık. Adım adım kurulum süreçlerini, temel Docker Compose komutlarını ve çoklu konteyner uygulamalarını tanımlamak için docker-compose.yml dosyasının nasıl kullanılacağını öğrendiniz. Ayrıca, Docker Compose dosya yapısının ana bileşenlerini ve en iyi uygulamaları inceledik, böylece daha sağlam ve yönetilebilir Docker Compose projeleri oluşturabilirsiniz.
Docker Compose, geliştirme ve test ortamlarında çoklu konteyner uygulamalarını hızlıca ayağa kaldırmak ve yönetmek için paha biçilmez bir araçtır. Geliştiricilerin karmaşık bağımlılıklarla uğraşmak yerine kod yazmaya odaklanmasını sağlar ve uygulama bileşenlerinin tutarlı bir şekilde dağıtılmasını garanti eder.
Rocky Linux 8’in kararlılığı ve Docker Compose’un esnekliği bir araya geldiğinde, modern uygulama geliştirme ve dağıtım süreçleri için güçlü bir platform sunar. Bu kılavuzu kullanarak, kendi çoklu konteyner uygulamalarınızı Rocky Linux 8 üzerinde başarıyla dağıtabilir ve yönetebilirsiniz.
Sonraki adımlar olarak, Docker Compose’un daha gelişmiş özelliklerini (örneğin, ölçeklendirme, özel ağ yapılandırmaları, extends anahtarı) keşfedebilir veya konteyner orkestrasyonu için Docker Swarm veya Kubernetes gibi araçları inceleyebilirsiniz. Konteyner teknolojileri dünyası sürekli gelişiyor ve Docker Compose bu yolculukta önemli bir başlangıç noktasıdır.
