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
- Ön koşullar
- Adım 1 — Çakışan paketleri kaldırın
- Adım 2 — Docker'ın apt deposunu ekleyin
- Adım 3 — Docker Engine'i ve eklentileri kurun
- Adım 4 — Docker'ı sudo olmadan çalıştırın (isteğe bağlı)
- Adım 5 — Log döndürmeyi açın
- Adım 6 — Yayınlanan portları güvenlik duvarının arkasında tutun
- Docker'ı güncelleme
- Yedekleme ve geri yükleme
- Docker'ı kaldırma
- Sorun giderme
- permission denied while trying to connect to the Docker daemon socket
- Package 'docker-ce' has no installation candidate
- Karşılanmamış bağımlılıklar veya containerd çakışması
- ufw engellediği hâlde bir konteyner portuna erişilebiliyor
- Disk doldu
- 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.
sudoyetkisi 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.comadresine 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:
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:
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.ascsudo 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 updateSuites 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:
apt-cache policy docker-ceCandidate sürümü https://download.docker.com/linux/ubuntu adresinden gelmelidir.
Adım 3 — Docker Engine'i ve eklentileri kurun
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginUbuntu'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:
sudo systemctl status docker --no-pager
sudo docker run --rm hello-world
docker compose versionhello-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):
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-worldPaket 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:
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:
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:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verboseBaş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:
sudo apt update
sudo apt upgrade
docker versiondocker-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.yamlve.envdosyaları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:
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:
docker volume create app_data
docker run --rm -v app_data:/data -v "$(pwd)":/backup ubuntu tar xzf /backup/app_data.tar.gz -C /dataVeritabanları (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
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extrassudo rm -rf /var/lib/docker /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.sources /etc/apt/keyrings/docker.ascSorun 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.