# Debian 12 ve 13'e Docker Engine nasıl kurulur

> Docker Engine'i Buildx ve Compose eklentileriyle Docker'ın resmi apt deposundan Debian 13 Trixie veya Debian 12 Bookworm'a kurun ve güvenli hale getirin.

Zorluk: Başlangıç\
Denendiği sistemler: Debian 12, Debian 13

Docker Engine, bu kütüphanedeki self-hosted uygulamaların ve yapay zeka araçlarının çoğunun arkasındaki konteyner çalışma ortamıdır. Debian'da Buildx ve Compose eklentileriyle güncel bir Docker edinmenin en temiz yolu **Docker'ın kendi apt deposudur**. Bu rehber depoyu Debian 13 (Trixie) veya Debian 12 (Bookworm) üzerinde kurar; ardından Docker'ı `sudo` olmadan çalıştırmayı, log döndürmeyi, yayınlanan portlarla ilgili güvenlik duvarı uyarısını, güncellemeleri, yedeklemeyi ve sık görülen hataları anlatır.

> **Not**
>
> Ubuntu mu kullanıyorsunuz? [Ubuntu'ya Docker Engine nasıl kurulur](/guides/install-docker-ubuntu) rehberini kullanın. Depo adresi ve kod adı değişkeni farklıdır.

## Ön koşullar

- **Debian 13 (Trixie)** veya **Debian 12 (Bookworm)** çalıştıran bir sunucu. Docker, Debian için amd64, arm64, armhf ve ppc64le paketleri yayınlar.
- `sudo` yetkisi ve SSH anahtarıyla girişi olan, root olmayan bir kullanıcı. En küçük Debian kurulumunda `sudo` bulunmayabilir; hesabı hazırlamak için [Yeni bir Linux sunucusunu güvenli hale getirin](/guides/secure-a-new-linux-server) ve [SSH anahtarlarını ayarlayın](/guides/ssh-keys) rehberlerine bakın.
- `download.docker.com` adresine ve imaj çekeceğiniz kayıtlara giden HTTPS erişimi.

Docker belgeleri Docker Engine için en düşük CPU veya bellek değeri vermez; servisin kendisi küçüktür. Sunucuyu çalıştıracağınız konteynerlere göre, her uygulama rehberindeki gereksinimlerle boyutlandırın ve `/var/lib/docker` altındaki imajlar, loglar ve volume'lar için diskin en az %20'sini boş tutun.

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

Debian arşivi, Docker Engine ile çakışan Docker ile ilgili paketler içerir. Kurulu olanları kaldırın:

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

Hiçbiri kurulu değilse `dpkg` "no packages found" uyarıları verir ve kaldırılacak bir şey olmaz. `/var/lib/docker` içindeki mevcut imajlar, konteynerler ve volume'lar korunur.

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

İmza anahtarını almak için gereken araçları kurun, Docker'ın GPG anahtarını kaydedin ve depoyu deb822 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/debian/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/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
```

`Suites` değeri `trixie` veya `bookworm` olur. apt'nin artık Docker'ın paketini sunduğunu doğrulayın:

```bash
apt-cache policy docker-ce
```

`Candidate` satırı `https://download.docker.com/linux/debian` adresini göstermelidir.

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

Debian'da servis kendiliğinden başlar ve açılışta etkinleştirilir. Kontrol edin ve test konteynerini çalıştırın:

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

Önce "Hello from Docker!" iletisini, ardından Compose eklentisinin sürümünü görmelisiniz.

> **İpucu**
>
> En son sürüm yerine belirli bir Docker sürümü kurmak için mevcut sürümleri `apt list --all-versions docker-ce` ile listeleyin ve aynı sürüm dizesiyle `docker-ce=VERSION docker-ce-cli=VERSION` kurun.

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

Yönetici kullanıcınızı `docker` grubuna ekleyin, ardından yeni bir oturum açın (veya `newgrp docker` çalıştırın):

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

Paket grubu genellikle zaten oluşturduğu için `groupadd` grubun var olduğunu bildirebilir.

> **Uyarı**
>
> `docker` grubundaki herkes Docker servisini yönetebilir ve bu nedenle sunucuda root düzeyinde erişime sahiptir. Yalnızca güvendiğiniz yöneticileri ekleyin. Daha güçlü ayrım gerektiğinde Docker'ın rootless modu bir seçenektir.

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

Varsayılan `json-file` sürücüsüyle konteyner logları sınırsız büyür. Yeni konteynerleri, logları döndüren ve sıkıştıran `local` sürücüsüne geçirin:

```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"
```

Çıktı `Logging Driver: local` olmalıdır. Değişiklikten önce oluşturulan konteynerler, siz onları yeniden oluşturana kadar (örneğin `docker compose up -d --force-recreate` ile) eski ayarlarını korur.

> **İpucu**
>
> `/etc/docker/daemon.json` zaten varsa dosyanın tamamını değiştirmek yerine bu anahtarları mevcut dosyaya ekleyin.

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

Ana makine adresi belirtilmeden yayınlanan bir port (`-p 8080:80`) sunucunun tüm adreslerinde dinler. Docker'ın belgelerine göre ufw ve firewalld kuralları bu portları filtrelemez; çünkü Docker trafiği bu kurallar devreye girmeden önce işler. Debian varsayılan olarak bir güvenlik duvarı arayüzü kurmaz; önce ufw'yi kurun:

```bash
sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
```

Ardından uygulama konteynerlerini yalnızca loopback adresinde yayınlayın ve 80 ile 443 numaralı portları bir reverse proxy'ye bırakın. Compose'da bu şöyle görünür:

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

Proxy'yi [Caddy](/guides/caddy-reverse-proxy), [Nginx ve Certbot](/guides/nginx-reverse-proxy-certbot) veya [Traefik](/guides/traefik-reverse-proxy) ile kurun. Başka bir bilgisayardan `nc -vz sunucu-ip-adresiniz 8080` artık bağlanamamalıdır.

## Docker'ı güncelleme

Docker paketleri sistemin geri kalanıyla birlikte güncellenir:

```bash
sudo apt update
sudo apt upgrade
docker version
```

`docker-ce` yükseltmesi servisi yeniden başlatır. `unless-stopped` gibi bir yeniden başlatma politikasına sahip konteynerler kendiliğinden geri gelir; politikası olmayanlar siz başlatana kadar durur. Kullanıyorsanız Debian'ın `unattended-upgrades` aracı varsayılan olarak Debian güvenlik güncellemelerini uygular ve Docker deposunu kapsamaz; Docker yükseltmelerini kendiniz planlayın.

Konteynerlerin içindeki uygulamaları güncellemek ayrı bir iştir: her uygulama rehberinde anlatıldığı gibi yeni imajı çekip konteyneri yeniden oluşturun.

## Yedekleme ve geri yükleme

İmajları değil durumu yedekleyin (imajlar yeniden çekilebilir):

- `/var/lib/docker/volumes/` içindeki adlandırılmış volume'lar,
- konteynerlere bağladığınız ana makine dizinleri,
- `compose.yaml` ve `.env` dosyaları,
- `/etc/docker/daemon.json`.

Adlandırılmış bir volume'u arşivlemek için ona yazan konteynerleri durdurun ve volume'u bulunduğunuz dizine paketleyen kısa ömürlü bir konteyner çalıştırın:

```bash
docker run --rm -v app_data:/data -v "$(pwd)":/backup debian:stable-slim tar czf /backup/app_data.tar.gz -C /data .
```

Geri yüklemek için volume'u oluşturun ve arşivi içine açın:

```bash
docker volume create app_data
docker run --rm -v app_data:/data -v "$(pwd)":/backup debian:stable-slim tar xzf /backup/app_data.tar.gz -C /data
```

Veritabanlarını, canlı veritabanı dosyalarını kopyalamak yerine `docker exec` üzerinden kendi araçlarıyla (`pg_dump`, `mariadb-dump`) dökün ve her yedeğin bir kopyasını sunucunun dışında tutun.

## 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**
>
> Aşağıdaki komutlar tüm imajları, konteynerleri ve volume'ları kalıcı olarak siler. Önce ihtiyacınız olan her şeyi yedekleyin.

```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

### sudo: command not found

Sunucu bir root parolasıyla ve `sudo` olmadan kurulmuş. root olarak giriş yapın, `apt install sudo` çalıştırın, kullanıcınızı `usermod -aG sudo kullaniciadiniz` ile ekleyin ve o kullanıcıyla yeniden giriş yapın.

### Package 'docker-ce' has no installation candidate

apt, Docker deposunu okumuyor. `cat /etc/apt/sources.list.d/docker.sources` çalıştırın; `Suites` değerinin `trixie` veya `bookworm` olduğunu ve adresin `/linux/ubuntu` değil `/linux/debian` içerdiğini kontrol edin. Ardından `sudo apt update` çalıştırıp `NO_PUBKEY` veya `404` hatalarına bakın.

### permission denied while trying to connect to the Docker daemon socket

Oturumunuz henüz `docker` grubuna sahip değil. `id` ile kontrol edin; `docker` yoksa Adım 4'ü tekrarlayıp yeniden giriş yapın veya bu arada `sudo docker` kullanın.

### Güvenlik duvarı kurallarını değiştirdikten sonra konteynerlerin ağ erişimi yok

Kural setini temizlemek (`nft flush ruleset` veya `iptables -F`) Docker'ın kurallarını da siler. Kuralları yeniden oluşturmak için Docker'ı `sudo systemctl restart docker` ile yeniden başlatın ve tabloları temizlemek yerine kendi filtrelerinizi `DOCKER-USER` zincirine ekleyin.

### Disk doluyor

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

## Sonraki adımlar

- İlk çok konteynerli uygulamanızı [Docker Compose temelleri](/guides/docker-compose-basics) ile yazın.
- Uygulamaları [reverse proxy olarak Caddy](/guides/caddy-reverse-proxy) ile HTTPS üzerinden sunun.
- Docker'ı [Portainer](/guides/install-portainer) ile web arayüzünden yönetin.
- Konteyner iş yüklerine uygun sunucuları [Docker hosting](/docker-hosting) sayfasında görün.

## Sık sorulan sorular

### Debian'ın docker.io paketi yeterli olmaz mı?

Çalışır, ancak Docker; docker.io, docker-compose, docker-doc ve podman-docker paketlerini Docker Engine ile çakışan resmi olmayan paketler olarak listeler. Docker'ın kendi docker-ce paketleri Docker sürümlerini izler ve çoğu uygulama rehberinin kullandığı Compose ve Buildx eklentileriyle gelir.

### Docker hangi Debian sürümlerini destekliyor?

Docker şu anda Debian 13 (Trixie, stable) ve Debian 12 (Bookworm, oldstable) için amd64, arm64, armhf ve ppc64le paketleri yayınlıyor. Daha eski sürümler yeni Docker sürümlerini almıyor.

### Bu adımları Debian tabanlı başka bir dağıtımda kullanabilir miyim?

Docker yalnızca Debian'ın kendisini belgeler. Kali Linux gibi bir türev için Docker, depo satırındaki kod adını karşılık gelen Debian sürümüyle (örneğin trixie) değiştirmenizi söyler. Diğer türevler kendi talimatlarını gerektirebilir.

### Debian 13 nftables kullanıyor. Docker yine de çalışır mı?

Evet. Debian'daki iptables komutu, Docker'ın desteklediği nftables arka ucunu (iptables-nft) kullanır. Doğrudan nft komutuyla yazdığınız kuralları Docker yönetmez; konteynerler için kendi filtreleme kurallarınızı iptables ile DOCKER-USER zincirine ekleyin.

### Docker'ı kurduktan sonra sunucuyu yeniden başlatmam gerekir mi?

Hayır. docker servisi paket kurulur kurulmaz başlar ve açılışta etkinleştirilir. Yalnızca kullanıcınızı docker grubuna ekledikten sonra oturumu kapatıp yeniden açmanız gerekir.

---

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