Docker Nedir? Neden Kullanmalıyız?
Docker, uygulamaları ve tüm bağımlılıklarını bir araya toplayarak sanal bir konteyner içinde izole bir şekilde çalıştırmayı sağlayan popüler bir platformdur. Docker, yazılım geliştirme süreçlerini hızlandırır ve uygulama dağıtımını daha taşınabilir hale getirir. Bir geliştirici olarak, uygulamanızın her ortamda çalışabilmesini sağlamak her zaman zorlu bir süreçtir. Docker, bu sorunu çözmek için gereken isoletasyon ve taşınabilirlik özelliklerini sağlar.
Bir Python uygulamasını Docker ile çalıştırmak, uygulamanızın tutarlılığını artırır. Geliştirme, test ve üretim ortamlarınız arasında uyumsuzluk problemleri ile karşılaşmadan uygulamanızı her ortamda kolayca çalıştırabilirsiniz. Bunun yanı sıra, aynı anda birden fazla uygulamayı yönetmek için de kullanışlıdır; çünkü her uygulama kendi konteynerinde çalışır, böylece birbirlerinden etkilenmezler.
Docker kullanmak, ekip içinde işbirliğini artırır. Farklı geliştiricilerin yazdıkları uygulamaların aynı versiyon ve bağımlılıklarla çalıştığından emin olmak, ekip uyumunu sağlar. Böylelikle, üretkenlik artar ve teknik borçların etkileri minimize edilir.
Python Uygulamasını Dockerize Etmek
Python uygulamanızı Dockerize etmek, genellikle birkaç adım içerir: bir Dockerfile
oluşturmak, uygulamanız için gerekli bağımlılıkları tanımlamak ve konteynerinizi çalıştırmak için uygun komutları vermektir. Bu adımlar, işlemi daha sistematik hale getirmekte ve uygulamanızın hızlı bir şekilde çalışmasını sağlamaktadır.
Öncelikle, Dockerfile
adı verilen bir dosya oluşturmalısınız. Bu dosya, Docker’a uygulamanızın nasıl inşa edileceğini söyler. İçerisinde kullanacağınız Python sürümünü, gerekli hangi bağımlılıkları kuracağınızı ve hangi komutları çalıştıracak olduğunuzu belirteceksiniz. Bu dosya ile Docker, görüntüyü oluştururken bu kurallara göre hareket edecektir.
Örnek bir Dockerfile
şu şekildedir:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Burada, FROM
komutu ile temel bir Python görüntüsü seçiyoruz. Daha sonra çalışma dizinimizi ayarlayıp, gereksinimleri yüklemek için COPY
ve RUN
komutlarını kullanıyoruz. Son olarak, uygulamayı başlatacak olan CMD
komutunu belirtiyoruz.
Docker Çalışma Ortamını Hazırlama
Docker ile çalışmaya başlamak için Docker’ı bilgisayarınıza kurmanız gerekmektedir. Docker Desktop veya Docker Engine gibi araçları kullanarak kurulumu gerçekleştirebilirsiniz. Kurulumdan sonra, terminal veya komut istemciniz aracılığıyla Docker’ı kontrol edebileceğiniz basit bir komut ile başladığınızdan emin olabilirsiniz:
docker --version
Her şey yolunda gidiyorsa, Docker’ı kullanmaya başlayabilirsiniz. Öncelikle, Python uygulamanızın bulunduğu dizine gidin. Aşağıdaki noktaları takip ederek uygulamanızın bağımlılıklarını belirleyen bir requirements.txt
dosyası oluşturmalısınız. Bu dosya, projeniz için gereken kütüphaneleri içerir.
Örneğin:
Flask==2.0.1
requests==2.25.1
Bu örnekte Flask ve requests bağımlılıklarını tanımladık. İhtiyacınıza göre bu dosyayı güncelleyebilirsiniz.
Docker Görüntüsü Oluşturma
Uygulamanızın Dockerfile
ve bağımlılık dosyası oluşturduktan sonra, Docker görüntüsü oluşturma zamanıdır. Bunu gerçekleştirmek için aşağıdaki komutu çalıştırmalısınız:
docker build -t python-app .
Burada, -t
ile görüntüyü etiketliyoruz (python-app
adında). Sonundaki .
simgesi, geçerli dizinden görüntüyü inşa etmesini ifade eder. Komutu çalıştırdığınızda, Docker, verdiğimiz Dockerfile
talimatlarına bağlı olarak görüntüyü oluşturacaktır. Bu işlem, bağımlılıkların indirilmesi ve uygulamanın konteyner imajına yüklenmesi gibi aşamalardan geçer.
Görüntü başarılı bir şekilde oluşturulduysa, oluşturduğunuz görüntüleri görmek için şu komutu kullanabilirsiniz:
docker images
Bu komut, yerel sisteminizdeki mevcut tüm Docker görüntülerini listeleyecektir. Burada, python-app
adında görüntünüzü bulmalısınız.
Konteyneri Başlatma
Docker görüntüsü oluşturulduktan sonra, artık konteynerinizi başlatabilirsiniz. Bu, uygulamanızın çalıştırılması ve etkileşimlı hale gelmesi anlamına gelir. Aşağıdaki komut, konteyneri başlatmak için kullanılabilir:
docker run -d -p 5000:5000 python-app
Burada, -d
parametresi, konteynerin arka planda çalışmasını sağlar. -p
parametresi ise, host bilgisayarınızdaki 5000 portunu konteynerdeki 5000 portuna yönlendirmektedir. Eğer uygulamanız web tabanlı bir uygulama ise, bu port üzerinden tarayıcıdan erişebilirsiniz.
Daha sonra, tarayıcıda http://localhost:5000
adresini ziyaret ederek uygulamanızın çalıştığını görebilirsiniz. Başarılı bir biçimde çalışıyorsa, uygulamanızın çalıştığını ve her şeyin düzgün işlediğini göreceksiniz.
Docker ile Uygulama Güncelleme
Bir Python uygulamasında güncellemeler yapmanız gerektiğinde, uygulamanızı güncelleyip yeni versiyonunu oluşturmak için yine Dockerfile
dosyanızı güncellemeniz ve ardından yeni bir görüntü inşa etmeniz gerekecektir. Değişiklikleri gerçekleştirdikten sonra, yeniden görüntüyü oluşturup aşağıdaki komut ile mevcut konteynerinizi durdurmalısınız:
docker stop
Ardından, yeni görüntüyü çalıştırarak güncellemelerinizi uygulayabilirsiniz. Bu, sürekli entegrasyon ve sürekli dağıtım (CI/CD) uygulamaları için büyük kolaylık sağlar. Her yeni kod değişikliğinizde, geliştiricileriniz daha düzenli bir yapı içinde çalışabilirler.
Örneğin, güncellemeleri uyguladıktan sonra, docker run
komutu ile yeni bir konteyner başlatarak güncellenmiş uygulamanızı hemen kullanmaya başlayabilirsiniz.
Sonuç
Bu yazıda, Python uygulamanızı Docker ile nasıl kolayca dockerize edebileceğinizi öğrendiniz. Docker, geliştirme süreçlerinizi sıkılaştırır ve uygulamalarınızın farklı ortamlarda tutarlılığını artırır. Basit bir yapılandırma ile uygulamanızı hızlı bir şekilde geliştirip, test edip ve yayına alarak daha verimli çalışabilirsiniz.
Dockerize edilmiş bir Python uygulaması, özellikle modern geliştirici ekipleri için büyük avantajlar sağlar. Tekrar tekrar çalıştırılabilir yapılar oluşturmak, sürüm kontrolü yapmak ve uygulamanızı güvenli bir ortamda çalıştırmak için bu yöntemi benimsemeniz faydalı olacaktır.
Docker ile çalışmayı öğrenmek, sadece bir beceri kazanmanızı sağlamayacak, aynı zamanda ekip içinde daha verimli bir uygulama geliştirme süreci yaratmanıza yardımcı olacaktır. Denemeye başlayın ve uygulamalarınızı daha güçlü ve yönetilebilir hale getirin!