Bu yazımızda docker-compose üzerinde durarak bir örnekle anlamaya çalışacağız. Docker-compose, çoklu konteyner uygulamalarında toplu olarak tanımlamalar, değişkenler ve argumanlar verip çalıştırabildiğimiz bir araçtır. Bu araçla YAML dosyası kullanılır ve servisler bu YAML dosyası üzerinden ayarlanır. Tek bir komutla bütün servisler verdiğiniz ayarlarla ayağı kalkar.

Compose tüm argumanlarla, production, staging, development ve testte çalışan başarılı bir CI akışıdır. Aşağıda Compose dosyası oluşturmayı ve adım adım servislerin nasıl oluşturulduğunu göreceğiz. Bu örnekte bir adet wordpress ve mysql ayağı kaldıracağız. Örnek docker-compose.yml dosyamız.

version: '3.3'
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - web_data:/var/www/html
     ports:
       - "8100:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: worpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}
    web_data: {}

Şimdi yukarıdaki adımları tek tek anlamaya çalışalım

version: bu kısım Compose versiyonlarının belirtildiği kısımdır bizim projemize uygun olan versiyon 3.3 olduğu için ben onu seçtim. Konu ile ilgili tüm versionları https://docs.docker.com/compose/compose-file/ adresinden bakabilir sürüm farklılıklarını inceleyebilirsiniz.

services: bu kısım servislerimizi tanımladığımız kısımdır. Artık tek tek altına servis isimlerini yazarak devam edebiliriz.

db: veritabanımızın adını ben db verdim konteyner ayağı kalkarken adı db olarak kalkacaktır siz istediğinizi verebilirsiniz.

image: indireceği docker imajının yolunu belirtiyoruz ben burada mysql:5.7 olarak tanımlama yaptım siz eğer farklı bir sürümle yola devam etmek istiyorsanız burada belirtmeniz yeterli olacaktır.

volumes: Bu kısım veritabanımızın datalarının dışarıda her hangi bir yere mount ediliğ edilmeyeceğinin belirtildiği kısımdır. Ben işi riske atmamak için bir volume oluşturmasını ve ona da data dizinini mount etmesini istedim.

restart: bu arguman konteynerın hata durumunda yeninde başlatılmasını sağlayan bir seçenektir. ben always diyerek sürekli yeniden başlatmasını seçtim.

environment: Bu kısım mysql in hangi parametreleri alacağını yazdığımız kısımdır. Yani root parolası database kullanıcı şifre gibi tanımlamaların yapıldığı argumanlar burada verilmektedir.

Bu şekilde mysql için compose tanımlamalarını yaparak wordpress e geçtik fakat bu kısımda bilinmesi gereken en önemli kısım wordpressi kurarken özellikle mysql yolunu tanımladığımız kısımdır.

depends_on: Bu kısım wordpressin çalışmak için ihtiyaç duyduğu gereksinimdir ve biz db olarak tanımlama yaptık.

port: Dikkat ettiyseniz mysql için port tanımlaması yapmadık sadece wordpress için yaptık çünkü konteynerlar kendi içinde haberleşecekler ve dışarıya port açma ihtiyacımız yok. O nedenle sadece dışarıdan erişime wordpress uygulamamızı açtık. Artık kuruluma hazırız.

son olarak en alt kısımda oluşturması gereken volume isimlerini belirtiyoruz eğer yoksa kendi oluştursun diye.

docker-compose up -d

Bu komutla compose dosyamız ayağı kalkarak uygulamamız kullanıma hazır duruma gelecektir.

$ docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                  NAMES
538a62b285ef        wordpress:latest                 "docker-entrypoint.s…"   28 seconds ago      Up 27 seconds       0.0.0.0:8100->80/tcp   docker_wordpress_1
1c87667a4bcd        mysql:5.7                        "docker-entrypoint.s…"   30 seconds ago      Up 28 seconds       3306/tcp, 33060/tcp    docker_db_1

uygulamamız ayakta ve çalışıyor. Bu şekilde örnek uygulamalar yaparak kendinizi geliştirebilirsiniz.

docker-compose down

Eğer uygulamamız durdurup tamamen kaldırmak istersek yukarıdaki komutla bu işlemi gerçekleştirebiliriz.

Keyifli Okumalar

Share: