İçeriğe geç

EğitimlerKonteynerler ve Docker

Ubuntu 24.04 ve 26.04'e Docker Engine nasıl kurulur

Docker Engine ve Compose eklentisini Docker'ın resmi apt deposundan Ubuntu 24.04 veya 26.04 LTS'e kurun; sonra güvenli hale getirin, güncelleyin ve yedekleyin.

  • Başlangıç
  • 15 dk okuma
  • Güncellendi

Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS

Bu sayfada
  1. Ön koşullar
  2. Adım 1 — Çakışan paketleri kaldırın
  3. Adım 2 — Docker'ın apt deposunu ekleyin
  4. Adım 3 — Docker Engine'i ve eklentileri kurun
  5. Adım 4 — Docker'ı sudo olmadan çalıştırın (isteğe bağlı)
  6. Adım 5 — Log döndürmeyi açın
  7. Adım 6 — Yayınlanan portları güvenlik duvarının arkasında tutun
  8. Docker'ı güncelleme
  9. Yedekleme ve geri yükleme
  10. Docker'ı kaldırma
  11. Sorun giderme
  12. permission denied while trying to connect to the Docker daemon socket
  13. Package 'docker-ce' has no installation candidate
  14. Karşılanmamış bağımlılıklar veya containerd çakışması
  15. ufw engellediği hâlde bir konteyner portuna erişilebiliyor
  16. Disk doldu
  17. Sonraki adımlar

Docker Engine uygulamaları yalıtılmış konteynerlerde çalıştırır; bu kütüphanedeki self-hosted uygulamaların ve yapay zeka araçlarının çoğu bu şekilde dağıtılır. Bu rehber Docker Engine'i Ubuntu 26.04 LTS veya 24.04 LTS üzerine, Buildx ve Compose eklentileriyle birlikte Docker'ın kendi apt deposundan kurar. Ardından yönetici kullanıcınızın Docker'ı sudo olmadan çalıştırmasını sağlar, log döndürmeyi açar, yayınlanan portları güvenlik duvarınızın arkasında tutar ve kurulumu nasıl güncelleyeceğinizi, yedekleyeceğinizi ve sorunlarını nasıl gidereceğinizi gösterir.

Ön koşullar

  • Ubuntu 26.04 LTS (Resolute), 24.04 LTS (Noble) veya 22.04 LTS (Jammy) çalıştıran bir sunucu. Docker bu sürümler için x86_64 (amd64), arm64, armhf, s390x ve ppc64le paketleri yayınlar.
  • sudo yetkisi ve SSH anahtarıyla girişi olan, root olmayan bir kullanıcı. Henüz yapmadıysanız önce Yeni bir Linux sunucusunu güvenli hale getirin ve SSH anahtarlarını ayarlayın rehberlerini izleyin.
  • download.docker.com adresine ve kullanacağınız konteyner kayıtlarına (Docker Hub, GitHub Container Registry vb.) giden HTTPS erişimi.

Docker belgeleri Docker Engine'in kendisi için en düşük CPU veya bellek değeri yayınlamaz; servis hafiftir. Sunucuyu çalıştıracağınız konteynerlere göre boyutlandırın ve her uygulama rehberindeki gereksinimleri kullanın. Pratik bir kural olarak diskin en az %20'sini boş tutun; imajlar, konteyner logları ve volume'lar /var/lib/docker altında durur.

Adım 1 — Çakışan paketleri kaldırın

Ubuntu arşivinde Docker Engine ile çakışan resmi olmayan Docker paketleri (docker.io, docker-compose, podman-docker ve diğerleri) bulunur. Kurulu olanları kaldırın:

Bash
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)

Hiçbiri kurulu değilse dpkg "no packages found" uyarıları verir ve apt hiçbir şey yapmaz; bu normaldir. Bu adım /var/lib/docker içindeki mevcut imajları, konteynerleri ve volume'ları silmez.

Adım 2 — Docker'ın apt deposunu ekleyin

İmza anahtarını indirmek için gereken araçları kurun, Docker'ın GPG anahtarını /etc/apt/keyrings içine kaydedin ve depoyu deb822 .sources biçiminde ekleyin:

Bash
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Bash
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update

Suites satırı sürümünüzün kod adına (resolute, noble veya jammy) dönüşür. apt'nin Docker paketlerini artık gördüğünü kontrol edin:

Bash
apt-cache policy docker-ce

Candidate sürümü https://download.docker.com/linux/ubuntu adresinden gelmelidir.

Adım 3 — Docker Engine'i ve eklentileri kurun

Bash
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Ubuntu'da docker servisi kendiliğinden başlar ve açılışta etkinleştirilir. Servisi doğrulayın ve test imajını çalıştırın:

Bash
sudo systemctl status docker --no-pager
sudo docker run --rm hello-world
docker compose version

hello-world "Hello from Docker!" yazar ve kapanır. Servis çalışmıyorsa sudo systemctl start docker ile başlatın.

Adım 4 — Docker'ı sudo olmadan çalıştırın (isteğe bağlı)

Varsayılan olarak Docker servisiyle yalnızca root konuşabilir. Yönetici kullanıcınızın docker komutlarını doğrudan çalıştırabilmesi için onu docker grubuna ekleyin, ardından oturumu kapatıp yeniden açın (veya mevcut kabuk için newgrp docker çalıştırın):

Bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-world

Paket grubu zaten oluşturduğu için groupadd çoğu sistemde grubun var olduğunu bildirir.

Adım 5 — Log döndürmeyi açın

Varsayılan json-file log sürücüsü konteyner loglarını süresiz tutar ve diski doldurabilir. Docker'ın local sürücüsü logları varsayılan olarak döndürür ve sıkıştırır (dosya başına 20 MB, 5 dosya). Yeni konteynerler için varsayılan yapın:

Bash
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "log-driver": "local",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF
sudo systemctl restart docker
docker info | grep -i "logging driver"

Son komut Logging Driver: local yazar. Mevcut konteynerler, siz onları yeniden oluşturana kadar eski log ayarlarını kullanır (Compose projelerinde docker compose up -d --force-recreate).

Adım 6 — Yayınlanan portları güvenlik duvarının arkasında tutun

Bir portu ana makine adresi belirtmeden yayınladığınızda (-p 8080:80) Docker sunucunun tüm IPv4 ve IPv6 adreslerinde dinler. Docker'ın kendi belgelerine göre ufw ve firewalld kuralları bu portlara uygulanmaz; çünkü Docker trafiği ufw kuralları kontrol edilmeden önce işler.

Web uygulamaları için güvenli düzen üç parçadan oluşur. Önce uygulama konteynerlerini yalnızca loopback adresinde yayınlayın; örneğin -p 127.0.0.1:8080:80 ya da Compose'da:

YAML
services:
  app:
    image: nginx:stable
    ports:
      - "127.0.0.1:8080:80"

İkinci olarak önlerine 80 ve 443 numaralı portlarda bir reverse proxy koyun: Caddy, Nginx ve Certbot veya Traefik rehberlerine bakın. Üçüncü olarak ufw'de yalnızca SSH ve web trafiğine izin verin:

Bash
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Başka bir makineden bir uygulama portuna erişilemediğini kontrol edin; örneğin nc -vz sunucu-ip-adresiniz 8080 komutuyla. Bağlantı reddedilmeli veya zaman aşımına uğramalıdır.

Docker'ı güncelleme

Docker Engine güncellemeleri diğer paketler gibi apt üzerinden gelir:

Bash
sudo apt update
sudo apt upgrade
docker version

docker-ce yükseltmesi Docker servisini yeniden başlatır. unless-stopped veya always gibi bir yeniden başlatma politikasıyla başlatılan konteynerler kendiliğinden yeniden başlar; diğerleri durmuş olarak kalır. Ubuntu'nun unattended-upgrades aracı varsayılan olarak yalnızca Ubuntu'nun kendi güvenlik deposundan güncelleme kurar; Docker paketleri siz apt çalıştırdığınızda güncellenir. Docker yükseltmelerini sakin bir zamana planlayın.

Konteynerlerin kendisini güncellemek için yeni imajları çekip konteynerleri yeniden oluşturun; her uygulama rehberi tam komutları gösterir.

Yedekleme ve geri yükleme

İmajlar her zaman yeniden çekilebilir; bu yüzden imajları değil verileri yedekleyin:

  • adlandırılmış volume'lar (/var/lib/docker/volumes/ altında),
  • konteynerlere bağladığınız (bind mount) ana makine klasörleri,
  • compose.yaml ve .env dosyalarınız,
  • /etc/docker/daemon.json.

Docker'ın belgelediği yöntem, volume'u bağlayan ve bulunduğunuz klasöre bir tar arşivi yazan kısa ömürlü bir konteynerdir. Dosyaların tutarlı olması için önce o volume'a yazan konteynerleri durdurun:

Bash
docker run --rm -v app_data:/data -v "$(pwd)":/backup ubuntu tar czf /backup/app_data.tar.gz -C /data .

Yeni veya boş bir volume'a aynı yöntemle geri yükleyin:

Bash
docker volume create app_data
docker run --rm -v app_data:/data -v "$(pwd)":/backup ubuntu tar xzf /backup/app_data.tar.gz -C /data

Veritabanları (PostgreSQL, MySQL/MariaDB, MongoDB) için docker exec ile çalıştırılan pg_dump veya mariadb-dump gibi veritabanının kendi döküm aracını kullanın; her uygulama rehberi doğru komutu gösterir. Yedekleri sunucunun dışına da kopyalayın.

Docker'ı kaldırma

Bash
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
Bash
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.sources /etc/apt/keyrings/docker.asc

Sorun giderme

permission denied while trying to connect to the Docker daemon socket

Kullanıcınız henüz docker grubunda değil ya da oturum grubu eklemeden önce açıldı. id çalıştırın ve listede docker arayın; yoksa Adım 4'ü tekrarlayıp yeniden giriş yapın. Bu arada sudo docker … kullanın.

Package 'docker-ce' has no installation candidate

apt, Docker deposunu göremiyor. Dosyayı cat /etc/apt/sources.list.d/docker.sources ile kontrol edin: Suites değeri sürüm kod adınız olmalı ve anahtar /etc/apt/keyrings/docker.asc konumunda bulunmalıdır. sudo apt update komutunu yeniden çalıştırın ve NO_PUBKEY veya 404 hatalarını okuyun.

Karşılanmamış bağımlılıklar veya containerd çakışması

Ubuntu arşivinden gelen containerd veya runc gibi resmi olmayan bir paket hâlâ kurulu. Adım 1'i yeniden çalıştırın, ardından sudo apt install -f komutunu çalıştırıp Adım 3'ü tekrarlayın.

ufw engellediği hâlde bir konteyner portuna erişilebiliyor

Tüm adreslerde yayınlanan portlar için bu beklenen davranıştır. Konteyneri portu 127.0.0.1 üzerinde yayınlayarak yeniden oluşturun veya Docker'ın güvenlik duvarı belgelerinde anlatıldığı gibi DOCKER-USER zincirine iptables kuralları ekleyin.

Disk doldu

Alanı neyin kullandığını docker system df ile görün. docker system prune durmuş konteynerleri, kullanılmayan ağları, sarkan (dangling) imajları ve derleme önbelleğini siler; -a eklerseniz hiçbir konteynerin kullanmadığı tüm imajlar da silinir. Hiçbir volume'da ihtiyacınız olan veri olmadığından emin değilseniz --volumes eklemeyin. Logların yeniden büyümesini önlemek için log döndürmeyi açın (Adım 5).

Sonraki adımlar

  • Çoğu uygulama rehberinin kullandığı dosya biçimini öğrenin: Docker Compose temelleri.
  • Uygulamalarınızı Caddy ile HTTPS arkasına alın.
  • Konteynerleri tarayıcıdan Portainer ile yönetin.
  • Konteyner iş yükleri için sunucuları Docker hosting sayfasında karşılaştırın.

Sık sorulan sorular

Bunun yerine Ubuntu'nun docker.io paketini kullanabilir miyim?

Kullanabilirsiniz; ancak Docker belgeleri docker.io, docker-compose ve podman-docker paketlerini Docker Engine ile çakışan resmi olmayan paketler olarak görür. Docker deposundaki docker-ce paketleri Docker'ın sürüm döngüsünü izler ve çoğu uygulama rehberinin beklediği Compose ve Buildx eklentilerini içerir.

Docker'ı get.docker.com kolaylık betiğiyle kurabilir miyim?

Docker bu betiği yalnızca test ve geliştirme için önerir, üretim için önermez. Betik aynı depoyu yapılandırır ama her değişikliği size göstermez. Bu rehber, her komutu görüp inceleyebilmeniz için depo adımlarını kullanır.

ufw, Docker konteynerlerinin yayınladığı portları korur mu?

Hayır. Docker yayınlanan portları ufw'nin INPUT kuralları değerlendirilmeden önce nat tablosunda yönlendirir; bu nedenle 8080:80 olarak yayınlanan bir port, ufw 8080'i engellese bile internetten erişilebilir olur. Uygulama portlarını 127.0.0.1 üzerinde yayınlayın ve 80 ile 443 numaralı portlarda yalnızca reverse proxy'nizi açın.

Kullanıcımı docker grubuna eklemek güvenli mi?

docker grubu sunucuda root düzeyinde yetki verir. Yalnızca güvendiğiniz yönetici hesaplarını ekleyin. Daha güçlü yalıtım gerekiyorsa Docker'ın rootless modunu kullanın veya sudo ile çalışmaya devam edin.

Hangi HyperDC sunucularında Docker çalışır?

Docker sunucunuzun işletim sistemi içinde çalışır; bu nedenle root erişiminiz ve desteklenen bir Ubuntu sürümünüz olan HyperDC Linux VPS, VDS veya dedicated sunucuda kullanabilirsiniz. Sunucuyu çalıştıracağınız konteynerlere göre boyutlandırın.

Kaynaklar

Şifre Oluştur

Lütfen onaylayın