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