Takip et

Debian 9 Üzerine Docker Kurulumu ve Kullanımı: Kapsamlı Bir Rehber

Debian 9 Üzerine Docker Kurulumu ve Kullanımı: Kapsamlı Bir Rehber Debian 9 (“Stretch”) her ne kadar artık eski bir sürüm olsa da, belirli leg

Debian 9 Üzerine Docker Kurulumu ve Kullanımı: Kapsamlı Bir Rehber

Debian 9 (“Stretch”) her ne kadar artık eski bir sürüm olsa da, belirli legacy sistemlerde veya özel gereksinimleri olan ortamlarda hala kullanılabilmektedir. Bu makale, Debian 9 işletim sistemi üzerine Docker’ı nasıl kuracağınızı ve temelden ileri seviyeye doğru nasıl kullanacağınızı adım adım açıklamaktadır. Docker, uygulamaları ve bağımlılıklarını izole edilmiş, taşınabilir konteynerler içinde paketlemeye olanak tanıyan güçlü bir platformdur. Bu sayede, “benim makinemde çalışıyordu” sorununu ortadan kaldırarak geliştirme, test ve üretim ortamları arasında tutarlılık sağlar.

Giriş: Docker Nedir ve Neden Kullanmalıyız?

Docker, uygulamaları ve onların tüm bağımlılıklarını (kütüphaneler, ayarlar, diğer yazılımlar vb.) hafif, taşınabilir ve kendi kendine yeten birimler olan “konteynerler” içinde paketlemeyi sağlayan açık kaynaklı bir platformdur. Sanal makinelerin aksine, Docker konteynerleri işletim sistemini sanallaştırmaz; bunun yerine, ana bilgisayarın Linux çekirdeğini paylaşır. Bu durum, konteynerlerin çok daha hızlı başlamasını ve çok daha az kaynak tüketmesini sağlar.

Docker Kullanmanın Başlıca Faydaları:

* Tutarlılık: Geliştirme, test ve üretim ortamları arasında tutarlılık sağlar. Bir uygulamanın her yerde aynı şekilde çalışacağını garanti eder.
* İzolasyon: Konteynerler birbirinden izole çalışır. Bir konteynerdeki sorunlar diğerlerini veya ana sistemi etkilemez.
* Taşınabilirlik: Bir konteyner imajı oluşturulduğunda, bu imaj herhangi bir Docker yüklü sistemde sorunsuz bir şekilde çalıştırılabilir.
* Hız: Konteynerler saniyeler içinde başlar, bu da geliştirme ve dağıtım süreçlerini hızlandırır.
* Verimlilik: Sanal makinelere göre daha az kaynak tüketirler, bu da sunucu kaynaklarının daha verimli kullanılmasına olanak tanır.
* Kolay Dağıtım: Uygulamaların dağıtımını basitleştirir ve karmaşık bağımlılık yönetimini ortadan kaldırır.

Bu rehberde, Debian 9 sisteminizde Docker’ı kuracak, temel komutlarını öğrenecek, kendi imajlarınızı oluşturacak, Docker Compose ile çoklu konteyner uygulamalarını yönetecek ve veri yönetimi ile ağ yapılandırması gibi konulara değineceğiz.

Ön Gereksinimler

Docker kurulumuna başlamadan önce aşağıdaki gereksinimlerin karşılandığından emin olun:

* Debian 9 (Stretch) İşletim Sistemi: Makale özellikle Debian 9’u hedeflemektedir. Güncel Debian sürümleri için kurulum adımları benzer olsa da, bazı paket isimleri veya depo URL’leri farklılık gösterebilir.
* Sudo Yetkileri: Kurulum ve yönetim işlemleri için sudo yetkilerine sahip bir kullanıcıya ihtiyacınız olacaktır.
* İnternet Bağlantısı: Docker paketlerini ve imajlarını indirmek için aktif bir internet bağlantısı gereklidir.
* Temel Linux Komut Satırı Bilgisi: Terminalde komut çalıştırma konusunda temel bilgi sahibi olmanız beklenir.

Docker Kurulumu

Debian 9 üzerine Docker’ı kurmanın en güvenli ve önerilen yolu, Docker’ın resmi deposunu kullanmaktır. Bu sayede her zaman en güncel ve kararlı sürümü alırsınız.

Mevcut Docker Sürümlerini Kaldırma (Opsiyonel)

Eğer sisteminizde daha önce Docker’ın eski veya farklı bir sürümü kuruluysa, yeni bir kurulumdan önce bunları kaldırmak iyi bir uygulamadır. Bu adım, potansiyel çakışmaları önler.

sudo apt-get remove docker docker-engine docker.io containerd runc

Bu komut, Docker’ın bilinen tüm eski paketlerini sisteminizden kaldıracaktır. Konteynerler, imajlar, volümler veya ağ yapılandırmaları gibi verileriniz bu işlemle otomatik olarak silinmez.

Gerekli Paketleri Yükleme

Docker deposunu kullanabilmek için bazı temel paketlere ihtiyacımız var. Bu paketler, HTTPS üzerinden güvenli bağlantı kurmayı ve GPG anahtarlarını yönetmeyi sağlar.

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

* apt-transport-https: APT’nin HTTPS üzerinden depoları kullanmasını sağlar.
* ca-certificates: SSL/TLS bağlantıları için gerekli CA sertifikalarını içerir.
* curl: URL’lerden veri transferi için bir komut satırı aracıdır. GPG anahtarını indirmek için kullanacağız.
* gnupg2: GPG anahtarlarını yönetmek için kullanılır.
* software-properties-common: Depo eklemek için kullanılan add-apt-repository komutunu sağlar.

Docker GPG Anahtarını Ekleme

Docker’ın resmi deposundan indirilen paketlerin güvenilirliğini doğrulamak için Docker’ın GPG anahtarını sistemimize eklememiz gerekir.

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Bu komut, Docker’ın resmi GPG anahtarını indirir ve apt-key add komutuyla sisteminize ekler. Anahtar başarıyla eklendiğinde OK çıktısını görmelisiniz.

Docker Deposu Ekleme

Şimdi, Docker’ın kararlı (stable) deposunu APT kaynak listemize eklememiz gerekiyor. Debian 9 için doğru depo URL’sini kullandığınızdan emin olun.

echo "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable" | sudo tee /etc/apt/sources.list.d/docker.list

* deb [arch=amd64]: Bu depo sadece 64-bit (amd64) mimarisi için paketler içerir.
* https://download.docker.com/linux/debian: Docker’ın Debian için resmi depo URL’si.
* stretch: Debian 9’un kod adıdır. Doğru sürüm kod adını kullanmak önemlidir.
* stable: Kararlı (stable) sürüm deposunu kullanacağımızı belirtir.

Depoyu ekledikten sonra, yeni paket kaynaklarını tanımak için APT paket indeksini güncellemelisiniz:

sudo apt-get update

Docker Engine’i Kurma

Artık Docker Engine’i ve ilgili bileşenleri kurmaya hazırız.

sudo apt-get install docker-ce docker-ce-cli containerd.io

* docker-ce: Docker Engine’in topluluk sürümü.
* docker-ce-cli: Docker komut satırı arayüzü.
* containerd.io: Konteynerlerin yaşam döngüsünü yöneten bir konteyner çalışma zamanı.

Kurulum tamamlandığında, Docker servisi otomatik olarak başlayacak ve sistem başlangıcında da çalışacak şekilde ayarlanacaktır. Servisin durumunu kontrol edebilirsiniz:

sudo systemctl status docker

Çıktıda active (running) ibaresini görmelisiniz.

Kurulumu Doğrulama

Docker’ın doğru bir şekilde kurulup kurulmadığını test etmek için hello-world imajını çalıştırabilirsiniz:

sudo docker run hello-world

Bu komut, Docker’ın hello-world imajını indirir (eğer yerel olarak yoksa), bu imajdan bir konteyner oluşturur, çalıştırır ve çıktıyı terminale yazdırır. Başarılı bir kurulumda, aşağıdaki gibi bir mesaj görmelisiniz:

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Docker’ı Sudo Olmadan Kullanma

Varsayılan olarak, Docker komutlarını çalıştırmak için sudo kullanmanız gerekir. Bu, güvenlik nedenleriyle böyledir. Ancak, Docker’ı sık kullanacak bir kullanıcı için her komutun başına sudo yazmak zahmetli olabilir. Kullanıcınızı docker grubuna ekleyerek bu kısıtlamayı kaldırabilirsiniz.

sudo usermod -aG docker $USER

* usermod: Kullanıcı özelliklerini değiştirmek için kullanılır.
* -aG: Kullanıcıyı belirtilen gruba ekler (-a eklemek, -G grup belirtmek).
* docker: Eklenilecek grup adı.
* $USER: Mevcut oturum açmış kullanıcının kullanıcı adı.

Bu değişikliğin etkili olması için oturumunuzu kapatıp tekrar açmanız veya sisteminizi yeniden başlatmanız gerekir. Alternatif olarak, aşağıdaki komutu kullanarak yeni grup üyeliğini uygulayabilirsiniz (ancak oturumu kapatıp açmak en garantili yoldur):

newgrp docker

Oturumunuzu yeniden başlattıktan sonra, sudo kullanmadan docker run hello-world komutunu tekrar deneyin.

docker run hello-world

Eğer komut sorunsuz çalışırsa, Docker’ı artık sudo olmadan kullanabilirsiniz.

Docker Temelleri: İlk Adımlar

Docker’ı kurduğunuza ve kullanmaya hazır olduğunuza göre, temel Docker kavramlarını ve komutlarını inceleyelim.

Docker İmajları

Docker imajları, bir uygulamanın ve onun bağımlılıklarının anlık görüntüsüdür. Bir imaj, bir konteyneri çalıştırmak için gereken her şeyi içerir: kod, çalışma zamanı, sistem araçları, sistem kütüphaneleri ve ayarlar. İmajlar sabittir ve değişmez.

İmaj Arama

Docker Hub’da (Docker’ın resmi imaj deposu) veya diğer özel depolarda imaj arayabilirsiniz.

docker search ubuntu

Bu komut, “ubuntu” anahtar kelimesini içeren tüm Docker imajlarını listeler.

İmaj İndirme

Bir imajı yerel makinenize indirmek için docker pull komutunu kullanırsınız. Eğer bir etiket (tag) belirtmezseniz, varsayılan olarak latest etiketi indirilir.

docker pull ubuntu:18.04 # Ubuntu 18.04 imajını indir
docker pull nginx         # Nginx'in en son (latest) imajını indir
İmajları Listeleme

Yerel sisteminizde bulunan tüm imajları görmek için:

docker images

Çıktıda imaj adı, etiketi, imaj ID’si, oluşturulma tarihi ve boyutu gibi bilgiler yer alır.

İmaj Silme

Artık ihtiyacınız olmayan bir imajı silmek için docker rmi komutunu kullanın. Önce o imajdan çalışan tüm konteynerleri durdurup silmeniz gerekebilir.

docker rmi ubuntu:18.04

Docker Konteynerleri

Konteynerler, bir Docker imajının çalıştırılabilir örnekleridir. Bir imajdan birden fazla konteyner çalıştırabilirsiniz. Her konteyner birbirinden izole edilmiş, kendi dosya sistemi, ağ arayüzü ve işlem alanı olan bir ortamdır.

Konteyner Çalıştırma

Bir imajdan konteyner çalıştırmak için docker run komutunu kullanırız.

docker run -it ubuntu:18.04 bash

* -it: Etkileşimli bir terminal (-i) ayırır ve sahte bir TTY (-t) bağlar. Bu, konteyner içinde komut çalıştırmanıza olanak tanır.
* ubuntu:18.04: Çalıştırılacak imaj.
* bash: Konteyner başlatıldığında çalıştırılacak komut. Bu örnekte, Ubuntu konteyneri içinde bir Bash kabuğu açarız.

Konteynerden çıkmak için exit yazıp Enter tuşuna basın. Konteyner duracaktır.

Arka Planda Konteyner Çalıştırma (Detached Mode)

Bir konteyneri arka planda, yani detached modda çalıştırmak için -d bayrağını kullanın.

docker run -d --name benim-nginx -p 8080:80 nginx

* -d: Konteyneri arka planda çalıştırır ve konteyner ID’sini döndürür.
* --name benim-nginx: Konteynere benim-nginx adını verir. Konteynerleri isimleriyle yönetmek daha kolaydır.
* -p 8080:80: Ana makinenin 8080 portunu konteynerin 80 portuna eşler. Böylece ana makineden http://localhost:8080 adresine erişerek Nginx sunucusuna ulaşabilirsiniz.
* nginx: Çalıştırılacak Nginx imajı.

Çalışan Konteynerleri Listeleme

Şu anda çalışan tüm konteynerleri görmek için:

docker ps

Durdurulmuş dahil tüm konteynerleri görmek için:

docker ps -a
Konteyner Durdurma, Başlatma ve Yeniden Başlatma

Bir konteyneri durdurmak, başlatmak veya yeniden başlatmak için konteyner ID’sini veya adını kullanabilirsiniz.

docker stop benim-nginx    # Konteyneri durdur
docker start benim-nginx   # Durdurulmuş konteyneri başlat
docker restart benim-nginx # Konteyneri yeniden başlat
Konteyner Silme

Durdurulmuş bir konteyneri silmek için docker rm komutunu kullanın. Çalışan bir konteyneri silmek için -f (force) bayrağını eklemeniz gerekir, ancak önce durdurmak daha iyi bir yaklaşımdır.

docker rm benim-nginx
Konteyner İçine Girme

Çalışan bir konteynerin içine girip komut çalıştırmak için docker exec komutunu kullanın.

docker exec -it benim-nginx bash

Bu komut, benim-nginx konteyneri içinde yeni bir Bash kabuğu başlatır ve sizi o kabuğa bağlar.

Konteyner Loglarını Görüntüleme

Bir konteynerin standart çıktı ve standart hata akışlarını (loglarını) görmek için:

docker logs benim-nginx

Gerçek zamanlı logları takip etmek için -f (follow) bayrağını kullanabilirsiniz:

docker logs -f benim-nginx

Docker Compose Kullanımı

Gerçek dünya uygulamaları genellikle birden fazla servisten oluşur (örneğin, bir web sunucusu, bir veritabanı, bir önbellek servisi). 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 uygulama servislerinizi yapılandırabilir ve tek bir komutla hepsini başlatabilir veya durdurabilirsiniz.

Docker Compose Kurulumu

Debian 9’da Docker Compose’u kurmanın birkaç yolu vardır. En kolay yol, APT deposundan kurmaktır:

sudo apt-get install docker-compose

Eğer bu komut en güncel sürümü kurmazsa veya belirli bir sürümü istiyorsanız, Docker’ın GitHub deposundan manuel olarak indirebilirsiniz:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Not: 1.29.2 yerine Docker Compose’un en son kararlı sürümünü kullanmanız önerilir. En son sürümü GitHub sayfasından kontrol edebilirsiniz.

Kurulumu doğrulayın:

docker-compose --version

Basit Bir Docker Compose Uygulaması

Aşağıda, bir Nginx web sunucusu ve basit bir Python Flask uygulamasından oluşan bir docker-compose.yml dosyası örneği verilmiştir.

Önce, proje dizinimizi oluşturalım:

mkdir my_flask_nginx_app
cd my_flask_nginx_app

Şimdi bir Flask uygulaması oluşturalım: app.py

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Merhaba, Docker Compose ile Flask ve Nginx!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Bu Flask uygulamasının bağımlılıklarını içeren requirements.txt dosyası:

Flask

Flask uygulamamız için bir Dockerfile: Dockerfile

# Dockerfile
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Ve son olarak, docker-compose.yml dosyamız:

# docker-compose.yml
version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    networks:
      - app_network
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - web
    networks:
      - app_network
networks:
  app_network:
    driver: bridge

Bu docker-compose.yml dosyası iki servis tanımlar:
* web: Dockerfile‘dan oluşturulan Flask uygulaması. 5000 portunu dışarıya açar.
* nginx: Nginx’in resmi imajını kullanır. Kendi nginx.conf dosyamızı bağlar ve 80 portunu dışarıya açar. depends_on: web Nginx’in web servisi başladıktan sonra başlamasını sağlar.

Nginx için özel bir yapılandırma dosyası: nginx.conf

# nginx.conf
server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://web:5000; # 'web' servisine yönlendirme
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Tüm bu dosyaları oluşturduktan sonra, proje dizininizdeyken uygulamayı başlatmak için:

docker-compose up -d

* -d: Tüm servisleri arka planda (detached mode) başlatır.

Uygulama çalışmaya başladığında, web tarayıcınızdan http://localhost adresine giderek Flask uygulamanızın Nginx üzerinden çalıştığını görebilirsiniz.

Uygulamayı durdurmak ve tüm konteynerleri kaldırmak için:

docker-compose down

Docker Ağ Yapılandırması

Docker, konteynerler arasında ve konteynerler ile ana bilgisayar arasında iletişimi sağlamak için gelişmiş ağ yetenekleri sunar.

Varsayılan Ağlar

Docker Engine, varsayılan olarak üç ağ sürücüsü ile gelir:

* Bridge (Köprü): Varsayılan ağ sürücüsüdür. Konteynerler için özel bir dahili ağ oluşturur ve ana bilgisayarın ağ arayüzüne bağlanır. Konteynerler kendi aralarında ve dış dünyayla bu köprü üzerinden iletişim kurabilir.
* Host (Ana Bilgisayar): Konteyner, ana bilgisayarın ağ yığınını doğrudan kullanır. Bu, konteynerin ana bilgisayarın ağ arayüzlerine doğrudan erişebileceği anlamına gelir. İzolasyon seviyesi düşüktür.
* None (Yok): Konteyner ağ arayüzüne sahip olmaz. Genellikle özel ağ yapılandırmaları için veya ağ erişimine ihtiyacı olmayan konteynerler için kullanılır.

Mevcut ağları listeleyin:

docker network ls

Özel Ağ Oluşturma

Uygulamalarınız için özel köprü ağları oluşturmak iyi bir uygulamadır. Bu, konteynerlerin birbirini isimleriyle bulmasını sağlar ve daha iyi izolasyon sunar.

docker network create --driver bridge benim-ozel-agim

* --driver bridge: Köprü ağ sürücüsünü kullanır.

Bir konteyneri özel bir ağa bağlamak için docker run komutunda --network bayrağını kullanın:

docker run -d --name webserver --network benim-ozel-agim nginx

Mevcut bir konteyneri bir ağa bağlamak veya ağdan çıkarmak için:

docker network connect benim-ozel-agim baska-konteyner
docker network disconnect benim-ozel-agim baska-konteyner

Özel ağlarda, aynı ağdaki konteynerler birbirlerini isimleriyle çözümleyebilir (DNS). Örneğin, webserver konteynerinden baskaservis adlı başka bir konteynere http://baskaservis şeklinde erişebilirsiniz.

Docker Veri Yönetimi

Konteynerler geçicidir; bir konteyneri sildiğinizde, içindeki tüm veriler de kaybolur. Kalıcı veri depolama için Docker iki ana yöntem sunar: Volumes (Volümler) ve Bind Mounts (Bağlı Bağlantılar).

Volumes (Volümler)

Volümler, Docker tarafından yönetilen özel bir dosya sistemi alanıdır. Konteynerlerin yaşam döngüsünden bağımsızdır ve verilerin kalıcı olarak saklanması için en iyi yoldur.

Volüm Oluşturma
docker volume create benim-veritabani-verileri
Konteynere Volüm Bağlama

Bir konteyner çalıştırırken -v bayrağını kullanarak bir volümü bağlayabilirsiniz:

docker run -d \
    --name postgres-db \
    -e POSTGRES_PASSWORD=mysecretpassword \
    -v benim-veritabani-verileri:/var/lib/postgresql/data \
    postgres

Bu örnek, benim-veritabani-verileri adlı volümü postgres-db konteynerinin /var/lib/postgresql/data dizinine bağlar. PostgreSQL verileri bu volümde kalıcı olarak saklanacaktır.

Volümleri Listeleme ve Silme
docker volume ls           # Tüm volümleri listele
docker volume rm benim-veritabani-verileri # Volümü sil (kullanılmıyorsa)
docker volume prune        # Kullanılmayan tüm volümleri sil

Bind Mounts (Bağlı Bağlantılar)

Bind mount’lar, ana bilgisayarın dosya sistemindeki bir dizini veya dosyayı doğrudan konteynerin içine bağlamanıza olanak tanır. Bu, geliştirme sırasında kodunuzu doğrudan konteynere bağlamak veya yapılandırma dosyalarını yönetmek için kullanışlıdır.

Konteynere Bind Mount Bağlama
docker run -d \
    --name my-apache \
    -p 80:80 \
    -v /home/$USER/my_apache_site:/usr/local/apache2/htdocs/ \
    httpd

Bu komut, ana bilgisayarınızdaki /home/$USER/my_apache_site dizinini my-apache konteynerinin /usr/local/apache2/htdocs/ dizinine bağlar. Ana bilgisayardaki bu dizinde yaptığınız değişiklikler anında konteyner içinde de görünür olacaktır.

Dockerfile ile Kendi İmajınızı Oluşturma

Docker Hub’daki mevcut imajlar birçok senaryo için yeterli olsa da, kendi özel uygulamalarınız için kendi Docker imajlarınızı oluşturmanız gerekebilir. Bu, bir Dockerfile kullanarak yapılır. Dockerfile, bir imajın nasıl oluşturulacağını adım adım açıklayan bir metin dosyasıdır.

Temel Dockerfile Komutları

* FROM: İmajın hangi temel imajdan türetileceğini belirtir (örn. FROM ubuntu:18.04). Her Dockerfile bu komutla başlamalıdır.
* RUN: İmaj oluşturma sırasında çalıştırılacak komutları belirtir. Genellikle paket kurulumu, uygulama bağımlılıklarının yüklenmesi gibi işlemler için kullanılır (örn. RUN apt-get update && apt-get install -y nginx).
* COPY: Ana bilgisayardaki dosya veya dizinleri imaj içine kopyalar (örn. COPY . /app).
* ADD: COPY gibi çalışır, ancak URL’lerden dosya indirme veya sıkıştırılmış arşivleri otomatik olarak açma gibi ek yeteneklere sahiptir.
* WORKDIR: Sonraki RUN, CMD, ENTRYPOINT, COPY, ADD komutları için çalışma dizinini ayarlar (örn. WORKDIR /app).
* EXPOSE: Konteynerin belirli bir portu dinlediğini belgelendirir. Ağ yapılandırması yapmaz, sadece bir belgeleme ipucudur (örn. EXPOSE 80).
* CMD: Konteyner başlatıldığında çalıştırılacak varsayılan komutu veya argümanları sağlar. Bir Dockerfile’da yalnızca bir CMD komutu olabilir.
* ENTRYPOINT: Konteyner başlatıldığında çalıştırılacak ana komutu ayarlar. CMD ile birlikte kullanıldığında, CMD argümanları ENTRYPOINT komutuna geçirilir.

Basit Bir Nginx Dockerfile Örneği

Bir Nginx web sunucusu imajı oluşturmak istediğimizi varsayalım. Proje dizinimizde Dockerfile ve index.html adında iki dosya oluşturalım.

index.html:




    Merhaba Docker!


    
    

Bu sayfa, kendi Dockerfile'ımızdan oluşturulan bir imajdan servis ediliyor.

Dockerfile:

# Temel Nginx imajını kullan
FROM nginx:latest

Çalışma dizinini ayarla

WORKDIR /usr/share/nginx/html

index.html dosyasını imajın içine kopyala

COPY index.html .

Konteynerin 80 portunu dışarıya açtığını belirt

EXPOSE 80

Nginx sunucusunu başlat

CMD ["nginx", "-g", "daemon off;"]

İmajı oluşturmak için, Dockerfile ve index.html dosyalarının bulunduğu dizinde aşağıdaki komutu çalıştırın:

docker build -t benim-nginx-web .

* -t benim-nginx-web: Oluşturulan imaja benim-nginx-web adını ve latest etiketini verir.
* .: Dockerfile’ın mevcut dizinde olduğunu belirtir.

İmaj oluşturulduktan sonra, onu çalıştırabilirsiniz:

docker run -d -p 80:80 --name benim-webserver benim-nginx-web

Şimdi tarayıcınızdan http://localhost adresine giderek kendi Nginx sunucunuzu görebilirsiniz.

Docker İmajlarını Docker Hub’a Yükleme

Oluşturduğunuz özel imajları başkalarıyla paylaşmak veya farklı sunucularınızda kullanmak için Docker Hub gibi bir konteyner kayıt defterine (registry) yükleyebilirsiniz.

1. Docker Hub Hesabı Oluşturma: Eğer bir Docker Hub hesabınız yoksa, hub.docker.com adresinden ücretsiz bir hesap oluşturun.
2. Docker’a Giriş Yapma: Terminalden Docker Hub hesabınıza giriş yapın:

docker login

Kullanıcı adınızı ve şifrenizi girmeniz istenecektir.

3. İmajı Etiketleme (Tagging): İmajınızı Docker Hub kullanıcı adınızla etiketlemeniz gerekir. Format kullanici_adi/imaj_adi:etiket şeklindedir.

docker tag benim-nginx-web:latest kullanici_adiniz/benim-nginx-web:v1.0

kullanici_adiniz yerine kendi Docker Hub kullanıcı adınızı yazın.

4. İmajı Yükleme (Pushing): Etiketlediğiniz imajı Docker Hub’a yükleyin:

docker push kullanici_adiniz/benim-nginx-web:v1.0

İmajınız Docker Hub’a yüklendikten sonra, herhangi bir Docker yüklü sistemden docker pull kullanici_adiniz/benim-nginx-web:v1.0 komutuyla çekilebilir.

Sık Karşılaşılan Sorunlar ve Çözümler

Docker kullanırken karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:

* Got permission denied while trying to connect to the Docker daemon socket: Bu hata, Docker komutlarını sudo olmadan çalıştırmaya çalıştığınızda ve kullanıcınızın docker grubunda olmadığı zaman ortaya çıkar.
* Çözüm: Kullanıcınızı docker grubuna ekleyin: sudo usermod -aG docker $USER. Ardından oturumu kapatıp tekrar açın veya newgrp docker komutunu çalıştırın.
* Cannot connect to the Docker daemon. Is the docker daemon running on this host?: Docker servisi çalışmıyorsa bu hatayı alırsınız.
* Çözüm: Docker servisini başlatın: sudo systemctl start docker. Servisin durumunu kontrol edin: sudo systemctl status docker.
* E: The repository 'https://download.docker.com/linux/debian stretch Release' does not have a Release file.: Depo ekleme sırasında yanlış URL, yanlış Debian sürüm adı veya GPG anahtarı eklenmemiş olması nedeniyle bu hatayı alabilirsiniz.
* Çözüm: Depo URL’sinin ve Debian sürüm adının (stretch olduğundan emin olun) doğru olduğundan emin olun. GPG anahtarının eklendiğini doğrulayın. sudo apt-get update komutunu tekrar çalıştırın.
* Error response from daemon: driver failed programming external connectivity on endpoint ... bind: address already in use: Bu hata, bir konteyneri başlatmaya çalıştığınızda ve ana bilgisayarınızda veya başka bir konteynerde zaten kullanılan bir portu eşlemeye çalıştığınızda meydana gelir.
* Çözüm: Çakışan portu kullanan başka bir uygulamayı/konteyneri durdurun veya konteyner için farklı bir ana bilgisayar portu kullanın (örn. -p 8081:80).
* Disk Alanı Tükenmesi: Docker imajları, konteynerler ve volümler zamanla disk alanını doldurabilir.
* Çözüm: Kullanılmayan Docker nesnelerini temizlemek için düzenli olarak docker system prune komutunu çalıştırın. Bu komut durdurulmuş konteynerleri, kullanılmayan ağları, dangle imajları ve build cache’leri siler. Volümleri silmek için docker system prune -a veya docker volume prune kullanın.

Sonuç

Bu kapsamlı rehberde, Debian 9 işletim sistemi üzerine Docker’ı nasıl kuracağınızı, temel Docker komutlarını kullanarak imaj ve konteynerleri nasıl yöneteceğinizi, Docker Compose ile çoklu konteyner uygulamalarını nasıl tanımlayacağınızı, ağ ve veri yönetimi stratejilerini, kendi Docker imajlarınızı nasıl oluşturacağınızı ve Docker Hub’a nasıl yükleyeceğinizi öğrendiniz.

Docker, modern uygulama geliştirme ve dağıtım süreçlerinde devrim yaratan güçlü bir araçtır. Uygulamalarınızın taşınabilirliğini, tutarlılığını ve ölçeklenebilirliğini artırarak geliştirici ve operasyon ekiplerinin işini büyük ölçüde kolaylaştırır. Debian 9 gibi daha eski sistemlerde bile Docker’ın sunduğu bu avantajlardan faydalanmak mümkündür.

Artık Docker’ın temellerine hakim olduğunuza göre, daha ileri konuları keşfetmeye hazırsınız. Docker Swarm veya Kubernetes gibi konteyner orkestrasyon araçları, CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) boru hatlarıyla entegrasyon ve daha karmaşık ağ yapılandırmaları gibi konuları inceleyerek Docker bilginizi daha da ileri taşıyabilirsiniz. Unutmayın, pratik yapmak ve farklı senaryolar denemek, Docker’da ustalaşmanın en iyi yoludur.

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

Gönder

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.
Exit mobile version