dev-tools
Sözlük ↗Docker
Docker, 2013'te başlatılan ve modern uygulama konteynerleştirmesini popülerleştiren platform ve araç setidir. "Konteyner" genel kavram iken, "Docker" özellikle ekosistemi ifade eder: Docker Engine (konteynerleri oluşturan ve çalıştıran çalışma zamanı), görüntüleri tanımlamak için Dockerfile biçimi, Docker Hub (konteyner görüntülerini paylaşmak için genel bir kayıt defteri) ve Docker Compose (birden çok konteynerli uygulamaları birlikte tanımlamak ve çalıştırmak için bir araç). Docker, OS düzeyinde izolasyonu icat etmedi (Linux konteynerleri ve cgroup'lar ondan öncedir), ancak konteyner oluşturma, dağıtma ve çalıştırmanın geliştirici deneyimini büyük ölçüde basitleştirdi; bu yüzden "Docker" ve "konteynerler" günlük konuşmada sıklıkla birbirinin yerine kullanılır, oysa Docker birkaç uygulamadan biridir (containerd, Podman ve diğerleri de aynı OCI standardı konteyner biçimini çalıştırır). AI/SaaS geliştiricileri için önemi: Docker, bir uygulamayı konteynerleştirmenin neredeyse evrensel başlangıç noktasıdır ve özellikle Docker Compose, yerel geliştirme için son derece popülerdir — bir uygulamanın tüm bağımlılık yığınını (veritabanı, önbellek, mesaj kuyruğu) tek bir komutla başlatarak, yeni bir geliştiricinin Postgres, Redis ve diğer her şeyi manuel olarak kurup yapılandırmak yerine dakikalar içinde `git clone`'dan tamamen çalışan bir yerel ortama geçmesini sağlar. Nasıl çalışır: bir `Dockerfile`, bir görüntünün katman katman nasıl oluşturulacağını tanımlar (`FROM`, `RUN`, `COPY` gibi her talimat önbelleğe alınmış bir katman oluşturur; böylece küçük bir kod değişikliğinden sonra yeniden oluşturmak yalnızca o değişiklikten sonraki katmanları yeniden yürütür, derlemeleri hızlı tutar). `docker build` bir görüntü üretir; `docker run` o görüntüden bir konteyner başlatır. `docker-compose.yml`, birden çok hizmeti ve bunların nasıl bağlandığını (ağ, paylaşılan birimler, ortam değişkenleri) tanımlar ve `docker compose up`, hepsini koordineli bir yığın olarak birlikte başlatır. Uygulamalı örnek: bir SaaS ekibine yeni katılan bir mühendis, tam yığını yerel olarak çalıştırması gerekiyor. Postgres, Redis ve uygulamanın tam çalışma zamanı sürümünü manuel olarak kurmak yerine, depoyu klonlar ve `docker compose up` çalıştırır. Docker Compose, üç hizmet tanımlayan `docker-compose.yml`'yi okur: `api` (projenin Dockerfile'ından oluşturulmuş), `db` (kalıcılık için bağlı bir birime sahip resmi `postgres:16` görüntüsü) ve `cache` (resmi `redis:7` görüntüsü). Üçü de başlar, otomatik olarak ağa bağlanır (API konteyneri veritabanına `db:5432` ana bilgisayar adında ulaşabilir) ve yeni mühendis, sıfır manuel bağımlılık kurulumuyla yaklaşık iki dakika içinde tamamen çalışan bir yerel ortama sahip olur — bu, doğru Postgres ve Redis sürümlerini manuel olarak kurmak, birbirleriyle konuşacak şekilde yapılandırmak ve yerel olarak kurulan bir sürümün ekibin geri kalanının çalıştırdığından neden hafifçe farklı davrandığını hata ayıklamakla kolayca yarım gün sürebilecek bir işe kıyasla.
İlgili terimler