Multiple Container Menggunakan Docker Compose
Apa Itu Docker Compose
- Docker Compose adalah sebuah tool untuk mendefinisikan dan menjalankan multi-container Docker applications.
- Dengan menggunakan compose, kita cukup menggunakan satu YAML file untuk melakukan konfigurasi multi-container Docker applications.
- Kemudian dengan menggunakan single command line, kita bisa membuat dan menjalankan semua services yang sudah kita definisikan di YAML file.
- Docker compose bisa dijalankan di semua environment: production, staging, testing, development.
- Source: https://docs.docker.com/compose/.
Mengapa Docker Compose
- Melakukan konfigurasi relationship antar containers.
- Menyimpan docker container run setting pada satu fileyang mudah untuk dibaca dandipahami.
- Memudahkan kita untuk menjalankan multi applicationsdengan menggunakan satucommand line.
- Sebagaimana yang kita ketahui bersama untuk menjalankandocker container kita harusmenggunakan docker CLI, misalkan:
- 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
- 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
- Dengan menggunakan docker compose, kita cukup menjalansatu command line sederhana:
docker-compose up - Memudahkan kita untuk menjalankan multi containers.
Bagaimana Menggunakan Docker Compose
- Definisikan dan build application image dengan menggunakan Dockerfile atau pull image dari Docker Hub.
- Definisikan semua application images (services) pada satu YAML file, secara default nama file nya adalah docker-compose.yml
- Jalankan semua applications dengan menggunakan docker-compose up atau docker-compose up -d untuk menjalankan di belakangl ayar.
Detail Mengenai docker-compose.yml File
- Ketika bisa menjalankan banyak docker container dalam satu YAML file.
- Contoh YAML file

- services adalah blok untuk melakukan konfigurasi docker container
- volumes adalah blok untuk mendefinisikan docker volume
- networks adalah blok untuk mendifiniskan docker network
- Saat ini, kita akan lebih memfokuskan pemahaman kitake service terlebih dahulu

- Penjelasan gambar diatas
- version
versi dari docker compose YAML file, gunakan versi yang paling latest atau yang sesuai dengan current project. - service_name_1
nama service atau aplikasi yang deskriptive, pada docker network akan menjadi DNS name - image
Image (lengkap dengan versi dan tag) dari aplikasi yang akan dijalankan - ports
sama dengan opsi -p ketika kita menjalankan docker container - command
Optional, replace CMD command yang didefiniskan didocker image (Dockerfile) - environment
Optional sama dengan opsi -e ketika kita menjalankan docker container - 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
Posting Komentar