Yeni Nesil Geliştirme Ortamı Bölüm 2: Docker Compose

Yeni Nesil Geliştirme Ortamı Bölüm 2: Docker Compose

Yeni Nesil Geliştirme Ortamı serimizin 2.bölümüne hoş geldiniz. 2. bölümde
” Docker Compose “ konusuna değineceğiz. Docker Compose Nedir ? DockerHub Nedir ? docker-compose.yml nedir ? Docker Compose Nasıl çalışır ? vb. sorulara cevap arıyacağız.


Docker Compose Nedir ?

Docker Composer, Docker Konteynerların (Container) tek bir yml uzantılı dosya ile yönetmemize olanak sağlayan orkestrasyon aracıdır.


DockerHub Nedir ?

Github benzeri Docker imajlarının (Dockerfile) saklandığı uzak sunucudur. docker pull docker_hub_kullanıcı_adı/docker_imaj_adı komutu ile uzaktaki imajı kendi bilgisayarımıza çekebiliriz.


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

Docker Compose çalışmak için bir adet “ docker-compose.yml “ ayar (config) dosyasına ihtiyaç duyar. Docker Compose “ docker-compose.yml “ dosyasında tanımlanan servisleri (Container) docker-compose build komutu ile imajını alır. docker-compose up komutu ile de Docker Container içersine koyar çalıştır. docker-compose stop komutu ile çalışan servisleri durdurabilir veya docker-compose down ile silebiliriz.

Hali hazırda çalışan servisleri görüntülemek için docker-compose ps komutunu kullanabiliriz.


Basit Bir Örnek Yapalım

Linux kullandığım için Linux komut satırı (terminal) üzerinden gideceğim. Terminal deyince hemen korkmanıza gerek yok basit klasör / dosya oluştur vb. işlemleri yapacağız. Siz isterseniz sağtık klasör/dosya oluştur vs. ile de yapabilirsiniz.

# docker-compose-example ismiyle bir klasör oluşturuyoruz.
mkdir docker-compose-example

# docker-compose-example klasörünün içerisine giriyoruz.
cd docker-compose-example

# musul ismiyle klasör oluşturuyoruz.
mkdir musul

# musul klasörünün içerisine index.html oluşturuyoruz.
touch musul/index.html

# musul klasörünün içerisinede ki index.html içerisine " <h1>Musul</h1> " satırını ekliyoruz.
echo "<h1>Welcome Musul</h1>" > musul/index.html

# kerkuk ismiyle klasör oluşturuyoruz.
mkdir kerkuk

# kerkuk klasörünün içerisine index.html oluşturuyoruz.
touch kerkuk/index.html

# kerkük klasörünün içerisinede ki index.html içerisine " <h1>Kerkuk</h1> " satırını ekliyoruz.
echo "<h1>Welcome Kerkuk</h1>" > kerkuk/index.html

# docker-compose.yml ismiyle bir dosya oluşturuyouz.
touch docker-compose.yml

# oluşturduğumuz dosyanın içerisini dolduruyoruz.
echo 'version: "3"
services:
    website1:
        image: nginx
        ports:
        - "82:80"
        volumes:
        - ./musul:/usr/share/nginx/html
    website2:
        image: nginx
        ports:
        - "83:80"
        volumes:
        - ./kerkuk:/usr/share/nginx/html
    database:
        image: mysql
        restart: always
        environment:
            - MYSQL_DATABASE=veri_tabanı_adı
            - MYSQL_ROOT_PASSWORD=root_sifresi
            - MYSQL_USER=mysql_kullanicisi
            - MYSQL_PASSWORD=mysql_kullanici_sifresi
        ports:
            - "8989:3306"' > docker-compose.yml

Tüm adımları eksiksiz uyguladıysak ” docker-compose.yml “ dosyamız aşığda ki gibi görünmelidir.

version: '3'
services:
    website1:
        image: nginx
        ports:
        - "82:80"
        volumes:
        - ./musul:/usr/share/nginx/html
    website2:
        image: nginx
        ports:
        - "83:80"
        volumes:
        - ./kerkuk:/usr/share/nginx/html
    database:
        image: mysql
        restart: always
        environment:
            - MYSQL_DATABASE=veri_tabanı_adı
            - MYSQL_ROOT_PASSWORD=root_sifresi
            - MYSQL_USER=mysql_kullanicisi
            - MYSQL_PASSWORD=mysql_kullanici_sifresi
        ports:
            - "8989:3306"

Dosyanın içeriğini inceliyelim.

Değer Açıklaması
Version adından da anlaşılacağı üzere docker-compose version numaramız
services kullanacağımız servislerin tanımlandığı alan.
website1 servisimizin adını tanımladığımız alan.
website2 diğer bir servisimizin adı.
mysql bir başka servisimizin adı.
image servizimizin kullanacağı imajı(image) adı.
volumes Docker Konteyner ile kendi bilgisayarımızda ki klasörleri eşitlediğimiz alan
ports servisimizin dışarıya açılan portun kendi bilgisayarımızda hangi porta karşılık geleceğini tanımladığımız alan.
restart servisimiz herhangi bir sebepten ötürü durursa ne sıklıkta yeniden başlamayı deniyeceğini belirttiğimiz alan. örnek: “ always “ her zaman
environment servisimizin ortam değişkenlerini tanımladığımız alan.

daha iyi anlaşılması için bir kaç kısmı daha açıklayalım.

  • Volume : ./musul:/usr/share/nginx/html ifadesi ile bilgisayarımızda yer alan “musul” klasörünü servisimizin içerisinde ki “/usr/share/nginx/html” klasörüne eşitlemiş oluyoruz.

  • Ports : docker-compose.yml da yer alan 82:80 ifadesi ile servisimizin dışarıya açık olan “80” portunu bilgisayarımzda ki “82” portuna eşitlemiş oluyoruz. daha sonra tarayıcımızdan http://localhost:82 yazarak servisimize erişebiliriz.

  • environment : MYSQL_DATABASE=veri_tabanı_adı ifadesi ile servisimizin içerisinde yer alan MYSQL_DATABASE değişkenini “veri_tabanı_adı” olarak ayarlamış oluyoruz.

docker-compose up -d komut ile servislerimizi ayağa kaldıralım.

Tarayıcıdan önce http://localhost:82 docker compose - ornek musul daha sonra http://localhost:83 adresine gidelim. docker compose - ornek kerkuk

Yukarıda ki çıktıları aldıysanız doğru yoldasınız demektir.

docker-compose exec {service_adı} {komut} komutu ile servislerimizin içerisinde komut çalıştırabilmekteyiz. Örneğin :

docker-compose exec database mysql -uroot -proot_sifresi

çıktı: docker compose exec örneği

veri tabanında ki tabloları görüntüleyelim.

show databases;

çıktı: docker compose - show database

oluşturduğumuz.

veri_tabanı_adi” adlı veri tabanını (database) görmekteyiz.


Sonuç

Docker Compose, docker-compose.yml, DockerHub, Nedir ? öğrenmiş olduk. Öğrendiklerimizide basit bir örnekle pekiştirdik. “Yeni nesil geliştirme ortamı “ serimizin 2.bölümünü tamamladık. 3. bölümde “ Laradock “ konusuna değineceğiz.

27 Mart 2019
© 2019 Oğuzcan Demircan All Rights Reserved