“Jadi, aplikasi web dan database bisa dijalanin sekaligus dalam satu perintah? Ayo, Docker, jangan bercanda!” – Orang yang baru tahu Docker Compose!
Siapa yang bilang aplikasi web dan database harus jalan sendiri-sendiri? Dengan Docker, kamu bisa membuat aplikasi multi-container yang terdiri dari beberapa bagian (misalnya, web server dan database) yang saling berhubungan, cukup dengan satu file dan satu perintah.
Kali ini, kita akan belajar cara membuat aplikasi multi-container menggunakan Docker, dengan contoh aplikasi Node.js yang terhubung ke MySQL. Jadi, siap-siap untuk menghidupkan aplikasi web dan database secara bersamaan!
1. Apa Itu Aplikasi Multi-Container?
Aplikasi multi-container adalah aplikasi yang melibatkan lebih dari satu container untuk berjalan. Dalam konteks Docker, kamu bisa membagi aplikasi kamu menjadi beberapa layanan (seperti web, database, cache, dll.), yang masing-masing berjalan di container terpisah.
Contoh Sederhana:
- Web server yang menjalankan aplikasi Node.js.
- Database yang menyimpan data aplikasi seperti MySQL atau PostgreSQL.
- Cache seperti Redis (kalau perlu).
Docker memungkinkan kita untuk menyusun aplikasi multi-container ini dalam file konfigurasi yang disebut docker-compose.yml
. Dengan file ini, kita bisa mengatur semua container dalam satu tempat, tanpa harus menjalankan satu per satu.
2. Kenapa Docker Sangat Berguna untuk Aplikasi Multi-Container?
Docker memungkinkan pengelolaan beberapa container dalam satu file. Jadi, daripada harus mengkonfigurasi dan menjalankan masing-masing container secara manual (yang bisa jadi sangat repot), kamu cukup mendefinisikan semuanya dalam satu file dan menjalankannya dengan satu perintah. Praktis dan efisien!
Dengan Docker, kamu bisa:
- Mengatur jaringan antar container agar bisa berkomunikasi.
- Membuat volume agar data aplikasi tetap aman meskipun container dihentikan atau dihapus.
- Menjamin konsistensi lingkungan aplikasi, baik itu di development, testing, atau production.
- Scaling aplikasi jika dibutuhkan.
3. Langkah-Langkah Membuat Aplikasi Web dengan Database Menggunakan Docker
Langkah 1: Siapkan Aplikasi Node.js
Kita akan membuat aplikasi web sederhana menggunakan Node.js dan menghubungkannya ke MySQL. Buat folder untuk aplikasi kamu, misalnya myapp
, dan di dalamnya buat file berikut:
app.js
(Aplikasi Web)
const express = require('express');
const mysql = require('mysql');
const app = express();
const port = 3000;
const db = mysql.createConnection({
host: 'db',
user: 'root',
password: 'secret',
database: 'mydb'
});
db.connect((err) => {
if (err) throw err;
console.log('Connected to database!');
});
app.get('/', (req, res) => {
res.send('Hello, Docker World!');
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
package.json
(Dependency)
Buat file package.json
untuk mendefinisikan dependency aplikasi, seperti express
dan mysql
:
{
"name": "myapp",
"version": "1.0.0",
"description": "A simple app with Node.js and MySQL",
"main": "app.js",
"dependencies": {
"express": "^4.17.1",
"mysql": "^2.18.1"
},
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC"
}
Langkah 2: Siapkan Dockerfile untuk Aplikasi Web
Agar aplikasi Node.js kamu bisa dijalankan dalam container, kita membutuhkan Dockerfile. Buat file Dockerfile
di dalam folder yang sama dengan isi berikut:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Penjelasan:
FROM node:14
: Menggunakan image resmi Node.js versi 14.WORKDIR /app
: Menentukan direktori kerja di dalam container.COPY . .
: Menyalin seluruh file aplikasi ke dalam container.EXPOSE 3000
: Meng-expose port 3000 agar aplikasi bisa diakses dari luar container.CMD ["npm", "start"]
: Perintah untuk menjalankan aplikasi menggunakannpm start
.
Langkah 3: Buat file docker-compose.yml
Sekarang, kita akan membuat file docker-compose.yml
untuk mendefinisikan dua layanan: web (aplikasi Node.js) dan db (MySQL). Buat file docker-compose.yml
di folder yang sama:
version: '3'
services:
web:
build: .
container_name: web-container
ports:
- "3000:3000"
depends_on:
- db
networks:
- app-network
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
volumes:
- db-data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
db-data:
Penjelasan:
web
: Mendefinisikan aplikasi web yang dibangun dari Dockerfile yang sudah kita buat.build: .
: Menyatakan bahwa Docker harus membangun image dari Dockerfile di direktori yang sama.depends_on
: Menjamin bahwa servicedb
(MySQL) dijalankan sebelumweb
.
db
: Mendefinisikan database menggunakan image MySQL.environment
: Mengatur password root dan database yang akan dibuat.volumes
: Menyimpan data database secara persisten.
networks
: Menyambungkan kedua container dalam satu jaringan bernamaapp-network
agar bisa saling berkomunikasi.
4. Menjalankan Aplikasi Multi-Container dengan Docker Compose
Setelah semua siap, kita tinggal menjalankan aplikasi kita dengan perintah berikut:
docker-compose up --build
--build
: Digunakan untuk membangun image dari Dockerfile.- Docker Compose akan mengunduh image yang diperlukan, membangun image untuk aplikasi web, dan menjalankan container-container yang diperlukan.
Sekarang buka browser kamu dan akses:
http://localhost:3000
Kamu akan melihat pesan “Hello, Docker World!”.
5. Keuntungan Menggunakan Docker untuk Aplikasi Multi-Container
Kemudahan Pengelolaan:
Docker Compose memungkinkan kamu untuk mengelola aplikasi multi-container dengan mudah. Cukup dengan satu file docker-compose.yml
, kamu bisa mendefinisikan dan menjalankan semua layanan dalam aplikasi.
Isolasi yang Baik:
Setiap layanan (web, database, cache) berjalan dalam container yang terpisah, yang membuat aplikasi lebih mudah dikelola dan lebih aman.
Konsistensi di Berbagai Environment:
Aplikasi yang kamu jalankan di development, testing, dan production akan memiliki konfigurasi yang konsisten berkat Docker. Tak ada lagi masalah aplikasi yang berjalan beda-beda di setiap environment!
6. Kesimpulan: Docker Itu Bikin Hidup Jadi Mudah!
Docker membuat aplikasi multi-container jadi super mudah!
Dengan Docker Compose, kamu bisa mengatur aplikasi yang melibatkan banyak container (seperti web server dan database) dalam satu file dan menjalankannya dengan satu perintah.
Kamu bisa mengelola aplikasi multi-container dengan efisien, menjaga data tetap aman, dan membuat pengembangan aplikasi jadi lebih cepat dan mudah.
Siap jadi master Docker?
Coba buat aplikasi multi-container kamu sendiri dan lihat betapa mudahnya!
0 Comments