Docker Compose

Docker Compose nedir ?#

  • Docker compose docker-cli gibi çalışan, yani docker-daemon’a instruction gönderen, bir çeşit API’dir. docker-compose.yml, docker-compose.yaml adlı bir dosyada docker-cli komutlarını dizip TEK HAMLEDE çalıştırabilmene izin veren bir araçtır.

Docker Compose oluşturduğunuz konfigürasyon dosyanızı bulabilmesi için vereceğiniz dosya ismi docker-compose.yml, docker-compose.yaml bu iki isimden biri olmak zorundadır. Aksi taktirde docker konfigürasyon dosyalarınızı bulamayacaktır.

  • Aynı zamanda iki farklı docker container ını bir biriyle bağlayabilmek için kullanılan bir araçtır.

Örnek bir docker-compose.yml;#

version: '3'
services: 
    redis-server:
        image: 'redis'
    node-app:
        # build . bu yaml dosyasının bulunduğu dizindeki Dockerfile
        # olacaktır. Bu Dockerfile ile konfigüre edilen container 
        # ayağa kaldırılır.
        build: .
        # başına - eklendi çünkü port bilgisi array olarak kullanılır
        ports: 
            - "8081:8081" 

Burada iki adet container (service) belirtilmiş. Bu servisler açık bir şekilde birbilerine bağlanmadılar. Ancak docker-compose bu iki container deploy edildiğinde birbirleriyle konuşabileceği bir network kuracaktır.

const express = require('express');
const redis = require('redis');

const app = express();

// docker-compose.yml dosyasına bakarak
// docker'ın 'redis-server' adında bir 
// redis container'ı deploy edeceğini anlıyoruz
const client = redis.createClient({
    host: 'redis-server',
    port: 6379 // redis varsayılan portu
});
client.set('visits', 0);

app.get('/', (req, res) => {
    client.get('visits', (err, visits) => {
        res.send('Number of visits : ' + visits);
        client.set('visits', parseInt(visits) + 1);
    });
});

app.listen(8081, () => {
    console.log('Listening on port 8081');
});

Docker Compose Nasıl Çalıştırılır ?#

Yukarıdaki code parçacığında redis client host olarak ‘redis-server’ yazılmış. Docker compose bu uygulamayı ayağa kaldırırken, bu isimle bir host bulmayı umacak. Bu host’u da yukarıda belirtilen .yml ve ya .yaml uzantılı dosyada arayacak. Yukarıdaki yml uzantılı dosyada redis-server bir redis image ı olarak verilmiştir. Docker compose bunu görecek ve docker üzerinde bir redis containerı ayağa kaldıracaktır.

docker-compose up

Komutu projenin dosya konumunda çalıştırılır ve docker dizindeki .yaml ve ya .yml uzantılı konfigürasyon dosyasını bulur ve docker compose bu iki farklı container’ı birbirlerine bind eder. Eğer aynı zamanda build edilmesi gerekirse;

docker-compose up --build

kullanılır. Eğer detached mode ile çalıştırma istenirse;

docker-compose up -d

kullanılır. Docker compose tarafından ayağa kaldırılan tüm container ları durdurmak için;

docker-compose down

Atacan KULLABCI © 2024