Docker’a Yeni Başlayanlar İçin: Bilmeniz Gereken Her Şey

Anahtar Noktalar

  • Docker konteynerleri, sanal makineler gibi izole edilmiş ortamlar oluşturur, ancak tam bir işletim sistemi çalıştırmaz, bu da taşınabilirlik ve kullanım kolaylığı sağlar.
  • Docker, uygulamaları hızlıca başlatmak için popüler bir araçtır ve sisteminize etki etmeden kullanılabilir.
  • Docker kullanmak için, platformunuza Docker’ı kurun ve bir Dockerfile yazarak ilk Docker imajınızı oluşturun.

Docker, uygulamaları paketleyerek konteyner adı verilen izole edilmiş ortamlar oluşturur. Her bir konteyner, sanal makineye (VM) benzer bir izole ortam sağlar, ancak VM’lerin aksine Docker konteynerleri tam bir işletim sistemi çalıştırmaz. Bu konteynerler, ana makinenizin çekirdeğini paylaşır ve yazılım seviyesinde sanallaştırma sağlar.

Docker’ın Temel Özellikleri

Docker, yazılım geliştiricileri ve sistem yöneticileri için standart bir araç haline gelmiştir. Sisteminize etki etmeden uygulamaları hızla başlatmanın pratik bir yoludur. Tek bir docker run komutuyla yeni bir hizmeti hemen başlatabilirsiniz.

Konteynerler, bir uygulamayı çalıştırmak için gereken her şeyi, işletim sistemi paketlerinden kendi kaynak kodunuza kadar kapsüller. Bir konteynerin nasıl oluşturulacağını Dockerfile dosyasında talimatlar olarak tanımlarsınız. Docker, Dockerfile kullanarak bir imaj oluşturur.

İmajlar, konteynerlerde mevcut olan yazılımları tanımlar. Bu, bir işletim sistemi ISO’su ile sanal makine başlatmaya kabaca eşdeğerdir. Bir imaj oluşturduğunuzda, herhangi bir Docker kullanıcısı docker run komutuyla uygulamanızı başlatabilir.

Docker Nasıl Çalışır?

Konteynerler, işletim sistemi çekirdeği özelliklerini kullanarak kısmen sanallaştırılmış ortamlar sağlar. chroot gibi komutlarla sıfırdan konteynerler oluşturmak mümkündür. Ancak bu, karmaşık, güvensiz ve hataya açık bir işlemdir.

Docker, konteynerlerin üretimi, dağıtımı ve kullanımı için eksiksiz bir çözümdür. Modern Docker sürümleri, birkaç bağımsız bileşenden oluşur. İlk olarak, terminalinizde etkileşimde bulunduğunuz Docker CLI vardır. CLI, Docker daemon’a komutlar gönderir. Bu daemon yerel olarak veya uzak bir sunucuda çalışabilir. Daemon, konteynerleri ve bunların oluşturulduğu imajları yönetmekten sorumludur.

Son bileşen ise konteyner çalıştırma ortamıdır. Bu ortam, çekirdek özelliklerini çağırarak konteynerleri gerçekten başlatır. Docker, OCI spesifikasyonuna uygun çalışma ortamlarıyla uyumludur. Bu açık standart, farklı konteynerleştirme araçları arasında birlikte çalışabilirliği sağlar.

Docker’ın ilk başladığınızda iç işleyişi hakkında çok fazla endişelenmenize gerek yoktur. Sisteminizde Docker’ı kurmak, konteynerleri oluşturup çalıştırmak için ihtiyacınız olan her şeyi sağlayacaktır.

Docker Neden Bu Kadar Popüler?

Konteynerler, yazılım geliştirme sürecinde birçok yaygın sorunu çözdükleri için popüler hale geldi. Konteynerler, bir kez paketleyip her yerde çalıştırma olanağı sunar, bu da geliştirme ortamınız ile üretim sunucularınız arasındaki farkı azaltır.

Konteynerler kullanarak her ortamın aynı olduğundan emin olabilirsiniz. Yeni bir ekip üyesi varsa, kendi geliştirme ortamını kurmak için sadece docker run komutunu çalıştırması yeterlidir. Hizmetinizi başlattığınızda, Docker imajınızı kullanarak üretime dağıtabilirsiniz. Canlı ortam, yerel örneğinizle tam olarak eşleşir ve “benim bilgisayarımda çalışıyor” senaryolarını önler.

Docker, tam teşekküllü bir sanal makineden daha kullanışlıdır. VM’ler her türlü iş yükünü desteklemek için tasarlanmış genel amaçlı araçlardır. Buna karşılık, konteynerler hafif, kendi kendine yeterli ve geçici kullanım durumlarına daha uygundur. Docker, ana makinenin çekirdeğini paylaştığından, konteynerlerin sistem performansına etkisi minimumdur. Konteyner başlatma süresi neredeyse anında gerçekleşir, çünkü sadece süreçler başlatılır, tam bir işletim sistemi değil.

Başlangıç

Docker, tüm popüler Linux dağıtımlarında mevcuttur. Ayrıca Windows ve macOS’ta da çalışır. Docker’ı kurmak ve çalıştırmak için platformunuzun Docker kurulum talimatlarını izleyin.

Kurulumunuzun çalıştığını kontrol etmek için basit bir konteyner başlatabilirsiniz:

bashKodu kopyaladocker run hello-world

Bu komut, temel “hello-world” imajıyla yeni bir konteyner başlatacaktır. İmaj, Docker’ı nasıl kullanacağınızı açıklayan bazı çıktılar verir. Ardından konteyner kapanır ve terminalinize geri dönersiniz.

İmajlar Oluşturma

hello-world komutunu çalıştırdıktan sonra, kendi Docker imajlarınızı oluşturmaya hazırsınız. Bir Dockerfile, hizmetinizi nasıl çalıştıracağınızı, gerekli yazılımları kurarak ve dosyaları kopyalayarak tanımlar. İşte Apache web sunucusunu kullanarak basit bir örnek:

DockerfileKodu kopyalaFROM httpd:latest
RUN echo "LoadModule headers_module modules/mod_headers.so" >> /usr/local/apache2/conf/httpd.conf
COPY .htaccess /var/www/html/.htaccess
COPY index.html /var/www/html/index.html
COPY css/ /var/www/html/css

FROM satırı, temel imajı tanımlar. Bu durumda, resmi Apache imajını kullanıyoruz. Docker, Dockerfile’daki kalan talimatları temel imajın üzerine uygular.

RUN aşaması, konteyner içinde bir komut çalıştırır. Bu, konteyner ortamında kullanılabilen herhangi bir komut olabilir. Burada, .htaccess dosyasının yönlendirme kurallarını ayarlaması için kullanılabilecek headers Apache modülünü etkinleştiriyoruz.

Son satırlar, çalışma dizininizdeki HTML ve CSS dosyalarını konteyner imajına kopyalar. İmajınız artık web sitenizi çalıştırmak için gereken her şeye sahiptir.

Şimdi imajı oluşturabilirsiniz:

bashKodu kopyaladocker build -t my-website:v1 .

Docker, Dockerfile’ınızı kullanarak imajı oluşturacaktır. Docker, her bir talimatınızı çalıştırırken terminalinizde çıktıları göreceksiniz.

Docker, Dockerfile’ın talimatlarını izlerken. Komuttaki -t, imajınızı belirli bir adla (my-website:v1) etiketler. Bu, gelecekte referans vermeyi kolaylaştırır. Etiketler iki bileşenden oluşur, iki nokta üst üste ile ayrılır. İlk kısım imajın adını belirlerken, ikinci kısım genellikle sürümünü belirtir. İki noktayı atladığınızda, Docker varsayılan olarak latest sürümünü kullanır.

Komutun sonundaki . işareti, Docker’a yerel çalışma dizininizdeki Dockerfile’ı kullanmasını söyler. Bu aynı zamanda kopyalama talimatlarını kullanarak çalışma dizinindeki dosya ve klasörleri kullanmanıza olanak tanır.

İmajınızı oluşturduktan sonra, bir konteyner başlatabilirsiniz:

bashKodu kopyaladocker run -d -p 8080:80 my-website:v1

Burada docker run komutuyla birkaç ekstra bayrak kullanıyoruz. -d bayrağı, Docker CLI’nın konteynerden ayrılmasını sağlayarak onun arka planda çalışmasına izin verir. -p ile bir port eşleme tanımlanır, böylece ana makinedeki 8080 numaralı port konteynerdeki 80 numaralı porta eşlenir. Tarayıcınızda localhost:8080 adresini ziyaret ederseniz web sayfanızı görmelisiniz.

Docker imajları katmanlardan oluşur. Dockerfile’daki her talimat yeni bir katman oluşturur. Gelişmiş yapı özelliklerini kullanarak birden çok temel imajı referans alabilir, önceki imajlardan ara katmanları atabilirsiniz.

İmaj Kayıtları

Bir imajınız olduğunda, bunu bir kayda gönderebilirsiniz. Kayıtlar, konteynerleri diğerleriyle paylaşabilmeniz için merkezi bir depolama sağlar. Varsayılan kayıt Docker Hub’dır.

Bir imajı referans alan bir komut çalıştırdığınızda, Docker önce bu imajın yerel olarak mevcut olup olmadığını kontrol eder. Eğer yoksa, Docker Hub’dan çekmeye çalışır. İmajları manuel olarak çekmek için docker pull komutunu kullanabilirsiniz:

bashKodu kopyaladocker pull httpd:latest

Bir imaj yayınlamak isterseniz, bir Docker Hub hesabı oluşturun. docker login komutunu çalıştırın ve kullanıcı adınızı ve şifrenizi girin.

Ardından, imajınızı Docker Hub kullanıcı adınızı kullanarak etiketleyin:

bashKodu kopyaladocker tag my-image:latest docker-hub-username/my-image:latest

Şimdi imajınızı gönderebilirsiniz:

bashKodu kopyaladocker push docker-hub-username/my-image:latest

Diğer kullanıcılar, imajınızı çekip konteynerleri başlatabilirler.

Özel imaj depolama alanı gerekiyorsa, kendi kayıt defterinizi çalıştırabilirsiniz. Birçok üçüncü taraf hizmet de Docker Hub’a alternatif olarak Docker kayıt defterleri sunar.

Konteynerlerinizi Yönetme

Docker CLI, çalışan konteynerlerinizi yönetmek için çeşitli komutlar sunar. İşte bilmeniz gereken en faydalı olanlardan bazıları:

Konteynerleri Listeleme

docker ps komutu, tüm çalışan konteynerlerinizi gösterir. -a bayrağını eklemek, durdurulmuş konteynerleri de gösterir.

Konteynerleri Durdurma ve Başlatma

Bir konteyneri durdurmak için docker stop my-container komutunu çalıştırın. my-container yerine konteynerin adını veya kimliğini girin. Bu bilgiyi ps komutundan alabilirsiniz. Durdurulmuş bir konteyneri docker start my-container komutuyla yeniden başlatabilirsiniz.

Konteynerler, ana süreçleri canlı kaldığı sürece çalışır. Yeniden başlatma politikaları, bir konteyner durduğunda veya ana makine yeniden başlatıldığında ne olacağını kontrol eder. docker run komutuna --restart always parametresini geçirerek bir konteynerin durduktan hemen sonra yeniden başlatılmasını sağlayabilirsiniz.

Bir Kabuk Alma

Bir konteynerde komut çalıştırmak için docker exec my-container my-command komutunu kullanabilirsiniz. Bu, konteynerin ana sürecinden ayrı bir yürütülebilir dosyayı manuel olarak çalıştırmak istediğinizde kullanışlıdır.

Eğer etkileşimli erişim gerekiyorsa -it bayrağını ekleyin. Bu, docker exec -it my-container sh komutunu çalıştırarak bir kabuğa geçmenizi sağlar.

Günlükleri İzleme

Docker, bir konteynerin standart giriş ve çıkış akışlarına gönderilen çıktıları otomatik olarak toplar. docker logs my-container komutu, bir konteynerin günlüklerini terminalinizde gösterir. --follow bayrağı, günlükleri gerçek zamanlı olarak izlemenizi sağlar.

Kaynakları Temizleme

Eski konteynerler ve imajlar sisteminizde hızla birikebilir. docker rm my-container komutunu kullanarak bir konteyneri kimliği veya adıyla silebilirsiniz.

İmajlar için komut docker rmi my-image:latest şeklindedir. İmajın kimliğini veya tam etiket adını girin. Bir etiketi belirtirseniz, imaj daha fazla etiket atanmadıkça silinmez. Aksi takdirde, belirtilen etiket kaldırılır, ancak imajın diğer etiketleri kullanılabilir kalır.

Toplu temizlemeler docker prune komutuyla mümkündür. Bu, durdurulmuş tüm konteynerleri ve gereksiz imajları kolayca kaldırmanıza olanak tanır.

Grafiksel Yönetim

Terminal sizin için uygun değilse, Docker için grafiksel bir arayüz kurmak için üçüncü taraf araçlar kullanabilirsiniz. Web panoları, kurulumunuzu hızla izleyip yönetmenize olanak tanır. Ayrıca konteynerlerinizi uzaktan kontrol etmenize de yardımcı olur.

Kalıcı Veri Depolama

Docker konteynerleri varsayılan olarak geçicidir. Bir konteynerin dosya sisteminde yapılan değişiklikler, konteyner durduktan sonra kalıcı olmaz. Basit bir docker run komutuyla başlatılan bir konteynerde herhangi bir dosya depolama sistemi çalıştırmak güvenli değildir.

Kalıcı verileri yönetmek için birkaç farklı yaklaşım vardır. En yaygın olanı, Docker Volume kullanmaktır. Volume’lar, konteyner dosya sistemlerine monte edilen depolama birimleridir. Bir volume içindeki veriler, bağlantılı konteyner durduktan sonra bile sağlam kalır ve gelecekte başka bir konteyner ile bağlanmanıza olanak tanır.

Güvenliği Sağlama

Docker’laştırılmış iş yükleri, çıplak metal muadillerine göre daha güvenli olabilir, çünkü Docker, işletim sistemi ile hizmetleriniz arasında bir ayrım sağlar. Bununla birlikte, Docker genellikle root olarak çalıştığı için güvenlik sorunu potansiyeli taşır ve kötü amaçlı yazılımlar çalıştırmak için istismar edilebilir.

Eğer Docker’ı sadece bir geliştirme aracı olarak kullanıyorsanız, varsayılan kurulum genellikle güvenle kullanılabilir. Üretim sunucuları ve ağ erişimine sahip daemon soketli makineler, canlı yayına geçmeden önce sağlamlaştırılmalıdır.

Docker kurulumunuzu denetleyerek potansiyel güvenlik sorunlarını belirleyin. Güçlü yanları bulmanıza ve çözümler öneren otomatik araçlar mevcuttur. Ayrıca, bireysel konteyner imajlarını içeriden istismar edilebilecek sorunlar için tarayabilirsiniz.

Birden Fazla Konteynerle Çalışma

docker komutu, yalnızca bir seferde bir konteynerle çalışır. Genellikle konteynerleri toplu halde kullanmak istersiniz. Docker Compose, konteynerlerinizi bir YAML dosyasında deklaratif olarak tanımlamanıza olanak tanıyan bir araçtır. Hepsini tek bir komutla başlatabilirsiniz.

Bu, projeniz diğer hizmetlere bağımlı olduğunda faydalıdır; örneğin, bir web arka ucunun bir veritabanı sunucusuna ihtiyacı olduğunda. Her iki konteyneri de docker-compose.yml dosyanızda tanımlayabilir ve otomatik ağ oluşturma ile basitleştirilmiş yönetimden yararlanabilirsiniz.

İşte basit bir docker-compose.yml dosyası:

yamlKodu kopyalaversion: "3"
services:
  app:
    image: app-server:latest
    ports:
      - 8000:80
  database:
    image: database-server:latest
    volumes:
        - database-data:/data
volumes:
    database-data:

Bu, iki konteyneri (app ve database) tanımlar. Veritabanı için bir volume oluşturulur. Bu, konteynerde /data olarak monte edilir. Uygulama sunucusunun 80 numaralı portu, ana bilgisayarda 8000 olarak açılır. docker-compose up -d komutunu çalıştırarak hem hizmetleri hem de ağı ve volume’ü başlatabilirsiniz.

Docker Compose kullanımı, paylaşabileceğiniz yeniden kullanılabilir konteyner tanımları yazmanıza olanak tanır. Geliştiricilerin docker run komutlarını ezberlemeleri yerine, docker-compose.yml dosyasını sürüm kontrolüne gönderebilirsiniz.

Birden fazla konteyner çalıştırmanın başka yaklaşımları da vardır. Docker App, başka bir soyutlama düzeyi sağlayan yükselen bir çözümdür. Ekosistemde, Podman, terminalinizde “pod”lar oluşturmanıza olanak tanıyan Docker’a alternatif bir araçtır.

Konteyner Orkestrasyonu

Docker, üretimde genellikle tek başına kullanılmaz. Artık Kubernetes veya Docker Swarm modu gibi bir orkestrasyon platformu kullanmak daha yaygındır. Bu araçlar, birden fazla konteyner replikasını yönetmek için tasarlanmıştır, bu da ölçeklenebilirlik ve güvenilirliği artırır.

Docker, daha geniş bir konteynerleştirme hareketinin sadece bir bileşenidir. Orkestratörler, üretim için daha uygun bir ortam sağlamak üzere aynı konteyner çalıştırma teknolojilerini kullanır. Birden fazla konteyner örneği kullanmak, aşamalı güncellemeler ve makineler arasında dağıtım sağlar, bu da dağıtımınızı değişim ve kesintilere karşı daha dirençli hale getirir. Geleneksel Docker CLI, tek bir ana bilgisayarı hedefler ve bireysel konteynerlerle çalışır.

Konteynerler İçin Güçlü Bir Platform

Docker, konteynerlerle çalışmak için ihtiyacınız olan her şeyi sağlar. Yazılım geliştirme ve sistem yönetimi için önemli bir araç haline gelmiştir. Temel avantajları, bireysel hizmetler için artan izolasyon ve taşınabilirliktir.

Docker ile tanışmak, temel konteyner ve imaj kavramlarını anlamayı gerektirir. Bu kavramları, iş yüklerinizi konteynerleştiren özel imajlar ve ortamlar oluşturmak için uygulayabilirsiniz.


Yayımlandı

kategorisi