Docker Compose
Docker Compose
Apa Itu Docker Compose
Docker Compose adalah sebuah tool untuk mendefinisikan dan
menjalankan multi-container Docker applications jadi Docker compose berfungsi
untuk menjalankan container docker secara bersamaan. 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: Docker
Compose
Mengapa Docker Compose
1.
Melakukan konfigurasi relationship antar
containers.
2.
Menyimpan docker container run setting pada satu
file yang mudah untuk dibaca dan dipahami.
3.
Memudahkan kita untuk menjalankan multi
applications dengan menggunakan satu command line.
4.
Sebagaimana yang kita ketahui bersama untuk
menjalankan docker container kita harus menggunakan docker CLI, misalkan:
A.
Menjalankan nginx dengan dengan bind mounting
volume
docker container run -d
--name nginx2 -p 80:80 -v /mnt/e/docker/nginx-web-app:/usr/share/nginx/html
nginx-web-app
B.
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
menjalan satu command line sederhana: docker-compose up
6.
Memudahkan kita untuk menjalankan multi
containers.
Bagaimana Menggunakan Docker Compose
Pertama kita perlu mendefinisikan dan build application
image dengan menggunakan Dockerfile atau pull image dari Docker Hub. Lalu setelah
itu definisikan semua application images (services) pada satu YAML file, secara
default nama file nya adalah docker-compose.yml. dan terakhir Jalankan semua
applications dengan menggunakan docker-compose up atau docker-compose up -d
untuk menjalankan di belakang layar.
Detail Mengenai docker-compose.yml File
1.
Ketika bisa menjalankan banyak docker container
dalam satu YAML file.
2.
Contoh YAML file
version: "3.7"
services:
...
volumes:
...
networks:
...
-
services untuk melakukan konfigurasi docker
container
-
volumes untuk mendefinisikan docker volume
-
networks untuk mendifiniskan docker network
Untuk Saat ini, kita akan lebih memfokuskan pemahaman kita
ke service terlebih dahulu
version: "3.7"
services:
service_name_1 :
image:
ports:
environment:
volumes:
command:
service_name_2 :
image:
ports:
environment:
volumes:
command:
volumes:
...
networks:
...
a.
version, versi dari docker compose YAML file,
gunakan versi yang paling latest atau yang sesuai dengan current project.
b.
service_name_1, nama service atau aplikasi yang
deskriptive, pada docker network akan menjadi DNS name
c.
image, merupakan Image (lengkap dengan veri dan
tag) dari aplikasi yang akan dijalankan
d.
ports, sama seperti opsi -p ketika kita
menjalankan docker container
e.
command, digunakan untuk replace CMD command
yang didefiniskan di docker image (Dockerfile)
f.
environment, Optional sama dengan opsi -e ketika
kita menjalankan docker container
g.
volumes, Optional sama dengan opsi -v ketika
kita menjalankan docker container
Untuk lebih detail mengenai versi dan referensi YAML file,
bisa mengunjungi halaman ini: Compose File.
Contoh docker-compose.yml File
docker-compose.yml harus berada pada folder yang sama ketika
menjalankan docker-compose command. Secara default docker-compose command
membutuhkan docker-compose.yml untuk menjalankannya. Kita bisa membuat file
yang berbeda misalkan docker-compose-app.yml, kemudian untuk menjalankanya kita
menggunakan opsi -f:
docker-compose up -f docker-compose-app.yml
Docker Compose Nginx
Dibawah ini adalah docker CLI untuk menjalankan nginx
docker container run -d --name nginx2 -p 80:80 -v
/mnt/e/docker/nginx-web-app:/usr/share/nginx/html nginx-web-app
Docker compose YAML file, dengan nama
docker-compose-nginx.yml.
version: "3.7"
services:
nginx-web-app :
image: nginx:latest
ports:
- 80:80
volumes:
- /mnt/e/docker/nginx-web-app:/usr/share/nginx/html
Untuk run dan stop a. Run:
docker-compose -f
docker-compose-nginx.yml up
Untuk Stop proses : Ctrl + c
Untuk run dan stop di background
jalankan :
docker-compose
-f docker-compose-nginx.yml up -d
Untuk Stop:
docker-compose
-f docker-compose-nginx.yml down -v
Untuk melihat docker container
yang running
docker ps
Docker Compose Mysql
Dibawah ini adalah docker CLI untuk menjalankan mysql
docker
container run -d --name mysql-db -e MYSQL_ALLOW_EMPTY_PASSWORD=True –v /mnt/e/docker/database/mysql:/var/lib/mysql mysql
Docker compose YAML file, dengan
nama dc_mysql.yml
version: "3.7"
services:
mysql:
image: mysql:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "True"
volumes:
- /mysql/db/:/var/lib/mysql
ports:
- '3306:3306'
Untuk run dan stop a. Run:
docker-compose
-f dc_mysql.yml up
Stop: Ctrl + c , Untuk run dan
stop di background jalankan:
docker-compose -f dc_mysql.yml up -d
dan untuk menghentikan docker-compose
-f docker-compose-mysql.yml down –v
Untuk melihat docker container
yang running docker ps
Docker Compose Nginx dan Mysql
Dibawah ini adalah docker CLI
untuk menjalankan nginx dan mysql
Nginx
docker container run -d --name nginx2 -p 80:80 -v
/mnt/e/docker/nginx-web-app:/usr/share/nginx/html nginx-web-app
Mysql
docker
container run -d --name mysql-db -e MYSQL_ALLOW_EMPTY_PASSWORD=True –v /mnt/e/docker/database/mysql:/var/lib/mysql mysql
lalu buat docker compose YAML
file, dengan nama docker-compose.yml Untuk run dan stop di background
version: "3.7"
services:
mysql:
image: mysql:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "True"
volumes:
- /mysql/db/:/var/lib/mysql
ports:
- '3306:3306'
nginx-web-app :
image: nginx:latest
ports:
- 80:80
volumes:
- /mnt/e/docker/nginx-web-app:/usr/share/nginx/html
Untuk menjalankannya cukup dengan
perintah :
docker-compose up -d
Karena nama file nya
docker-compose.yml, jadi kita tidak perlu menambahkan opsi -f ketika menjalankan
dock-compose command. Untuk melihat docker container yang running
docker ps
Untuk menghentikannya dengan
perintah
docker-compose down -v
Docker Compose – Wordpress
1.
Buat folder mywordpress
2.
Buat file docker-compose.yml di dalam folder
mywordpress
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: password
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
3.
Jalankan perintah
docker-compose up -d
lakukan pengecekan terkait container yang sedang berjalan
menggunakan
Docker ps
Buka localhost:8000 pada browser untuk melakukan setup pada
wordpress
Setelah selesai kamu bisa
mengakses website wordpress yang telah dibuat cukup dengan akses melalui
browser pada alamat 127.0.0.1:8000
Perintah docker-compose down menghapus wadah dan jaringan
default, tetapi mempertahankan database WordPress Anda.