Multiple Container Menggunakan Docker Compose


Apa Itu Docker Compose

  1. Docker Compose adalah sebuah tool untuk mendefinisikan dan menjalankan multi-container Docker applications.
  2. Dengan menggunakan compose, kita cukup menggunakan satu YAML file untuk melakukan konfigurasi multi-container Docker applications.
  3. Kemudian dengan menggunakan single command line, kita bisa membuat dan menjalankan semua services yang sudah kita definisikan di YAML file.
  4. Docker compose bisa dijalankan di semua environment: production, staging, testing, development.
  5. Source: https://docs.docker.com/compose/.

Mengapa Docker Compose

  1. Melakukan konfigurasi relationship antar containers.
  2. Menyimpan docker container run setting pada satu fileyang mudah untuk dibaca dandipahami.
  3. Memudahkan kita untuk menjalankan multi applicationsdengan menggunakan satucommand line.
  4. Sebagaimana yang kita ketahui bersama untuk menjalankandocker container kita harusmenggunakan docker CLI, misalkan:
    1. Menjalankan nginx dengan dengan bind mounting volumedocker container run -d –name nginx -p 80:80 -v /home/gantira/Public/nginx-web-app:/usr/share/nginx/html nginx
    2. Menjalankan MYSQL container dengan custom volume docker container run -d –name mysql-db -e MYSQL_ALLOW_EMPTY_PASSWORD=True -v mysql-db:/var/lib/mysql mysql
  5. Dengan menggunakan docker compose, kita cukup menjalansatu command line sederhana:
    docker-compose up
  6. Memudahkan kita untuk menjalankan multi containers.

Bagaimana Menggunakan Docker Compose

  1. Definisikan dan build application image dengan menggunakan Dockerfile atau pull image dari Docker Hub.
  2. Definisikan semua application images (services) pada satu YAML file, secara default nama file nya adalah docker-compose.yml
  3. Jalankan semua applications dengan menggunakan docker-compose up atau docker-compose up -d untuk menjalankan di belakangl ayar.

Detail Mengenai docker-compose.yml File

  1. Ketika bisa menjalankan banyak docker container dalam satu YAML file.
  2. Contoh YAML file
  1. services adalah blok untuk melakukan konfigurasi docker container
  2. volumes adalah blok untuk mendefinisikan docker volume
  3. networks adalah blok untuk mendifiniskan docker network
  4. Saat ini, kita akan lebih memfokuskan pemahaman kitake service terlebih dahulu
  1. Penjelasan gambar diatas
    1. version
      versi dari docker compose YAML file, gunakan versi yang paling latest atau yang sesuai dengan current project.
    2. service_name_1
      nama service atau aplikasi yang deskriptive, pada docker network akan menjadi DNS name
    3. image
      Image (lengkap dengan versi dan tag) dari aplikasi yang akan dijalankan
    4. ports
      sama dengan opsi -p ketika kita menjalankan docker container
    5. command
      Optional, replace CMD command yang didefiniskan didocker image (Dockerfile)
    6. environment
      Optional sama dengan opsi -e ketika kita menjalankan docker container
    7. volumes
      Optional sama dengan opsi -v ketika kita menjalankan docker container

Membuat docker-compose.yml

Agar bisa menjalankan docker compose, kita perlu membuat file dengan nama docker-compose.yml di root direktori laravel-app yang telah dibuat pada tulisan sebelumnya, kemudian setelah membuat filenya ketik kode dibawah ini :

version: "3.1"

services: 
    mysql-db:
        image: mysql:latest
        container_name: mysql-db
        volumes: 
            - /home/gantira/Public/mysql-db/dblara:/var/lib/mysql
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: ""
            MYSQL_DATABASE: db_wordpress
            MYSQL_USER: "root"
            MYSQL_PASSWORD: ""
        
    laravel-app:
        depends_on: 
            - mysql-db
        image: laravel-app
        container_name: laravel-app
        volumes: 
            - /home/gantira/Public/laravel-app:/app
        ports: 
            - "8181:8181"

pada volumes mysql-db buat folder dblara di Public/mysql-db dan pastikan folder kosong

Menjalankan Docker Compose

Untuk menjalankan docker compose ketikan command pada terminal seperti dibawah ini

docker-compose up

jika nama docker custom tuliskan seperti ini

docker-compose -f namafile.yml up

jika ingin menjalankan di background tambahkan -d setelah command

jika berhasil maka akan muncul seperti gambar dibawah ini

Untuk melihat docker container yang berjalan ketik docker ps, maka hasilnya akan seperti ini :

Cek konektifitas mysql

Sekarang kita cek konektifitas mysql dengan command pada root

docker-compose exec mysql-db mysql -u gantira -p LaravelDocker

Jika berhasil akan seperti pada gambar dibawah ini

WordPress app with Mysql Docker Compose

Buat folder baru dengan nama wordpress-app dan /mysql-db/dbwp, setelah itu buat file docker-compose.yml pada folder wordpress-app, dan ketikan code dibawah

version: "3.1"

services: 
    mysql-db-wp:
        image: mysql:latest
        container_name: mysql-db-wp
        volumes: 
            - /home/gantira/Public/mysql-db/dbwp:/var/lib/mysql
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: ""
            MYSQL_DATABASE: db_wordpress
            MYSQL_USER: "root"
            MYSQL_PASSWORD: ""
        
    phpmyadmin:
        depends_on: 
            - mysql-db-wp
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports: 
            - '8000:80'
        environment: 
            PMA_HOST: mysql-db-wp
            MYSQL_ROOT_PASSWORD: rootgan
            
    wordpress-app:
        depends_on: 
            - mysql-db-wp
        image: wordpress
        container_name: wordpress-app
        volumes: 
            - /home/gantira/Public/wordpress-app:/var/www/html
        ports: 
            - "8080:80"
        restart: always
        environment: 


selanjutnya atur koneksi laravel ke database mysql di file .env            WORDPRESS_DB_HOST: mysql-db-wp:3306 WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: WORDPRESS_DB_NAME: db_wordpress

setelah semua selesai, sekarang saatnya melakukan build terhadap service-service yang telah kita buat sebelumnya, buka terminal command line kemudian masuk ke directory laravel-docker dan jalankan perintah berikut docker-compose up -d --build tunggu hinga proses selesai, kemudian coba akses aplikasinya di browser dengan alamat localhost:8000. 

Komentar

Postingan populer dari blog ini

KONSEP, KELEBIHAN, KEKURANGAN CONTAINERIZATION BERSERTA TEKNOLOGI DAN STUDI KASUS CONTAINERIZATION

Mengapa Harus Belajar Cloud Computing ?

Setting Up VM and Domain