DevOps

Docker Run vs Docker Compose | Example App Deployment With Docker-Compose

Merhaba

Bu makalede Docker Compose’dan bahsedeceğim ve bir den çok uygulamayı tek bir docker-compose.yml ile ayağa kaldıracağız.

Docker-run vs. Docker Compose -Bir önce ki yazımızda docker-run komutları ile command line üzerinden 2 adet uygulamayı containerized etmiştik. Aslında docker run ile docker-compose arasında ki en büyük fark birinin command line üzerinden komut alması, diğerinin bir YAML formatında ki configuration okuması.

Aşağıdaki linkten tekrar göz atabilirsiniz.
Basic Containerized Docker Applications

-Diğer büyük farklardan biri ise docker-run komutu ile aynı anda sadece 1 container başlatılabilir. Fakat docker-compose’da ise bir çok konfigurasyonla birden fazla container çalıştırılabilir.
-Docker-run ile command line üzerinde maximum 75 karakter kullanabilirsiniz.
-Docker-compose ile containerlara dependencies atamaları yapabilirsiniz.
-Docker-compose’da yaptığınız kod değişiklikleri git veya GitHub üzerinde kontrol edebilirsiniz.

Docker Run Example (Multiple Containers)

docker run -d --rm --name=my-website-01 --cpus=1.5 --memory=2048m -p 80:80 -v $PWD/website:/usr/share/nginx/html/ nginx:latest
docker run -d --rm --name=my-website-02 --cpus=1.5 --memory=2048m -p 88:80 httpd:latest
docker run -d --rm --name=my-java-app-1 --cpus=2.5 --memory=4096m -p 8099:8080 tomcat:latest

Docker Compose Example;

docker-compose.yaml

version: '3.9'
services:
  nginx-service:
    container_name: my-website-01
    image: nginx:latest
    cpus: 1.5
    mem_limit: 2048m
    ports:
      - "80:80"
    volumes:
      $PWD/website:/usr/share/nginx/html
  apache-service:
    container_name: my-website-02
    image: http:latest
    cpus: 1.5
    mem_limit: 2048m
    ports:
      - "88:80"
  tomcat-service:
    container_name: my-java-app-1
    image: tomcat:latest
    cpus: 2.5
    mem_limit: 4096m
    ports:
      - "8099:80"

Containerları ayağa kaldırmak için aşağıdaki komutu kullanıyoruz;

docker-compose up -d –rm

Docker Compose ile Container Üzerinde Uygulama Çalıştırma

Öncelikle vagrant kullanabilmeniz için sisteminizde vagrant destekleyen bir hypervisor kurulu olması gerekiyor. Ben Oracle VM VirtualBox kullanıyorum. Detay için bu > linkten bakabilirsiniz.

Kullanmış olduğum Vagrantfile link olarak ekliyorum.

Vagrantfile’ın olduğu dizine gelerek vagrant up komutunu çalıştırıyorum ve ubuntu makinem + docker engine kurulmaya başlıyor.

Kurulum tamamlandığında vagrant ssh komutu ve sudo -i ile makineme bağlanıyorum.

Docker’ın kurulduğuna dair systemctl status docker komut ile kontrol ettiğimde başarılı bir şekilde kurulmuş olduğunu ve servisin ayakta olduğunu görüyoruz.

Sağlıklı bir şekilde çalışan bir ubuntu üzerinde docker kurduktan sonra uygulamalarımıza devam edebiliriz.

-Multiple container kurulumu yapacağız Nginx – tomcat-memcache-rabbitmq
-Compose isimli bir directory oluşturup içine giriyoruz.
mkdir compose
cd compose
/

-wget ile yaml dosyasını bu dizine download ediyoruz.

wget https://raw.githubusercontent.com/devopshydclub/vprofile-project/vp-docker/compose/docker-compose.yml
ls

-Aşağıdaki komut ile YAML dosyasının içini okuyoruz. Services başlığının altında toplamda 5 adet container mevcut ve bu containerların içinde yer alacak image’ler mevcut.
vim docker-compose.yml

-Yaml dosyasını kontrol ettikten sonra docker-compose up -d komutu ile tüm containerları arka planda çalışacak şekilde ayağa kaldırıyoruz.

Image’lar başarılı bir şekilde download edildi ve containerlar up duruma geldi.
docker ps

-Tarayıcı üzerinden containerların çalıştığı server ip:80 port numarasını yazarak uygulamamıza erişiyoruz.

Username: admin_vp
Pass: admin_vp
Login olduktan sonra sağ köşeden All Users seçerek DB’den mevcut kullanıcıları çekebilir ve yine sağ köşeden RabbiyMQ servisini çağırarak containerın çalışabilirliliğini kontrol edebilirsiniz.

RabbitMQ servisi ayakta.

Uygulamalarımız entegre bir şekilde containerized olarak çalışmış durumda.

Nginx (Load balancer servicing

Apache Tomcat (Java Web Application Service)

Rabbit MQ

Memcached (Database Caching Servers) Mysql