Dev Container Kurulumu: DNS'ten SSL Sertifikasına Kadar Sorunsuz Başlangıç

Dev Container Kurulumu: DNS'ten SSL Sertifikasına Kadar Sorunsuz Başlangıç

May 12, 2026 devcontainer docker-compose dns infrastructure developer-experience devops containerization

Dev Container'lar ile Geliştirici Deneyimini Ön Plana Çıkarmak

Hayal Kuralım Biraz

Bir geliştirici senin açık kaynaklı projesini bulmuş, "Dev Container'da Aç" butonuna tıklamış ve saniyeler içinde tamamen yapılandırılmış bir geliştirme ortamı çalışıyor. Kurulum scripti yok, sertifika uyarıları yok, ortam değişkenleriyle uğraşmak yok, "bu port zaten kullanılıyor mu?" kaygısı yok.

İşte containerlaştırılmış geliştirme iş akışlarının vaadi bu. Gerçekten de devrim niteliğinde bir yaklaşım. Ama böyle şeyler altında çoğu zaman karmaşık mühendislik kararları gizli oluyor.

Neden Dev Container'lar Önemli?

Buradaki avantaj sadece kolaylık meselesi değil—bu aslında katılımcı kazanma stratejisidir. Birisi projeyi keşfettiği andan itibaren yerel makinasında çalıştırabilmesi ne kadar kolay ise, o kadar çok katkıcı çekeceğin garantidir. Merak ile gerçekleştirme arasındaki zaman genellikle momentum kaybettiğin noktadır.

Azure servisleri emüle eden karmaşık bir aracla uğraşırken (DNS çözümlemesi, şifre yönetimi, servis bus'ları, kimlik doğrulama), bu uyuşmazlık katlanır. Her ek kurulum adımı birisi bırakıp gidebileceği bir potansiyel kaçış noktası demektir.

Mimarideki Üç Servis, Bir Ağ

Çözüm olarak Docker Compose ve dikkatli bir orkestrasyon kullanılıyor:

services:
  devcontainer:    # VS Code çalışma alanın
  service-host:    # Ana uygulama bileşeni
  dns-resolver:    # DNS sihri

Bu rastgele değildir. Her servisle kendi görevi var:

  • Çalışma alanı container'ı geliştirici tarafından kod yazılan ve komut çalıştırılan yer
  • Uygulama bileşeni servisleri sabit ve öngörülebilir portlarda çalıştırır
  • DNS çözümleyici *.yourdomain.local adreslerinin çalışmasını sağlar

Bridge ağında sabit IP atanması (172.28.0.0/16) burada kritik. Container yeniden başladığında bile değişmeyen adresler lazım, özellikle de öngörülebilir uç noktalara işaret etmesi gereken DNS ayarı için.

DNS Sorunu: Neden Bu Kadar Zor?

İşte asıl karmaşık kısım başlıyor. Container içinde DNS'i çalıştırmak kolay değildir çünkü Linux DNS çözümlemesini nasıl yönettiği konusu var.

Container'ınızın /etc/resolv.conf dosyası alan adı çözümlemesinin gerçek kaynağıdır. Ama bu dosya kararsızdır—Docker bunu üzerine yazabilir, ev sistemi değiştirebilir, sizin dikkatle hazırladığınız ayarları her zaman saymaz.

İlk yaklaşım—/etc/resolv.conf'u doğrudan değiştirmek—mantıklı gözükse de kırılgan bir yöntemdir. Bu dosya sistem tarafından "kendisinin" sayıldığından, statik değişiklikleriniz ağ başlatmasıyla kolayca geçersiz hale gelir.

Daha iyi bir yöntem ise DNS çözümleyici sidecar'ı (dnsmasq gibi) kullanmaktır:

  1. Container ağında sabit IP'de kendi servisi olarak çalışır
  2. Wildcard DNS desenlerini yönetir (*.yourdomain.local.dev)
  3. Diğer her şey için ev sisteminizin DNS'ine geri düşer
  4. Docker ağ yapılandırması yoluyla birincil nameserver olarak ayarlanır

Bu şekilde sisteme karşı savaşmıyorsun, onunla uyumlu çalışıyorsun. DNS çözümleyici birinci sınıf bir servis olur, konfigürasyon eki değil.

Compose Modunda Ağ Kurulumu: Çalışma Alanı Bağlama İnatçılığı

VS Code'un Dev Containers eklentisi ile Docker Compose kullanırken, dosya bağlama davranışı değişiyor. Çalışma alanı dizini development container'ına erişilebilir olmalı ama Compose modu bunu geleneksel devcontainer kurulumundan farklı şekilde yönetiyor.

Çözüm, compose.yml dosyasında dikkatlı bir volume yapılandırması:

services:
  devcontainer:
    volumes:
      - ..:/workspaces/project-name:cached
      - /var/run/docker.sock:/var/run/docker.sock

:cached bayrağı macOS ve Windows'ta önemlidir—burada ev sistemi ile container arasındaki dosya işlemleri yavaş olabilir. Bu işaret Docker'a container'ın daha çok okuduğu (yazmadığı) durumlar için optimize etmesini söyler.

Sertifika Güveni: Görmezden Gelemeyeceğin TLS Sorunu

HTTPS geliştirme güvenilir sertifikalara ihtiyaç duyar. Kendi imzalı sertifikalar uyarı tetikler ve sertifika zincirini doğrulayan araçlardan API çağrılarını bozar.

İşe yarayan desen:

  1. Devcontainer derlemesi sırasında yerel bir CA sertifikası oluştur
  2. Bunu container içindeki sistem güven deposuna ekle
  3. Uygulama bileşenin bu yerel CA tarafından imzalanan sertifikaları kullanmasını sağla
  4. CA sertifikasını bir volume bağlaması ile paylaş ki container içindeki araçlar buna güvensin

Bu, bir güvenlik baş ağrısı gibi görünen şeyi saydam bir detaya çevirir. Geliştirici sertifika uyarısı görmez çünkü sertifikalar aslında container'ın işletim sistemi tarafından güveniliyor.

Sistem Kontrolü: Her Şeyin Çalıştığını Doğrulama

Her şey yapılandırıldıktan sonra doğrulama gerekli:

$ curl https://app-name.yourdomain.local.dev:8899/health
{"status":"healthy","uptime":"2m34s"}

Bu tek komut tüm yığını sınar: DNS çözümlemesi, ağ bağlantısı, TLS doğrulaması ve uygulamanın kendisi. Eğer çalışırsa, devcontainer düzgün yapılandırılmış demektir.

Projen İçin Neden Önemli?

Ortadan kaldırdığın her manuel kurulum adımı kaldırılan bir engel demektir. Doğru yapılandırdığın her Docker Compose ayarı, tüm ekibin ve topluluğun kullanabileceği altyapıdır.

Bir devcontainer'a yapılan yatırım hemen geri döner: katkıcılar daha hızlı başlar, "benim bilgisayarımda çalışıyor" sorunları azalır ve geliştirici deneyimine önem verdiğini net şekilde gösterirsin.

Teknik detaylar—sabit IP atamaları, DNS sidecar'ları, sertifika zincirleri, volume bağlamaları—sadece uygulama ayrıntılarıdır. Asıl stratejik kazanç sağladıkları sürtünmesiz başlangıç deneyimidir.

İlk Adımlar

Karmaşık bir uygulama için devcontainer kuruyorsan, şu ilkeleri unutma:

  • Docker Compose'u bridge ağ ve sabit IP'lerle kullan
  • Hiçbir zaman DNS yapılandırması için yalnızca /etc/resolv.conf'a güvenme
  • Wildcard alanlar için ayrılmış bir DNS çözümleyici servisi çalıştır
  • Yerel sertifikaları otomatik oluştur ve güven
  • Gerçek alan adı tabanlı isteklerle uçtan uca sına

Karmaşıklık gerçek, ama başa yığılmış haldedir. Devcontainer'ın çalışmaya başladığında işin bitti—ve onu kullanan her geliştirici o çalışmadan sonsuza dek fayda sağlar.

Read in other languages:

RU BG EL CS UZ SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN