Docker Nedir?

Docker, yazılım uygulamalarını hızlı bir şekilde paketlemek, dağıtmak ve çalıştırmak için kullanılan bir konteynerleme platformudur. Docker, konteyner adı verilen hafif ve taşınabilir birimler aracılığıyla uygulamaların izole edilmesini sağlar. Bu sayede, uygulamaların farklı ortamlarda tutarlı bir şekilde çalışmasını sağlar ve uygulama geliştirme sürecini hızlandırır. Docker’in popülerliği, kolay kullanımı, hızlı dağıtımı ve ölçeklenebilirliğiyle dikkat çeker. Bu makalede, Docker’in temel prensipleri, kullanımı ve yazılım geliştirme sürecindeki rolü detaylı bir şekilde ele alınacaktır. Ayrıca, Docker’in avantajları, kullanım senaryoları ve geliştiricilerin verimliliğini artırmak için ipuçları da incelenecektir.

Docker Nedir?

Docker, yazılım uygulamalarını konteynerleme teknolojisi kullanarak hafif, taşınabilir ve izole bir şekilde çalıştırmaya olanak tanıyan bir platformdur. Bu, uygulamaların farklı ortamlarda (geliştirme, test, üretim) tutarlı bir şekilde çalışmasını sağlar.

Docker Temel Özellikleri Nelerdir?

Docker’in temel özellikleri şunlardır:

Konteynerleme: Uygulamaları hafif ve izole konteynerlara paketler, böylece farklı ortamlarda kolayca taşınabilir ve çalıştırılabilir hale gelirler.

Taşınabilirlik: Konteynerler, herhangi bir Docker uyumlu ortamda (Windows, Linux, macOS) aynı şekilde çalışabilirler.

Hızlı Dağıtım: Konteynerler, hızlı bir şekilde başlatılıp durdurulabilir ve çoğaltılabilir, bu da uygulama dağıtımını hızlandırır.

Verimlilik: Konteynerler, kaynakları daha verimli kullanır ve daha az yer kaplar, böylece daha fazla uygulamayı aynı sunucuda çalıştırabilirsiniz.

İzolasyon: Konteynerler, birbirlerinden izole edilmiştir, bu da bir konteynerin diğerlerini etkileme riskini azaltır.

Ortam Yönetimi: Docker, uygulamanın gereksinimlerini ve bağımlılıklarını bir Dockerfile ile tanımlayarak ortamı kolayca yönetmeyi sağlar.

Geliştirme ve Test Kolaylığı: Docker, geliştirme ve test süreçlerini kolaylaştırır, çünkü herkes aynı ortamda çalışabilir ve uygulamaların tutarlılığı sağlanabilir.

Açık Kaynak: Docker, açık kaynaklı bir projedir ve geniş bir topluluk tarafından desteklenir, bu da sürekli gelişim ve iyileştirme anlamına gelir.

Docker’ın Sanal Makineden Farkları

Docker ve sanal makineler (virtual machines, VM) temelde yazılımların izole ortamlarda çalışmasını sağlayan teknolojilerdir, ancak bu iki çözüm arasında önemli farklar vardır:

1. Mimari Farklar

  • Sanal Makineler: Her sanal makine kendi işletim sistemini çalıştırır ve fiziksel donanımı simüle eden bir sanallaştırma katmanı (hypervisor) üzerinde çalışır. Sanal makine, donanım kaynaklarını (CPU, bellek, depolama) kendi içinde paylaşır ve her VM, tam bir işletim sistemi kopyası çalıştırır.
  • Docker (Kapsayıcılar): Docker ise konteyner adı verilen daha hafif bir yapı kullanır. Docker konteynerleri, ana işletim sisteminin çekirdeğini kullanır ve sadece uygulama ile gerekli bağımlılıklarını kapsar. Bu yüzden Docker, sanal makinelerden çok daha hızlı ve hafiftir, çünkü her bir kapsayıcıda ayrı bir işletim sistemi çalıştırmak gerekmez.

2. Kaynak Kullanımı

  • Sanal Makineler: VM’ler tam bir işletim sistemi kopyası çalıştırdığı için daha fazla CPU, RAM ve depolama alanı kullanır. Her sanal makine izole bir ortam sunduğu için kaynak kullanımı daha yoğundur.
  • Docker: Kapsayıcılar, işletim sistemini paylaşarak çok daha az kaynak kullanır. Bir kapsayıcı çalıştırmak, bir sanal makine çalıştırmaktan çok daha hızlıdır çünkü OS önyüklemesi gerekmez.

3. Performans

  • Sanal Makineler: VM’ler daha yavaş olabilir, çünkü her biri tam bir işletim sistemi ve sanallaştırma katmanıyla çalışır. Bu da bazı durumlarda daha fazla gecikme ve kaynak harcamasına neden olabilir.
  • Docker: Docker daha hızlı başlar ve çalışır çünkü kapsayıcılar, ana işletim sistemini doğrudan kullanarak uygulamayı çalıştırır. Bu da daha az genel gider ve daha iyi performans sağlar.

4. Taşınabilirlik ve Esneklik

  • Sanal Makineler: VM’ler farklı platformlar arasında taşınabilir olabilir, ancak her bir sanal makinenin kendi işletim sistemi ve yapılandırması olduğundan daha ağırdır ve daha karmaşık olabilir.
  • Docker: Docker kapsayıcıları, aynı temel işletim sistemine sahip olduğu sürece herhangi bir platformda kolayca çalışabilir. Uygulamaların çalıştırıldığı ortamı kapsüllediği için, uygulama bir yerde çalışıyorsa başka bir yerde de aynı şekilde çalışır (örneğin geliştirici ortamından üretim ortamına geçişte).

5. Kullanım Amaçları

  • Sanal Makineler: Daha çok büyük çaplı sanallaştırma gerektiren durumlarda, farklı işletim sistemleri çalıştırılması gerektiğinde kullanılır. Örneğin, aynı fiziksel sunucuda Windows ve Linux tabanlı sunucular çalıştırmak istenirse VM’ler tercih edilir.
  • Docker: Uygulama geliştirme ve dağıtım süreçlerini hızlandırmak, mikroservis mimarileri ve bulut tabanlı sistemlerde daha yaygın olarak kullanılır. Özellikle geliştirme, test ve üretim ortamlarında taşınabilirlik ve esneklik sağlar.

6. Güvenlik

  • Sanal Makineler: VM’ler, daha izole oldukları için genel olarak daha güvenlidir. Her VM, kendi işletim sistemi üzerinde çalışır, bu yüzden bir VM içindeki sorun diğer VM’leri veya ana sistemi genellikle etkilemez.
  • Docker: Docker kapsayıcıları, ana işletim sistemini paylaştığı için teorik olarak daha az izole olabilir. Ancak, güvenlik önlemleri ve yapılandırmaları ile güvenlik artırılabilir.

Özetle, Docker daha hafif ve hızlı bir çözümken, sanal makineler daha ağır ancak daha izole bir yapı sunar. Docker, özellikle modern yazılım geliştirme süreçlerinde ve mikroservis mimarilerinde tercih edilirken, VM’ler daha geleneksel sanallaştırma ihtiyaçlarına uygun olabilir.

Çok Kullanılan Docker Komutları

Docker, konteyner tabanlı uygulamaların yönetimini kolaylaştırmak için geniş bir komut setine sahiptir. İşte en çok kullanılan Docker komutları ve ne işe yaradıkları:

1. docker run

  • Açıklama: Bir konteyner başlatmak için kullanılır.
  • Örnek:
    bash docker run hello-world
    Bu komut, Docker Hub’dan “hello-world” imajını indirir ve çalıştırır.

2. docker ps

  • Açıklama: Çalışan konteynerlerin listesini gösterir.
  • Örnek:
    bash docker ps
    Yalnızca çalışan konteynerleri gösterir. Tüm konteynerleri görmek için -a opsiyonu eklenir:
    bash docker ps -a

3. docker images

  • Açıklama: Yerel Docker imajlarının listesini gösterir.
  • Örnek:
    bash docker images

4. docker pull

  • Açıklama: Belirtilen Docker imajını Docker Hub’dan indirir.
  • Örnek:
    bash docker pull nginx

5. docker exec

  • Açıklama: Çalışan bir konteyner içinde bir komut çalıştırmak için kullanılır.
  • Örnek:
    bash docker exec -it my_container bash
    Bu komut, “my_container” adındaki çalışan bir konteyner içinde bir terminal başlatır (interactive bash shell).

6. docker stop

  • Açıklama: Bir konteyneri durdurur.
  • Örnek:
    bash docker stop my_container

7. docker start

  • Açıklama: Daha önce durdurulmuş bir konteyneri yeniden başlatır.
  • Örnek:
    bash docker start my_container

8. docker rm

  • Açıklama: Bir konteyneri siler.
  • Örnek:
    bash docker rm my_container
    Not: Konteyneri silmeden önce durdurmanız gerekir.

9. docker rmi

  • Açıklama: Bir Docker imajını siler.
  • Örnek:
    bash docker rmi nginx

10. docker build

  • Açıklama: Bir Dockerfile‘dan bir Docker imajı oluşturur.
  • Örnek:
    bash docker build -t my_image .
    Bu komut, bulunduğunuz dizindeki Dockerfile‘ı kullanarak my_image adlı bir imaj oluşturur.

11. docker logs

  • Açıklama: Belirtilen konteynerin loglarını gösterir.
  • Örnek:
    bash docker logs my_container

12. docker-compose up

  • Açıklama: docker-compose.yml dosyasında tanımlanan hizmetleri başlatır.
  • Örnek:
    bash docker-compose up

13. docker-compose down

  • Açıklama: docker-compose up ile başlatılan hizmetleri durdurur ve kaldırır.
  • Örnek:
    bash docker-compose down

14. docker network ls

  • Açıklama: Mevcut Docker ağlarını listeler.
  • Örnek:
    bash docker network ls

15. docker network create

  • Açıklama: Yeni bir Docker ağı oluşturur.
  • Örnek:
    bash docker network create my_network

Bu komutlar Docker’ın temel işlevlerini yönetmek için yaygın olarak kullanılır. İleri düzey işlemler için daha fazla komut ve opsiyonlar da mevcuttur, ancak bu liste başlangıç için oldukça faydalıdır.

Share your love
Lütfi Bayrak

Lütfi Bayrak

Web tasarımcı, grafik tasarımcı, eğitimci...

Articles: 717