Nginx’i Docker Konteynerinde Ubuntu 22.04 Üzerinde Çalıştırma
Giriş
Günümüzün hızlı gelişen yazılım dünyasında, uygulamaları tutarlı ve izole ortamlarda dağıtmak ve yönetmek kritik bir öneme sahiptir. Bu noktada Docker, uygulamaları ve bağımlılıklarını tek bir pakette (konteyner) toplama yeteneği sayesinde geliştiriciler ve sistem yöneticileri için vazgeçilmez bir araç haline gelmiştir. Nginx ise, yüksek performanslı, açık kaynaklı bir web sunucusu ve ters proxy sunucusu olarak popülerliğini kanıtlamıştır. Milyonlarca web sitesi, özellikle yüksek trafikli olanlar, Nginx’in hızından, ölçeklenebilirliğinden ve düşük kaynak tüketiminden faydalanmaktadır.
Ubuntu 22.04, güncel ve kararlı bir Linux dağıtımı olarak, Docker ve Nginx gibi modern teknolojileri çalıştırmak için sağlam bir temel sunar. Bu makalede, Nginx’i bir Docker konteyneri içinde Ubuntu 22.04 işletim sistemi üzerinde nasıl çalıştıracağınızı adım adım detaylı bir şekilde anlatacağız. Bu yaklaşım, Nginx’i ana sistemden izole ederek bağımlılık çakışmalarını önler, dağıtımı kolaylaştırır ve farklı ortamlarda tutarlı bir davranış sağlar. Ayrıca, özel konfigürasyonlar kullanmaktan Docker Compose ile yönetime kadar çeşitli senaryoları ele alarak, okuyucuların bu konudaki bilgi birikimini derinleştirmeyi hedefliyoruz.
Ön Koşullar
Bu makaledeki adımları takip edebilmek için aşağıdaki ön koşulların sağlanmış olması gerekmektedir:
* Ubuntu 22.04 İşletim Sistemi: Makalede anlatılan tüm komutlar ve adımlar Ubuntu 22.04 üzerinde test edilmiştir. Farklı bir Linux dağıtımı kullanıyorsanız, bazı komutlar veya paket isimleri farklılık gösterebilir.
* Sudo Ayrıcalıkları: Kurulum ve yapılandırma adımları için sudo ayrıcalıklarına sahip bir kullanıcı hesabına ihtiyacınız olacaktır. Genellikle, yeni bir Ubuntu kurulumunda oluşturulan ilk kullanıcı bu ayrıcalıklara sahiptir.
* İnternet Bağlantısı: Docker paketlerini indirmek ve Nginx Docker imajını çekmek için aktif bir internet bağlantısı gereklidir.
* Temel Linux Komut Bilgisi: Terminalde temel komutları (örneğin, cd, mkdir, nano veya vi) kullanabilme becerisi, bu makaledeki adımları uygulamanızda size yardımcı olacaktır.
Bu ön koşullar sağlandığında, Nginx’i Docker konteyneri içinde çalıştırmak için hazırsınız demektir.
Docker Kurulumu
Nginx’i bir Docker konteynerinde çalıştırmadan önce, sisteminize Docker Engine’i kurmanız gerekmektedir. Aşağıdaki adımlar, Docker’ı Ubuntu 22.04 üzerine güvenli ve doğru bir şekilde kurmanızı sağlayacaktır.
Sistem Güncelleme
Kuruluma başlamadan önce, paket listelerinizi güncellemek ve mevcut paketleri yükseltmek iyi bir uygulamadır. Bu, herhangi bir potansiyel bağımlılık sorununu önlemeye yardımcı olur.
sudo apt update
sudo apt upgrade -y
Gerekli Paketlerin Kurulumu
Docker’ın HTTPS üzerinden depolarla iletişim kurabilmesi için bazı gerekli paketleri kurmanız gerekmektedir.
sudo apt install ca-certificates curl gnupg lsb-release -y
* ca-certificates: Güvenli bir şekilde SSL/TLS bağlantıları kurmak için gereklidir.
* curl: URL’lerden veri transfer etmek için kullanılan bir komut satırı aracıdır. Docker’ın GPG anahtarını indirmek için kullanacağız.
* gnupg: GPG anahtarlarını yönetmek için kullanılır.
* lsb-release: İşletim sistemi sürümü hakkında bilgi sağlar, bu da Docker deposunu doğru bir şekilde eklemek için gereklidir.
Docker GPG Anahtarını ve Depoyu Ekleme
Docker, paketlerinin bütünlüğünü sağlamak için GPG anahtarları kullanır. Bu anahtarı ekleyerek, indirdiğiniz paketlerin resmi ve değiştirilmemiş olduğundan emin olursunuz.
Öncelikle, Docker’ın resmi GPG anahtarını sisteminize ekleyin:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Ardından, Docker deposunu APT kaynak listenize ekleyin. Bu, sisteminizin Docker paketlerini resmi Docker deposundan çekmesini sağlayacaktır.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Bu komut, sisteminizin mimarisine ve Ubuntu sürümüne uygun Docker deposunu ekler.
Depoyu ekledikten sonra, yeni depoyu tanımak için paket listelerinizi tekrar güncelleyin:
sudo apt update
Docker Kurulumu
Artık Docker Engine’i, Containerd’yi ve Docker Compose’u kurmaya hazırsınız.
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
* docker-ce: Docker Engine (Community Edition) ana paketidir.
* docker-ce-cli: Docker komut satırı arayüzüdür.
* containerd.io: Konteyner yaşam döngüsünü yöneten bir konteyner çalışma zamanıdır.
* docker-buildx-plugin: Docker’ın yeni nesil build araçlarını sağlar.
* docker-compose-plugin: Docker Compose’un yeni CLI eklentisi sürümüdür.
Docker Servisini Doğrulama
Kurulum tamamlandıktan sonra, Docker servisinin çalışıp çalışmadığını kontrol edebilirsiniz:
sudo systemctl status docker
Çıktıda active (running) ifadesini görmelisiniz.
Docker’ın doğru şekilde çalıştığını test etmek için, bir test konteyneri çalıştırın:
sudo docker run hello-world
Bu komut, Docker’ın bir test imajını çekip bir konteynerde çalıştırması ve “Hello from Docker!” mesajını görüntülemesiyle sonuçlanmalıdır.
Kullanıcıyı Docker Grubuna Ekleme (İsteğe Bağlı ama Önerilir)
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.
sudo usermod -aG docker $USER
Bu komutu çalıştırdıktan sonra, değişikliğin etkili olması için oturumu kapatıp tekrar açmanız veya sisteminizi yeniden başlatmanız gerekmektedir:
newgrp docker
newgrp docker komutu, geçerli kabuk oturumunuzda docker grubunun yetkilerini hemen uygulamanızı sağlar. Ardından, sudo kullanmadan Docker komutlarını çalıştırıp çalıştıramadığınızı test edebilirsiniz:
docker run hello-world
Eğer sudo olmadan çalışıyorsa, kurulum başarılı demektir.
Nginx Docker Konteynerini Çalıştırma
Docker’ı sisteminize başarıyla kurduktan sonra, Nginx’i bir Docker konteyneri içinde çalıştırmaya hazırsınız demektir. Bu bölümde, Nginx imajını çekme, basit bir konteyner başlatma ve temel doğrulama adımlarını ele alacağız.
Nginx Docker İmajını Çekme
Docker Hub, milyonlarca Docker imajını barındıran bir bulut tabanlı kayıt defteridir. Nginx’in resmi imajı da burada mevcuttur. Nginx imajını yerel sisteminize çekmek için docker pull komutunu kullanın:
docker pull nginx
Bu komut, Nginx’in en son (latest) kararlı sürümünü indirecektir. Belirli bir sürümü çekmek isterseniz, nginx:1.24 gibi etiketleri kullanabilirsiniz. Örneğin: docker pull nginx:1.24. Genellikle, latest etiketi yeterlidir, ancak üretim ortamlarında belirli bir sürümü kilitlemek daha güvenli olabilir.
İmajın başarıyla çekildiğini doğrulamak için, sisteminizdeki tüm Docker imajlarını listeleyebilirsiniz:
docker images
Çıktıda nginx imajını görmelisiniz.
Nginx Konteynerini Başlatma (Basit Çalıştırma)
Nginx imajını çektikten sonra, ondan bir konteyner başlatabilirsiniz. En basit haliyle, Nginx’i varsayılan ayarlarla çalıştırmak için aşağıdaki komutu kullanırız:
docker run -d -p 80:80 --name my-nginx nginx
Bu komuttaki parametreleri inceleyelim:
* -d (detached mode): Konteyneri arka planda çalıştırır. Terminalinizi serbest bırakır ve konteynerin çıktısını doğrudan ekrana basmaz.
* -p 80:80: Port eşlemesi yapar. Bu, ana makinenizin (Ubuntu 22.04) 80 numaralı portuna gelen istekleri, konteynerin içindeki Nginx’in dinlediği 80 numaralı porta yönlendirir. İlk 80 ana makine portu, ikinci 80 konteyner portudur. İsterseniz ana makine portunu değiştirebilirsiniz, örneğin -p 8080:80 ile Nginx’e 8080 portundan erişebilirsiniz.
* --name my-nginx: Konteynerinize my-nginx adını verir. Bu, konteyneri daha sonra yönetirken (durdurma, başlatma, kaldırma) kolayca referans almanızı sağlar. Bir isim belirtmezseniz, Docker otomatik olarak rastgele bir isim atar.
* nginx: Çalıştırılacak Docker imajının adıdır.
Çalışan Nginx Konteynerini Doğrulama
Konteyneri başlattıktan sonra, çalışır durumda olup olmadığını kontrol edebilirsiniz:
docker ps
Bu komut, çalışan tüm Docker konteynerlerini listeler. Çıktıda my-nginx adında, nginx imajından oluşturulmuş ve 80 numaralı portu eşlenmiş bir konteyner görmelisiniz.
Şimdi bir web tarayıcısı açın ve sunucunuzun IP adresini veya localhost adresini ziyaret edin:
http://localhost
veya sunucunuzun IP adresi:
http://SUNUCU_IP_ADRESINIZ
Nginx’in varsayılan “Welcome to nginx!” sayfasını görmelisiniz. Bu, Nginx’in Docker konteyneri içinde başarıyla çalıştığını gösterir.
Nginx Konteynerini Durdurma ve Kaldırma
Bir konteyneri durdurmak veya kaldırmak için adını veya ID’sini kullanabilirsiniz.
Konteyneri durdurmak için:
docker stop my-nginx
Durdurulan konteyner hala sisteminizde mevcuttur ancak çalışmıyordur. docker ps -a komutuyla tüm konteynerleri (çalışan ve durdurulan) görebilirsiniz.
Konteyneri tamamen kaldırmak için (durdurulduktan sonra):
docker rm my-nginx
Eğer çalışan bir konteyneri kaldırmak isterseniz, -f (force) bayrağını kullanabilirsiniz, ancak önce durdurmak daha iyi bir uygulamadır:
docker rm -f my-nginx
Bu adımlar, Nginx’i Docker konteynerinde temel seviyede nasıl çalıştıracağınızı göstermektedir. Ancak çoğu zaman, özel Nginx yapılandırmalarına veya web içeriğine ihtiyacınız olacaktır. Bir sonraki bölümde bu konuyu ele alacağız.
Özel Nginx Konfigürasyonu Kullanma
Varsayılan Nginx kurulumu çoğu senaryo için yeterli olmayabilir. Kendi web sitenizi barındırmak, ters proxy kurmak veya SSL/TLS yapılandırmak gibi durumlarda özel Nginx konfigürasyon dosyalarına ihtiyacınız olacaktır. Docker, bu tür özel konfigürasyonları kolayca entegre etmenizi sağlayan “volume mounting” özelliğini sunar. Bu bölümde, kendi Nginx konfigürasyonunuzu ve statik web içeriğinizi nasıl kullanacağınızı göstereceğiz.
Nginx Konfigürasyon Dosyası Oluşturma
İlk olarak, Nginx için özel bir konfigürasyon dosyası oluşturmalıyız. Nginx’in Docker imajı, genellikle /etc/nginx/conf.d/default.conf dosyasını kullanarak sunucu bloklarını yapılandırır. Kendi özel konfigürasyonumuzu bu yola bağlayacağız.
Yerel sisteminizde, örneğin ev dizininizde bir nginx-config klasörü oluşturalım:
mkdir ~/nginx-config
Şimdi bu klasörün içine default.conf adında bir dosya oluşturalım ve basit bir sunucu bloğu tanımlayalım. Bu örnekte, Nginx’in varsayılan web kök dizini olan /usr/share/nginx/html içindeki index.html dosyasını sunmasını sağlayacağız.
nano ~/nginx-config/default.conf
Aşağıdaki içeriği dosyaya yapıştırın:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Bu basit konfigürasyon, 80 numaralı porttan gelen istekleri dinler ve /usr/share/nginx/html dizinindeki dosyaları sunar. Ctrl+X, Y ve Enter tuşlarına basarak dosyayı kaydedin ve kapatın.
Statik Web İçeriği Oluşturma
Nginx’in sunacağı bir index.html dosyasına ihtiyacımız var. Bunu da aynı şekilde yerel sistemimizde bir klasörde oluşturalım.
mkdir ~/nginx-html
nano ~/nginx-html/index.html
Aşağıdaki içeriği index.html dosyasına yapıştırın:
Nginx Docker Konteynerinde
Bu sayfa, özel bir Nginx konfigürasyonu ve statik HTML içeriği kullanılarak Docker konteyneri içinden sunulmaktadır.
Başarılı bir şekilde yapılandırdınız!
Kaydedin ve kapatın. Artık Nginx’in kullanacağı özel bir konfigürasyon dosyasına ve statik bir web sayfasına sahibiz.
Özel Konfigürasyon ile Nginx Konteynerini Çalıştırma
Şimdi bu dosyaları Docker konteynerine “volume mounting” (cilt bağlama) kullanarak bağlayacağız. Bu, yerel sistemimizdeki dosyaların konteynerin belirli bir yoluna yansıtılmasını sağlar. Böylece, yerel dosyalarda yaptığınız değişiklikler konteynerde de anında etkili olur.
Önceki Nginx konteynerini durdurup kaldıralım (eğer çalışıyorsa):
docker stop my-nginx
docker rm my-nginx
Şimdi özel konfigürasyon ve içerikle yeni bir Nginx konteyneri başlatalım:
docker run -d \
-p 80:80 \
--name custom-nginx \
-v ~/nginx-config/default.conf:/etc/nginx/conf.d/default.conf \
-v ~/nginx-html:/usr/share/nginx/html \
nginx
Bu komuttaki yeni parametreleri inceleyelim:
* -v ~/nginx-config/default.conf:/etc/nginx/conf.d/default.conf: Bu kısım, yerel sistemimizdeki ~/nginx-config/default.conf dosyasını, konteynerin içindeki /etc/nginx/conf.d/default.conf dosyasına bağlar. Nginx, genellikle bu dizindeki .conf uzantılı dosyaları otomatik olarak yükler.
* -v ~/nginx-html:/usr/share/nginx/html: Bu kısım ise yerel sistemimizdeki ~/nginx-html dizinini, konteynerin içindeki /usr/share/nginx/html dizinine bağlar. Nginx’in varsayılan web kök dizini burasıdır.
Önemli Not: -v parametresinde yerel yollar için mutlak yolları kullanmak daha güvenlidir. ~ yerine /home/kullanici_adiniz gibi tam yolu yazabilirsiniz. Örneğin: -v /home/kullanici_adiniz/nginx-config/default.conf:/etc/nginx/conf.d/default.conf.
Özel Konfigürasyonu Doğrulama
Konteynerin çalışır durumda olduğunu kontrol edin:
docker ps
Şimdi bir web tarayıcısı açın ve http://localhost adresini ziyaret edin. Bu sefer Nginx’in varsayılan “Welcome to nginx!” sayfası yerine, kendi oluşturduğunuz “Merhaba Docker Nginx!” başlıklı sayfayı görmelisiniz. Bu, Nginx’in özel konfigürasyon dosyanızı ve statik web içeriğinizi başarıyla kullandığı anlamına gelir.
Eğer Nginx konfigürasyonunuzda bir hata varsa, konteyner başlamayabilir veya hata verebilir. Konteynerin loglarını kontrol etmek için:
docker logs custom-nginx
Bu komut, Nginx’in başlarken karşılaştığı sorunları veya çalışma zamanındaki çıktıları görmenizi sağlar. Konfigürasyonunuzu değiştirmeniz gerekirse, yerel dosyanızı düzenleyin ve konteyneri yeniden başlatın:
docker restart custom-nginx
Bu bölüm, Nginx’i kendi özel yapılandırmanız ve içeriğinizle Docker konteynerinde nasıl çalıştıracağınızı gösterdi. Bu yaklaşım, esneklik sağlar ve uygulamalarınızın gereksinimlerine göre Nginx’i tamamen özelleştirmenize olanak tanır.
Docker Compose ile Nginx Yönetimi
Birden fazla Docker konteynerini (örneğin, Nginx, bir uygulama sunucusu ve bir veritabanı) aynı anda yönetmek gerektiğinde, docker run komutlarını tek tek çalıştırmak zahmetli ve hataya açık olabilir. Docker Compose, çoklu konteyner Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Tek bir YAML dosyası kullanarak tüm servislerinizi yapılandırabilir, başlatabilir ve yönetebilirsiniz.
Docker Compose Kurulumu
Ubuntu 22.04’te Docker Engine ile birlikte Docker Compose eklentisi de kurulur. Kurulumu Docker kurulumu kısmında docker-compose-plugin ile yapmıştık. docker compose komutunu kullanarak kontrol edebilirsiniz:
docker compose version
Eğer bir sürüm numarası görüyorsanız, Docker Compose başarıyla kurulmuş demektir.
docker-compose.yml Dosyası Oluşturma
Şimdi, Nginx konteynerimizi Docker Compose ile tanımlamak için bir docker-compose.yml dosyası oluşturalım. Bu dosya, önceki bölümde elle yaptığımız konfigürasyonları (port eşleme, volume mounting, konteyner adı) içerecektir.
Öncelikle, projeniz için yeni bir klasör oluşturun ve içine girin:
mkdir ~/nginx-docker-compose
cd ~/nginx-docker-compose
Daha önce oluşturduğumuz ~/nginx-config ve ~/nginx-html klasörlerini bu yeni klasöre kopyalayabilir veya sembolik bağlar oluşturabilirsiniz. Basitlik adına, bu klasörleri nginx-docker-compose dizininin içine kopyalayalım:
cp -r ~/nginx-config .
cp -r ~/nginx-html .
Şimdi docker-compose.yml dosyasını oluşturun:
nano docker-compose.yml
Aşağıdaki içeriği dosyaya yapıştırın:
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: compose-nginx
ports:
- "80:80"
volumes:
- ./nginx-config/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx-html:/usr/share/nginx/html
restart: always
Bu docker-compose.yml dosyasındaki parametreleri inceleyelim:
* version: '3.8': Docker Compose dosyasının sürümünü belirtir. En güncel ve önerilen sürümü kullanıyoruz.
* services:: Tanımlanacak tüm servisleri (konteynerleri) içerir.
* nginx:: Servisimizin adıdır. Bu ismi istediğiniz gibi değiştirebilirsiniz.
* image: nginx:latest: Bu servis için kullanılacak Docker imajını belirtir. Nginx’in en son sürümünü kullanıyoruz.
* container_name: compose-nginx: Konteynerin adını compose-nginx olarak ayarlar.
* ports:: Port eşlemelerini tanımlar. "80:80" ana makine 80 portunu konteyner 80 portuna eşler.
* volumes:: Volume mounting’leri tanımlar.
* ./nginx-config/default.conf:/etc/nginx/conf.d/default.conf: Mevcut dizindeki nginx-config/default.conf dosyasını konteynerin içindeki Nginx konfigürasyon yoluna bağlar. ./ mevcut dizini temsil eder.
* ./nginx-html:/usr/share/nginx/html: Mevcut dizindeki nginx-html klasörünü konteynerin içindeki Nginx web kök dizinine bağlar.
* restart: always: Konteynerin her zaman otomatik olarak yeniden başlatılmasını sağlar (sistem yeniden başlatıldığında veya konteyner çöktüğünde).
Dosyayı kaydedin ve kapatın.
Docker Compose ile Nginx’i Başlatma
docker-compose.yml dosyasının bulunduğu dizinde olduğunuzdan emin olun ve aşağıdaki komutu çalıştırın:
docker compose up -d
* up: docker-compose.yml dosyasında tanımlanan servisleri oluşturur ve başlatır.
* -d (detached mode): Servisleri arka planda çalıştırır.
Bu komutu çalıştırdıktan sonra, Docker Compose Nginx imajını çekecek (eğer daha önce çekilmediyse), compose-nginx adında bir konteyner oluşturacak ve onu başlatacaktır.
Konteynerin çalıştığını doğrulamak için:
docker ps
compose-nginx adında bir konteyner görmelisiniz. Web tarayıcınızda http://localhost adresini ziyaret ederek özel HTML sayfanızın yüklendiğini teyit edin.
Docker Compose ile Nginx’i Durdurma ve Kaldırma
Docker Compose ile başlatılan servisleri durdurmak ve kaldırmak da çok kolaydır.
Servisleri durdurmak için (konteynerler hala varlığını sürdürür):
docker compose stop
Servisleri durdurmak ve tamamen kaldırmak için (konteynerler, ağlar ve volume’ler kaldırılır):
docker compose down
Bu komut, mevcut dizindeki docker-compose.yml dosyasında tanımlanan tüm servisleri durdurur ve kaldırır.
Docker Compose ile Gelişmiş Konfigürasyon Örnekleri (Birden Fazla Servis)
Docker Compose’un gücü, birden fazla servisi bir arada yönetebilmesidir. Örneğin, bir Nginx ters proxy’nin arkasında bir Node.js veya PHP-FPM uygulamasını çalıştırabilirsiniz. İşte basit bir örnek:
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: compose-nginx
ports:
- "80:80"
volumes:
- ./nginx-config/nginx-app.conf:/etc/nginx/conf.d/default.conf
- ./nginx-html:/usr/share/nginx/html # Statik içerik için
depends_on:
- app
restart: always
app:
image: php:8.2-fpm # Örnek olarak PHP-FPM
container_name: compose-php-app
volumes:
- ./nginx-html:/var/www/html # Uygulama kodunun olduğu dizin
restart: always
Bu örnekte:
* nginx servisi, app servisine bağımlıdır (depends_on: - app).
* Nginx, nginx-app.conf dosyasını kullanarak gelen istekleri app servisine yönlendirebilir (örneğin, PHP-FPM soketi üzerinden).
* app servisi (PHP-FPM), web içeriğini Nginx ile aynı volume’den okur.
Bu yapı, bir web uygulaması için tipik bir mikroservis mimarisinin temelini oluşturur ve Docker Compose ile yönetimi oldukça basitleştirir.
Sıkça Sorulan Sorular (SSS)
Nginx’i Docker konteynerinde çalıştırırken karşılaşılabilecek bazı yaygın sorular ve sorun giderme ipuçları aşağıdadır.
Nginx konteyneri neden başlamıyor?
* Port Çakışması: En yaygın nedenlerden biri, ana makinedeki 80 numaralı portun zaten başka bir servis (örneğin, zaten çalışan başka bir Nginx veya Apache) tarafından kullanılıyor olmasıdır. docker run -p 8080:80 ... veya netstat -tulnp | grep 80 komutuyla 80 numaralı portu kullanan servisi kontrol edebilirsiniz.
* Konfigürasyon Hatası: Nginx konfigürasyon dosyanızda (örneğin, default.conf) bir sözdizimi hatası olabilir. Konteynerin loglarını docker logs komutuyla kontrol edin. Nginx, hatalı bir konfigürasyon dosyasıyla başlamayı reddeder.
* Volume Mounting Sorunları: Yanlış yerel yol veya konteyner içi yol belirtimi, Nginx’in konfigürasyon veya web içeriği dosyalarına erişememesine neden olabilir. Yolların doğru ve mutlak olduğundan emin olun.
* İmaj Sorunu: Çektiğiniz Nginx imajı bozuk olabilir veya belirli bir sürümle uyumsuzluk yaşıyor olabilirsiniz. Farklı bir Nginx imaj sürümünü denemeyi düşünebilirsiniz.
Nginx konteynerime nasıl SSH yapabilirim?
Docker konteynerleri genellikle SSH sunucusu içermez ve bu, Docker felsefesine aykırıdır. Konteynerler hafif ve tek bir amaca yönelik olmalıdır. Ancak, sorun giderme veya içini inceleme amacıyla bir kabuk oturumu başlatabilirsiniz:
docker exec -it bash
veya
docker exec -it sh
Bu komut, çalışan konteynerin içine bir bash veya sh kabuğu açar. İşlemlerinizi tamamladıktan sonra exit yazarak çıkabilirsiniz.
Nginx konteyner loglarını nasıl görüntüleyebilirim?
Konteynerin standart çıktı (stdout) ve standart hata (stderr) akışlarını görüntülemek için docker logs komutunu kullanın:
docker logs
Canlı logları takip etmek için -f (follow) bayrağını kullanabilirsiniz:
docker logs -f
Bu, sorun giderme sırasında çok faydalıdır.
Nginx konteynerini her sistem başlangıcında nasıl otomatik başlatırım?
docker run komutuna --restart always bayrağını ekleyerek bunu sağlayabilirsiniz:
docker run -d -p 80:80 --name my-nginx --restart always nginx
Eğer Docker Compose kullanıyorsanız, docker-compose.yml dosyasındaki servis tanımına restart: always eklemeniz yeterlidir, makaledeki örnekte bu zaten mevcuttur.
Nginx konteynerini güncellemek için ne yapmalıyım?
Nginx imajını güncellemek için aşağıdaki adımları izleyebilirsiniz:
1. Mevcut Nginx konteynerini durdurun ve kaldırın:
docker stop
docker rm
Eğer Docker Compose kullanıyorsanız:
docker compose down
2. Nginx imajının en son sürümünü çekin:
docker pull nginx:latest
Eğer belirli bir sürümü kullanıyorsanız, o sürümü belirtin (örneğin, docker pull nginx:1.24).
3. Nginx konteynerini yeni imajla yeniden başlatın:
docker run -d -p 80:80 --name my-nginx --restart always -v ... nginx
Eğer Docker Compose kullanıyorsanız:
docker compose up -d
Docker Compose, yeni bir imajın çekilip çekilmeyeceğini otomatik olarak kontrol eder, ancak emin olmak için docker compose pull komutunu up komutundan önce çalıştırabilirsiniz.
Bu işlemler, Nginx’in en güncel sürümünü kullanmanızı sağlar.
Sonuç
Bu kapsamlı makalede, Nginx’i Docker konteyneri içinde Ubuntu 22.04 üzerinde çalıştırmanın tüm detaylarını adım adım inceledik. Docker’ın kurulumundan başlayarak, Nginx’in temel bir konteynerde çalıştırılmasına, özel konfigürasyon ve statik içeriklerle özelleştirilmesine ve son olarak Docker Compose ile çoklu konteyner uygulamalarının yönetimine kadar geniş bir yelpazeyi ele aldık.
Docker, Nginx gibi servisleri izole, taşınabilir ve ölçeklenebilir bir şekilde dağıtmak için güçlü bir platform sunar. Bu yaklaşım, bağımlılık çakışmalarını ortadan kaldırır, geliştirme ve üretim ortamları arasında tutarlılık sağlar ve sistem kaynaklarını daha verimli kullanmanıza olanak tanır. Özel konfigürasyonlar ve volume mounting sayesinde, Nginx’i ihtiyaçlarınıza göre tamamen özelleştirebilirsiniz. Docker Compose ise, daha karmaşık web uygulamalarını (örneğin, Nginx, PHP-FPM ve bir veritabanı içeren bir LAMP/LEMP yığını) tek bir YAML dosyasıyla kolayca tanımlamanıza ve yönetmenize olanak tanıyarak verimliliği artırır.
Bu makalede edindiğiniz bilgilerle, Nginx’i Docker konteynerlerinde güvenle çalıştırabilir, web sitelerinizi ve uygulamalarınızı daha modern ve esnek bir altyapı üzerinde barındırabilirsiniz. Docker ve Nginx’in birleşimi, günümüzün dinamik web ortamlarında yüksek performanslı ve yönetilebilir çözümler sunmak için güçlü bir kombinasyondur. Bu temel bilgileri kullanarak, ters proxy kurulumları, yük dengeleme, SSL/TLS sonlandırma ve daha fazlası gibi daha gelişmiş Nginx senaryolarına geçiş yapabilirsiniz.
