Membuat Web Server dengan Docker Compose
Pendahuluan
Web server modern biasanya dibangun dengan stack yang kompleks: aplikasi backend, database, cache, dan load balancer. Mengelola semua komponen ini secara manual memakan waktu dan rentan terhadap kesalahan. Docker Compose menyediakan cara deklaratif untuk mendefinisikan dan menjalankan multi‑container Docker, sehingga Anda dapat men-deploy web server lengkap hanya dengan satu perintah.
Prasyarat & Persiapan
| Item | Versi Minimum | Catatan |
|---|---|---|
| Docker Engine | 20.10+ | Instalasi resmi: https://docs.docker.com/engine/install/ |
| Docker Compose | 2.20+ | Dapat diinstal via docker compose (CLI plugin) |
| Git | 2.30+ | Untuk kloning repositori contoh |
| Editor teks | VS Code / Sublime | Opsional, namun disarankan |
| Akun Cloud | Opsional | Untuk deployment ke VPS (DigitalOcean, Linode, AWS) |
| Tools AI | - | Gunakan ChatGPT Plus (https://tools.jartekindo.com/tool/chatgpt-plus/) atau Claude Pro (https://tools.jartekindo.com/tool/claude-pro/) untuk membantu menulis skrip atau memecahkan masalah. |
Catatan: Pastikan Docker dapat dijalankan tanpa
sudodengan menambahkan user Anda ke grupdocker.
Langkah Demi Langkah
1. Buat Struktur Proyek
mkdir webserver-docker && cd webserver-docker
mkdir app
2. Tulis Aplikasi Sederhana
Buat file app/app.py (Python Flask) sebagai contoh:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker Compose!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
3. Buat requirements.txt
Flask==2.2.5
4. Buat Dockerfile
# Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
5. Buat docker-compose.yml
# docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "8080:5000"
environment:
- FLASK_ENV=development
volumes:
- .:/app
restart: unless-stopped
networks:
- webnet
networks:
webnet:
driver: bridge
6. Jalankan
docker compose up --build
Buka http://localhost:8080 → Anda akan melihat pesan “Hello, Docker Compose!”.
7. Deploy ke VPS (Opsional)
- Push image ke Docker Hub
bash docker tag webserver-docker:latest <username>/webserver-docker:latest docker push <username>/webserver-docker:latest - SSH ke VPS
bash ssh root@<ip-vps> - Install Docker & Compose
bash curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh sudo apt-get install docker-compose-plugin - Pull & Run
bash docker compose pull docker compose up -d
Tips Optimasi & Keamanan
| Praktik | Penjelasan |
|---|---|
| Gunakan User Non‑Root | Tambahkan RUN adduser --disabled-password appuser && chown -R appuser /app di Dockerfile dan jalankan USER appuser. |
| Jangan expose port publik | Jika hanya internal, gunakan expose alih‑alih ports. |
| Gunakan .env | Simpan variabel sensitif di file .env dan referensikan di docker-compose.yml. |
| Healthcheck | Tambahkan healthcheck di service web untuk memastikan container sehat. |
| Limit resource | Tetapkan mem_limit dan cpus untuk mencegah over‑consumption. |
| Network Isolation | Buat network custom (webnet) agar hanya container yang perlu saling berkomunikasi. |
| Update Image | Jadwalkan docker compose pull secara berkala dan rebuild. |
Tools AI: Gunakan Notion AI (https://tools.jartekindo.com/tool/notion-ai/) untuk menulis dokumentasi teknis atau Jasper (https://tools.jartekindo.com/tool/jasper-ai/) untuk membuat konten promosi.
Troubleshooting Error Umum
| Error | Penyebab | Solusi |
|---|---|---|
Cannot connect to the Docker daemon |
Docker tidak berjalan atau user tidak memiliki hak akses | Jalankan sudo systemctl start docker dan tambahkan user ke grup docker. |
port 8080 is already in use |
Port sudah dipakai oleh aplikasi lain | Gunakan port lain atau hentikan aplikasi yang memblokir. |
service web not found |
docker-compose.yml tidak terdeteksi atau typo |
Pastikan file berada di root proyek dan jalankan docker compose up. |
Connection refused |
Container belum boot atau healthcheck gagal | Periksa log dengan docker compose logs web. |
image not found |
Tag tidak ada di registry | Pastikan push ke registry berhasil dan gunakan tag yang tepat. |
Kesimpulan
Docker Compose memudahkan pembuatan, pengujian, dan deployment web server multi‑container dengan deklaratif. Dengan mengikuti panduan ini, Anda dapat men‑deploy aplikasi Flask (atau stack lain) secara konsisten di lingkungan lokal maupun cloud. Terapkan praktik keamanan dan optimasi yang disarankan untuk menjaga produksi tetap stabil dan aman. Selamat mencoba!