# 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.

Zorluk: Başlangıç\
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS

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.

> **Not**
>
> Debian mı kullanıyorsunuz? [Debian'a Docker Engine nasıl kurulur](/guides/install-docker-debian) rehberini izleyin. Adımlar neredeyse aynıdır, yalnızca depo adresi farklıdır.

## Ö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](/guides/secure-a-new-linux-server) ve [SSH anahtarlarını ayarlayın](/guides/ssh-keys) 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.

> **Uyarı**
>
> `docker` grubuna üyelik sunucuda root düzeyinde yetki verir. Yalnızca güvendiğiniz yönetici hesaplarını ekleyin. Daha güçlü yalıtım için Docker'ın rootless modunu kullanabilir veya `sudo` ile çalışmaya devam edebilirsiniz.

## 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`).

> **İpucu**
>
> `/etc/docker/daemon.json` zaten varsa dosyanın üzerine yazmak yerine bu iki anahtarı mevcut dosyaya ekleyin.

## 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](/guides/caddy-reverse-proxy), [Nginx ve Certbot](/guides/nginx-reverse-proxy-certbot) veya [Traefik](/guides/traefik-reverse-proxy) 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
```

> **Tehlike**
>
> Sonraki komutlar sunucudaki tüm imajları, konteynerleri ve volume'ları siler. Önce yedeğiniz olduğundan emin olun.

```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](/guides/docker-compose-basics).
- Uygulamalarınızı [Caddy](/guides/caddy-reverse-proxy) ile HTTPS arkasına alın.
- Konteynerleri tarayıcıdan [Portainer](/guides/install-portainer) ile yönetin.
- Konteyner iş yükleri için sunucuları [Docker hosting](/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.

---

Kaynak: <https://hyperdc.com/tr/guides/tutorials/install-docker-ubuntu>\
Son güncelleme: 2026-10-09
