Docker Nedir?
Docker, uygulamaları ve servisleri kapsayıcılar (container) içinde çalıştırmak için kullanılan açık kaynaklı bir platformdur. Kapsayıcılar, uygulamaların tüm bileşenlerini, bağımlılıklarını ve dosyalarını kapsayan birimlerde çalışır. Bu sayede uygulamalar çeşitli ortamlarda tutarlı bir şekilde çalıştırılabilir. Docker, geliştirme ve üretim ortamları arasında tutarlılık sağlamak açısından büyük avantajlar sunar.
Dockerfile Nedir?
Dockerfile, Docker imajlarını oluşturmak için kullanılan bir yapılandırma dosyasıdır. Temel olarak, bir Dockerfile bir dizi talimat içerir. Bu talimatlar, yeni bir imaj oluşturulurken hangi işlemlerin yapılacağını tanımlar. Dockerfile ile imaj oluşturmak, uygulama özelliklerini, bağımlılıklarını ve çalışma ortamını belirtmek için sistematik bir yol sağlar.
Temel Dockerfile Talimatları
Dockerfile içerisindeki temel komutlar şunlardır:
– FROM: Yeni bir imaj oluşturmak için kullanılan temel imajı tanımlar. Örneğin, bir Python uygulaması için `FROM python:3.9` kullanılabilir.
– COPY: Dosya veya dizinleri imajın içerisine kopyalar. Örneğin, `COPY . /app` komutuyla mevcut dizindeki tüm dosyalar `/app` dizinine kopyalanabilir.
– RUN: İmaj oluşturulurken komut çalıştırır. Örneğin, bağımlılıkları yüklemek için `RUN apt-get update` ve `RUN apt-get install -y package_name` kullanılabilir.
– CMD: İmajdan bir konteyner başlatıldığında varsayılan olarak çalıştırılacak komutu tanımlar. `CMD [“python”, “app.py”]` komutuyla belirtilen Python dosyası konteyner çalıştırıldığında otomatik olarak başlatılır.
– EXPOSE: Konteynerin dinleyeceği portu tanımlar. Bu, Docker’ın dış dünyaya hangi portlardan erişim sağlanacağını bilmesine yardımcı olur.
– ENV: Ortam değişkenlerini tanımlar. Örneğin, `ENV APP_ENV=production` komutuyla uygulama ortamı ayarlanabilir.
Dockerfile Oluşturma Süreci
Bir Docker imajı oluşturmak için önce bir Dockerfile oluşturulmalıdır. Bu, genellikle bir metin editörü ile gerçekleştirilir. Örnek bir `Dockerfile` aşağıdaki gibidir:
“`
Temel imaj
FROM python:3.9
Çalışma dizinini ayarla
WORKDIR /app
Gereksinimler dosyasını kopyala
COPY requirements.txt .
Gereksinimleri yükle
RUN pip install –no-cache-dir -r requirements.txt
Uygulama dosyalarını kopyala
COPY . .
Uygulamanın dinlediği portu belirt
EXPOSE 5000
Uygulamayı çalıştır
CMD [“python”, “app.py”]
“`
Bu örnekte, Python 3.9 imajı temel alınarak yeni bir imaj oluşturulmaktadır. Çalışma dizini `/app` olarak ayarlanmakta ve gereksinimler dosyası kopyalandıktan sonra `pip` ile gerekli bağımlılıklar yüklenmektedir. Son haddede, uygulamanın çalışacağı port belirtilmekte ve uygulama başlatılmaktadır.
İmaj Oluşturma
Dockerfile hazırlandıktan sonra, Docker imajı oluşturmak için terminal veya komut satırında aşağıdaki komut kullanılmalıdır:
“`
docker build -t imaj_adi:versiyon .
“`
Bu komut, geçerli dizindeki Dockerfile’ı kullanarak imajı oluşturur. `-t` parametresi, imaja bir etiket vermek için kullanılır. Örneğin, `docker build -t myapp:1.0 .` komutuyla `myapp` isimli ve `1.0` versiyonlu bir imaj oluşturulabilir.
İmajı Kullanma
Oluşturulan Docker imajı kullanarak bir konteyner başlatmak için aşağıdaki komut kullanılabilir:
“`
docker run -d -p 5000:5000 imaj_adi:versiyon
“`
Burada `-d` parametresi, konteynerin arka planda çalışmasını sağlar. `-p` parametresi ise konteyner içerisindeki port ile yerel sistem arasındaki bağlantıyı sağlar. Örneğin, `docker run -d -p 5000:5000 myapp:1.0` komutuyla `myapp` imajından bir konteyner başlatılır ve dış dünyadan 5000 portu üzerinden erişim sağlanır.
Docker İmajı Yönetimi
Oluşturulan Docker imajlarının listelenmesi için şu komut kullanılabilir:
“`
docker images
“`
Belirli bir imajı silmek için ise aşağıdaki komut kullanılmalıdır:
“`
docker rmi imaj_adi:versiyon
“`
İyi Uygulamalar
Dockerfile oluşturulurken dikkat edilmesi gereken bazı iyi uygulamalar bulunmaktadır. Bunlar arasında, gereksiz dosyaların imaja dahil edilmemesi, katman sayısının minimize edilmesi ve `COPY` ile `RUN` komutlarının etkin bir şekilde kullanılması yer alır. Her işlem, yeni bir katman oluşturduğundan, gereksiz aşamalardan kaçınılması önemlidir.
Sonuç
Docker imajı oluşturma süreci, Dockerfile ile sistematik bir şekilde gerçekleştirilmektedir. Doğru komutların ve yapılandırmaların kullanılması, gelişmiş bir konteyner ortamının oluşturulmasında kritik rol oynamaktadır. Docker, geliştiricilere uygulamalarını kapsayıcılar içinde kolayca geliştirme, dağıtma ve yönetme olanağı sunmaktadır.