Docker Engine, uygulamaları image ve container modeliyle çalıştırmayı kolaylaştırır. Ancak geliştirici bilgisayarında çalışan bir container'ın sunucuda da yönetilebilir olması için paket kaynağı, veri kalıcılığı, ağ ve yetki tasarımı gerekir. İlk kurulumun amacı yalnızca hello-world çıktısını görmek değil, hangi bileşenlerin kurulduğunu ve nasıl işletileceğini anlamaktır.
Bu rehber temiz bir Ubuntu Server 24.04 LTS laboratuvarına odaklanır. Mevcut Kubernetes veya başka container altyapısı bulunan bir host'ta paket kaldırma ya da değiştirme işlemleri ayrı etki analizi gerektirir. Burada gerçek uygulama yayını ve internet erişimi açılmayacaktır. Sonraki uygulama kurulumu için image, secret ve veri politikası ayrıca hazırlanmalıdır.
1. İşletim sistemini ve mevcut paketleri inceleyin
Sunucunun sürümünü ve mimarisini kontrol edin. Mevcut docker.io, containerd, runc veya farklı container paketlerinin kullanımda olup olmadığını bulun. Çakışan paketleri otomatik olarak topluca kaldırmak yerine hangi hizmetlere ait olduklarını belirleyin. Temiz laboratuvar ile çalışan üretim host'unun aynı işlem listesine sahip olması beklenmez.
cat /etc/os-release
dpkg --print-architecture
Disk kullanımını ve image'ların büyüyeceği alanı da değerlendirin. Container katmanları, uygulama logları ve kalıcı volume'ler aynı bölümde plansız büyürse host dolabilir. İlk gün küçük olan test ortamında bile saklama ve temizlik yaklaşımını belirlemek yararlıdır.
2. Resmî APT kaynağını ekleyin
Docker'ın Ubuntu kurulum dokümanı, desteklenen sistemleri, resmî paket kaynağını ve güvenlik duvarı davranışını açıklar. Aşağıdaki örnek üreticinin APT yaklaşımını kullanır. Kurulum komutları bir web betiğini doğrudan shell'e yönlendirmez; paketler tanımlı ve imzalı kaynaktan alınır.
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
Ardından depo tanımını oluşturun. İşletim sistemi kod adı ve mimarisi komutla alınır; bunların gerçekten beklediğiniz Ubuntu kurulumuna ait olduğunu ilk adımda doğrulamış olmalısınız.
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
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3. Hizmeti ve ilk çalışmayı doğrulayın
Docker servisinin durumunu ve istemci-sunucu bilgilerini kontrol edin. hello-world, image indirme ve container başlatma zincirinin temel bir denemesidir. Gerçek uygulamanın depolama, ağ veya performans gereksinimlerini karşıladığını göstermez.
sudo systemctl status docker
sudo docker version
sudo docker run --rm hello-world
sudo docker compose version
Kurumsal ağda proxy veya özel registry varsa erişim yolu ayrıca yapılandırılmalıdır. İndirme sorunu yaşandığında TLS doğrulamasını kapatmak yerine sertifika zincirini, proxy ayarını ve DNS'i inceleyin. Üretimde kullanılacak image'ların kaynağı ve sürüm politikası tanımlı olmalıdır.
4. Yetki modelini gelişigüzel genişletmeyin
Bu rehber komutlarda sudo kullanır. Bir kullanıcıyı docker grubuna eklemek, host üzerinde çok geniş yetkiler sağlayabilir; bunu yalnızca “sudo yazmayalım” kolaylığı olarak değerlendirmeyin. Kimlerin daemon'a erişeceği ve bu erişimin hangi yönetim süreciyle verileceği belirlenmelidir.
Daemon yönetim arayüzünü internete açmak başlangıç kurulumu için gerekli değildir. Uzak yönetim ihtiyacı varsa kimlik doğrulaması, şifreleme ve ağ erişimi ayrı tasarlanır. Container içindeki kullanıcı yetkisiyle host'taki yönetim yetkisini de ayırın. Uygulamanın çalışması için her zaman ayrıcalıklı container gerekmez.
5. Veri kalıcılığını uygulamadan önce anlayın
Container silindiğinde hangi verinin kalacağını belirleyin. Yazılabilir container katmanına bırakılan verilerle volume veya bind mount üzerinde tutulan verilerin yaşam döngüsü aynı değildir. Veritabanı veya kullanıcı dosyası taşıyan uygulamada saklama, erişim ve yedekleme adımlarını açıkça tanımlayın.
Uygulama sürümü değişirken verinin formatı da değişebilir. Eski image'a geri dönmek, veritabanını eski biçimine döndürmez. Bu nedenle güncelleme planı; uygulama, kalıcı veri ve geri dönüş koşullarını birlikte ele almalıdır. Otomatik image güncellemesi, test edilmemiş veri dönüşümlerini güvenli hâle getirmez.
Ağ ve log kontrolleri
Container portu yayımlamak, host'un erişim yüzeyini değiştirir. Docker'ın port yayınlama davranışını kullanılan güvenlik duvarıyla birlikte değerlendirin; yalnızca UFW ekranındaki kuralları görerek yayın kapsamı hakkında karar vermeyin. İlk örneklerinizde gerekmeyen portları hiç yayımlamayın. İhtiyaç varsa loopback veya belirli arayüz bağlamasını ayrıca tasarlayın.
Log saklama ve boyut sınırlarını izleyin. Bir uygulamanın sürekli hata üretmesi yalnızca uygulama sorunu değil, disk tüketimi sorunu da yaratabilir. Kabul dosyanızda paket kaynağı, sürümler, yetkili kullanıcılar, veri dizinleri ve yedekleme sorumlusu bulunsun. CieloSync ile yazılım ve altyapı projenizin işletim modelini konuşabilirsiniz.
