Takip et

Nginx’i Docker Konteynerinde Ubuntu 22.04 Üzerinde Çalıştırma

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

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.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.