Docker Nedir ve Nasıl Kurulur

Bu yazıda Docker’ın ne olduğunu, mimarisini ve image/container mantığını anlatıp, ardından RHEL 9 / Rocky Linux 9 / AlmaLinux 9 üzerine Docker Engine kurulumunu ve ilk container’ımızı çalıştırmayı adım adım göreceğiz.

Docker Nedir?

Docker, uygulamaları bağımlılıklarıyla birlikte paketleyip birbirinden izole container’lar içinde çalıştırmamızı sağlayan bir platformdur. İlk sürümleri Linux Container (LXC) altyapısını kullanıyordu; bugün ise Docker Engine, container’ları containerd ve runc üzerinden çalıştırır. Container’lar Linux çekirdeğinin namespace ve cgroup özelliklerini kullanarak birbirinden yalıtılır.

Hafif bilgi: Docker işletim sistemini sanallaştırır, hypervisor ise donanımı. Bu yüzden container’lar sanal makinelere göre çok daha hızlı açılır ve çok daha az kaynak tüketir.

Docker Mimarisi

Docker mimarisi: client, daemon, registry, image ve container ilişkisi
Docker mimarisi
  • Docker CLI: Kullanıcının docker run, docker build gibi komutları yazdığı istemcidir.
  • REST API: CLI ile daemon arasındaki arayüzdür. CLI’nin yaptığı her işlem aslında bu API’ye yapılan bir istektir.
  • Docker Daemon (dockerd): İstekleri karşılayan, image, network ve volume’leri yöneten ana servistir.
  • containerd ve runc: Container’ların yaşam döngüsünü yöneten ve onları çekirdek seviyesinde başlatan katmanlardır. Kubernetes de container’ları doğrudan containerd üzerinden çalıştırır.
  • Registry: Image’ların saklandığı depodur. Varsayılan registry Docker Hub’dır; Nexus, Harbor veya kurumsal bir registry de kullanılabilir.

Akış şöyledir: CLI’dan gelen istek REST API üzerinden daemon’a iletilir. İstenen image yerelde yoksa registry’den çekilir, varsa yereldeki kullanılır. Ardından image üzerinden container oluşturulur ve başlatılır.

Image ve Katmanlar

Image, bir uygulamanın çalışması için gereken her şeyin (kütüphaneler, yapılandırma dosyaları, ortam değişkenleri) bir araya getirildiği salt okunur bir pakettir. Image’lar katmanlardan oluşur: en altta temel image (ör. bir Linux dağıtımı), üstünde uygulama ve bağımlılıkları, en üstte yapılandırma katmanı yer alır. Katmanlar image’lar arasında paylaşıldığı için disk ve indirme süresinden tasarruf edilir.

Docker image katmanları
Image katmanları

Bir image’dan container başlatıldığında en üste yazılabilir, geçici bir katman eklenir. Container içinde yapılan değişiklikler bu katmanda tutulur; container silindiğinde bu katman da silinir. Alttaki image katmanları salt okunur olduğu için değişmez. Kalıcı olması gereken veriler için volume kullanılır.

Container çalışırken eklenen yazılabilir geçici katman
Container’ın yazılabilir katmanı

Linux Üzerine Docker Kurulumu

Kurulum RHEL 9, Rocky Linux 9 ve AlmaLinux 9 için geçerlidir. Komutlar root olarak (ya da başına sudo eklenerek) çalıştırılır.

1. Eski veya Çakışan Paketleri Kaldırma

RHEL 9 tabanlı sistemlerde varsayılan container aracı Podman’dır. Docker ile çakışmaması için eski Docker paketleri ve Podman kaldırılır (yüklü değillerse komut sadece bunu bildirir):

dnf remove -y docker docker-client docker-client-latest docker-common \
  docker-latest docker-latest-logrotate docker-logrotate docker-engine \
  podman runc

2. Docker Deposunu Ekleme

dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

Rocky Linux veya AlmaLinux kullanıyorsanız ve RHEL deposunda sorun yaşarsanız https://download.docker.com/linux/centos/docker-ce.repo adresini kullanabilirsiniz.

3. Docker Engine Kurulumu

dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
systemctl status docker

Eski RHEL 7 kurulumlarında karşılaşılan container-selinux bağımlılık hatası, güncel depolarla birlikte artık oluşmaz; gerekli paketler otomatik kurulur.

4. Kurulumu Doğrulama

docker version
docker run --rm hello-world

“Hello from Docker!” mesajını görüyorsanız kurulum tamamdır.

5. Docker’ı sudo Olmadan Kullanma (İsteğe Bağlı)

usermod -aG docker <kullanici_adi>
newgrp docker

Dikkat: docker grubundaki kullanıcılar fiilen root yetkisine sahiptir. Bu grubu sadece güvendiğiniz kullanıcılara verin.

İlk Container: NGINX

docker run -d --name nginx-deneme -p 8081:80 nginx
  • -d: Container’ı arka planda (detached) çalıştırır. Kullanılmasaydı terminal container’a bağlı kalırdı.
  • --name: Container’a isim verir; sonraki komutlarda ID yerine bu ismi kullanabiliriz.
  • -p 8081:80: Sunucunun 8081 portunu container’ın 80 portuna yönlendirir.
  • nginx: Kullanılacak image’ın adıdır. Yerelde yoksa Docker Hub’dan katman katman indirilir.
NGINX image'ının katman katman indirilmesi
Image katmanlarının indirilmesi

Container’ın çalıştığını ve portu dinlediğini kontrol edelim:

docker ps
ss -tulpn | grep 8081
curl http://localhost:8081

NGINX’in “Welcome to nginx!” sayfasının HTML çıktısını görmelisiniz. Tarayıcıdan http://<sunucu-ip>:8081 adresine de gidebilirsiniz (firewall’da 8081 portu açık olmalı).

Container’ın içine girmek için:

docker exec -it nginx-deneme bash

Sık Kullanılan Komutlar

KomutNe yapar?
docker ps -aÇalışan ve durmuş tüm container’ları listeler
docker imagesYereldeki image’ları listeler
docker logs -f nginx-denemeContainer loglarını canlı izler
docker stop nginx-denemeContainer’ı durdurur
docker rm nginx-denemeDurmuş container’ı siler
docker rmi nginxImage’ı siler
docker system dfDocker’ın kullandığı disk alanını gösterir
docker system pruneKullanılmayan container, network ve image’ları temizler

Video Anlatım

Aşağıdaki video bu yazının ilk sürümünde, RHEL 7.6 üzerinde çekilmiştir. Kavramlar aynıdır; kurulum için yukarıdaki güncel adımları kullanın.

Docker kurulumu (RHEL 7.6, ilk sürüm)

Sonraki Adımlar

Similar Posts

  • Sanallaştırma Teknolojisi

    NORMAL SİSTEM VE SANALLAŞTIRILMIŞ YAPILAR Anlatıma basit bir şekilde değineceğim; Normal sistemlerde en alt katmanda fiziksel olarak donanımların bulunduğu fiziksel katman vardır. Hemen bir üst katmanın da operational system(işletim sistemi) bulunur. Bu katmanın üzerinde ise çalışan uygulamalarımız bulunmaktadır. Burada kullancağımız uygulamaları bir işletim sistemine bağlı kalarak kullanırız. İşletim sistemi üzerin de çalışan uygulamalar yaptıkları işlem bakımından…

  • NGINX Kurulum ve Konfigürasyon

    KURULUM Burada anlatılacak kurulum çalışmaları manuel kurulum üzerinden olacaktır. Öcelikle kurulum için .rpm uzantılı dosyanın indirilmesi gerekmektedir. Buradan ilgili nginx sürümünün güncel versiyonu indirilir. Kurulum rhel 7.6 üzerinde yapılmıştır. Dosya indirildikten sonra WinSCP proğramı(buradan indirebilirsiniz) üzerinden linux makinesinde istediğimiz dizine atılır. Ben burada /opt/nginxrpm/ dosya yolunu kullanacağım. Dosya atıldıktan sonra kurulum yukarıdaki komut ile kurulum işlemi yapılır….

  • Tomcat Kurulum Rehberi

    Tomcat Installation Linux Server Tomcat installation will be explained under this topic for answer the how install tomcat application server.To do this I will explain in a few steps below. We will install tomcat 9.0.41. INFO: Java must be installed on your machine. Or you must install the java. Step1:Go to /opt directory and obtain…

Bir yanıt yazın

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