Tutorial Docker — #10 Docker Compose
Seri Belajar Docker dalam Bahasa Indonesia
Halo, bagi kalian yang belum paham mengenai Docker bisa membaca artikel sebelumnya:
Overview
Pada sistem docker ada banyak sekali komponen yang mendukungnya disebut sebagai Docker Ecosystem.
Dari sekian banyak komponen dalam Docker ecosystem, terdapat tool yang bernama Docker Compose.
Docker compose adalah tool yang digunakan untuk membangun aplikasi yang kompleks.
Cara kerjanya cukup simple. Kita membutuhkan berbagai Dockerfile seperti front-end, back-end, database, dll untuk banyak container.
Semakin banyak Dockerfile, kita semakin bingung jika ngga ada cara untuk manajemennya.
Dengan Docker compose, kita bisa menjadikan berbagai macam Dockerfile menjadi satu file saja.
Kalau satu file saja, eksekusi command pun akan berpengaruh terhadap seluruh file tersebut.
Nah, ini menunjukkan satu file yang powerful akan digunakan untuk container block, network block, front-end block, back-end block, dll
Install
- Buka link ini. Ikuti langkah-langkah nya
- Download dari GitHub untuk Docker compose versi stable
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- Terapkan izinkan untuk eksekusi Docker compose command
$ sudo chmod +x /usr/local/bin/docker-compose
- Test Docker compose
$ docker-compose --version
docker-compose version 1.28.4, build 1110ad01
- (Opsional) install secara lengkap untuk Docker compose command bagian
bash
$ cd /etc/bash_completion.d/
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.28.4/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
Structure of Compose File
Kita akan implementasi ke static website menggunakan Wordpress dan MySQL
- Masuk ke direktori CC_Docker yang sudah pernah dibuat sebelumnya
$ cd /CC_Docker
$ pwd
/CC_Docker
- Masuk ke S6
$ cd S6
- Buat file dengan nama
docker-compose.yaml
dan copy paste codingan dibawah ini
$ touch docker-compose.yaml
version: '3.8'
services:
db:
image: mysql:5.7
container_name: mysql_database
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: word@press
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: abc@123wordpress:
depends_on:
- db
image: wordpress:latest
container_name: wd_frontend
volumes:
- wordpress_files:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: abc@123
volumes:
wordpress_files:
db_data:
Running Wordpress & MySQL
- Masuk ke folder S6 seperti pada direktori sebelumnya
$ cd /CC_Docker/S6$ pwd
/CC_Docker/S6$ ls
docker-compose.yaml
- Eksekusi file
docker-compose.yaml
, selanjutnya docker akan membentuk Docker network, Docker volume, dan pulling images yang dibutuhkan
$ docker-compose up -d
- Cek container list
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8a5a59e87c9 wordpress:latest "docker-entrypoint.s…" 49 seconds ago Up 48 seconds 0.0.0.0:8000->80/tcp wd_frontend
bff160277de4 mysql:5.7 "docker-entrypoint.s…" 52 seconds ago Up 49 seconds 3306/tcp, 33060/tcp mysql_database
Wordpress
- Buka browser, ketik
localhost:8000
karena kita memasukkan custom port padadocker-compose.yaml
- Pilih bahasa
- Masukkan informasi (dummy pun boleh), pilih install wordpress
- Sukses
- Login ke halaman admin wordpress
- Admin page
- Setting sedikit halamannya sesuai selera kalian
- Jika dilihat dari sisi pengunjung
MySQL
- Setup database
$ docker exec -it mysql_database bash
- Masuk ke
/var/lib/mysql
$ cd /var/lib/mysql
$ ls
auto.cnf client-cert.pem ib_logfile0 ibtmp1 private_key.pem server-key.pem
ca-key.pem client-key.pem ib_logfile1 mysql public_key.pem sys
ca.pem ib_buffer_pool ibdata1 performance_schema server-cert.pem wordpress
- Pull image mysql
$ docker pull mysql:5.7
- Gunakan Docker network bridge pada container mysql_database
$ docker network connect bridge mysql_database
- Menjalankan container khusus untuk database dengan eksekusi command didalamnya
$ docker run -it --link mysql_database:mysql mysql:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
- Cek database wordpress pada mysql
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
5 rows in set (0.00 sec)
- Gunakan database wordpress
mysql> USE wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
- Cek table dari database wordpress
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_wordpress |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0.00 sec)
Docker Compose CLI
- Masuk ke folder S6 seperti pada direktori sebelumnya
$ cd /CC_Docker/S6$ pwd
/CC_Docker/S6$ ls
docker-compose.yaml
- Cek informasi dari
docker-compose.yaml
$ docker-compose config
- Cek informasi secara detail mengenai service
$ docker-compose config --services
- Cek image yang digunakan oleh container compose
$ docker-compose images
- Cek container yang digunakan oleh Docker compose
$ docker-compose ps
- Debugging
$ docker-compose logsatau $ docker-compose logs --tail=10
Catatan:
--tail=10
(mempersingkat logs menjadi 10 baris setiap images)
- Cek service dari container
mysql_database
$ docker-compose top
- Stop service dari container
mysql_database
$ docker-compose down
Have a nice day!
Ghifari Nur Athoillah, Mahasiswa di Program Profesi CCIT-Fakultas Teknik Universitas Indonesia