Docker Compose

Docker Compose & Komutları

Deniz TÜRKMEN
5 min readSep 7, 2022

Merhabalar,

Bu yazımda Docker Compose ne olduğu, ne için kullanıldığı, komutları ve basit bir örnek ile mantığını inceliycez.

Docker Compose, kompleks uygulamaların tanımlanmasını ve çalıştırılmasını sağlar. Birden fazla container tanımını tek bir dosyada yapabilir, tek bir komut ile uygulamanızın ihtiyaç duyduğu tüm gereksinimleri ayağa kaldırarak uygulamayı çalıştırabilirsiniz. Docker compose ile çalıştırdığımız containerların birbirine bağımlı olması sağlayabiliriz.

Docker Compose, Windows ve Mac de Docker Desktop yüklediğinizde docker-compose otomatik olarak yüklenir. Linux de ise docker compose ayrıca yüklemeniz gerekir. Linux yüklemek için daha önceki yazımı okuyabilirsiniz.

Docker Compose yaml dosya formatındadır. YAML, hem insan tarafından kolaylıkla okunabilen hem de sayısal olarak kolaylıkla işleme alınabilen ve tüm programlama dilleri tarafından kullanılabilen bir veri değişim formatıdır. YAML’ın açılımı Ain’t Markup Language’dir. YAML dilinde yazılan veriler birçok programlama dilinde rahatça okunacak şekilde kütüphanelere sahiptir. Anahtar-değer (Key-Value) çiftlerinden oluşur.

Elasticsearch-Kibana

Docker Compose dosyası versiyon ile başlar ve zorunludur. Yukarıdaki örneğimizde version 3'e göre yazılmıştır.

Yaml içeriğinde çalışacak uygulamızın bilgileri yazarız. Servis ismi, image, network ve volume tanımlamaları yapabiliriz. Yukarıdaki örnekte servis ismi olarak elasticsearch verilmiş. Servisin environment ve port tanımlamaları da yapılmıştır.

docker-compose up

komutu ile çalıştırtıldığımızda ilk defa çalıştırıyorsak image sistemimizde olmadığı için ilk önce image indirme işlemi yapacaktır.

indirme işlemi bittikten sonra tarayıcımızdan localhost:9200 gittiğimizde

ve tarayıcımızdan localhost:5601 gittiğimizde

uygulamalarımızın hizmet verdiği göreceksiniz. -d (detach) background çalıştırabiliriz.

docker-compose up -d

docker-compose.yaml içerisinde kullanabileceğimiz komutlar şunlardır.

Build

İlgili servisin hangi Dockerfile göre build edeceğini bildiririz. İki şekilde kullanımı vardır.

  • Sadece build edilecek Dockerfile path verilir.
build: Path_yolu
  • İkinci olarak build alınacak Dockerfile hangi klasörde olduğu gösterilir.
build:
context: ./Icerik
dockerfile: Dockerfile_yolu

Container_name

Servisimiz içinde oluşturduğumuz containerımıza isim vermek için kullanılır.

container_name: container_deniz

Command

Servisimiz içinde containerımızı çalıştırırken çalışması istediğimiz komutları söyleyebiliriz.

Depends_on

Çalışan servislerimizin birbirine bağımlı olmasını istediğimiz durumlarda kullanılırız.

version: '3'services:
nginx-service:
build: Dockerfile_dosya
depends_on:
- ruby-service
ruby-service-1:
build: Dockerfile_dosya
depends_on:
- redis-service-1

redis-service-1:
image: redis:5

Dns

Service ’den oluşturulacak containerlar tarafından kullanılacak DNS sunucu veya sunucuları bu komut ile değiştirilebilir.

dns: 8.8.8.8veyadns:
- 8.8.8.8
- 8.8.4.4

Environment

Service ’den oluşturulacak containerlara yeni Environment Variable’lar bu opsiyon ile eklenebilir.

environment:
- DEBUG=true
- PASSWORD=secret

Expose

Container’lar arasında port’ları açmak için kullanılır.

expose:
- "3306"

Extra_hosts

DNS sunucularda tanımlı olmayan fakat Container içerisinden isimleri ile erişilebilmesini istediğimiz IP’lerin Container’lardaki /etc/hosts dosyasına yazılması için kullanılan bir opsiyondur.

extra_hosts:
- "local.server:192.168.1.54"

Image

Service’den oluşturulacak container’ların başlatılacağı Image’ı belirler.

Networks

Service’den oluşturulacak container’ların dahil olacağı Network’leri belirleyebiliriz.

my-service:
networks:
- deniz-network

Ports

Service’den oluşturulacak container’lardan host’a map’lenecek (forward edilecek) portları belirler. En çok kullanılan opsiyonlardan biridir.

Volumes

Üç farklı opsiyona sahiptir.

  • Host üzerindeki bir klasörün container’a mount edilmesi.
services:
my-service:
volumes:
- /Desktop/App:/var/lib/app
  • Container üzerinde bir volume yaratılması için
services:
my-service:
volumes:
- /var/lib/app
  • Volumes konfigürasyonunda tanımlanan bir Volume’un container mount edilmesi.
services:
my-service:
volumes:
- my-volume:/var/lib/app
volumes:
my-volume:
driver: local

Docker Compose CLI

Docker Compose komutlarını inceleyelim. Komut satırından

docker-compose --help

Docker Compose Build

Komutu ile docker-compose dosyasında tanımladığımız container servisleri tek tek veya toplu halde build edebiliriz.

docker-compose build <service_ismi>

Docker Compose Çalıştırma

Docker Compose dosyasının içindeki servisleri ayağa kaldırmak için bu komut kullanılır.

docker-compose up

Dediğimizde cli çalışır durumda kalır. Eğer terminal ekranın standart input-output bize bırakması için -d (detach) parametresini kullanırız. Bu parametrenin bir güzel yanı da siz bilgisayarınıza restart atsanız bile bilgisayarınız tekrar çalıştığında service hep up (çalışır) durumda olur.

-no-recreate parametresi ile servis veya servislerin image build edilmesi ve yeni bir containerın oluşması engellenir. Burada dikkat etmeniz docker-compose yaml dosyasında yaptığımız değişiklikleri algılamaz hep aynı image ve containerları ayağa kaldırır.

-force-recreate her seferin image build edilmesi ve yeni bir containerın ayağa kalkmasını istiyorsak bu parametre kullanılır.

docker-compose yaml dosyamızda birden fazla servisimiz olabilir. İstediğimiz servisleri ayağa kaldırmak için

docker-compose up <servis_name_1> <servis_name_2>

komutu kullanırız.

Docker Compose Silme

Çalışan containerlarımızı silmek için kullanılır.

docker-compose down

eğer biz burda -v (volumes) parametresini de kullanır isek docker-compose yaml dosyasında tanımladığımız volume bağlantılarını siler. Volume ne olduğu okumak isterseniz bir önceki yazımı inceleyebilirsiniz. Parametre kullanımı

docker-compose down -v

Docker Compose Listeleme

Komutu ile docker-compose dosyalarımızı listeleriz.

docker-compose ps

Docker Compose Başlatma

Komutu ile çalışmayan bir containerı tekrar çalıştırabiliriz.

docker-compose start

Docker Compose Durdurma

Çalışan containerımızı durdurmak için kullanılır.

docker-compose stop

Docker Compose Logs

Çalışan containerımızın loglarına bakmak için kullanılır. Kullanımı

docker-compose logs

Docker Compose Exec

Çalışan containerımızın içerisine girip komut çalıştırmak için kullanılır.

docker-compose exec service_name

Docker Compose Öldürme

Çalışan uygulamaması sonlandırmak için kullanılır.

docker-compose kill

Docker Compose Oluşturma

Yeni bir servis oluşturmak için kullanılır.

docker-compose create <servis_ismi>

Docker Compose Örneği

Üç tane nginx servisini docker-compose ile ayağa kaldıralım.

ilk olarak docker-compose.yaml yazalım.

docker-compose dosyamızda servislerimiz, network ve volume tanımladık.

Tarayıcıdan localhost:5001

ve localhost:5002

ve localhost:5003

gittiğimizde servislerimiz çalışır durumdadır.

docker-compose ps
docker container ls -a

komutunda containerların çalıştığını görmekteyiz.

docker container inspect nginx1

docker-compose.yaml dosyasında verdiğimiz network eklenmiştir.

--

--

Deniz TÜRKMEN
Deniz TÜRKMEN

No responses yet