Docker sudah jadi standar industri untuk deploy aplikasi. Kalau kamu developer dan belum familiar dengan Docker, ini guide untuk kamu.
Apa Itu Docker?
Docker adalah platform containerization yang memungkinkan kamu menjalankan aplikasi dalam environment yang terisolasi disebut "container".
Bayangkan container seperti kardus pengiriman. Kamu masukkan semua yang dibutuhkan aplikasi — kode, dependencies, config — ke dalam satu kardus. Kardus itu bisa dikirim dan dijalankan di machine manapun tanpa masalah khawatir "di komputer saya jalan, di server tidak".
Sebelum Docker, masalah sering muncul: "Works on my machine." Aplikasi jalan di laptop developer tapi tidak jalan di server karena perbedaan OS, library, atau versi Node.
Docker menyelesaikan masalah ini dengan prinsip "build once, run anywhere."
Container vs Virtual Machine
Orang sering bingung Docker container dengan Virtual Machine (VM). Ini bedanya:
Virtual Machine — membawa entire OS di dalam dirinya. Berat, lambat start-up, mengonsumsi banyak RAM.
Container — berbagi OS host, hanya isolation di level aplikasi. Ringan, cepat start-up, hemat resource.
Docker container bisa beroperasi dalam hitungan detik, sementara VM butuh menit untuk boot.
Image dan Container
Dua konsep utama di Docker:
Image — template hanya-baca yang berisi semua yang kamu butuhkan untuk menjalankan aplikasi. Like a recipe.
Container — instance yang dijalankan dari image. Like a dish yang kamu masak dari recipe.
Satu image bisa menjalankan banyak container sekaligus.
Basic Docker Commands
Berikut commands Docker yang paling sering digunakan:
1. Cek Version
1docker --versionMengecek apakah Docker sudah terinstall dan melihat versi.
2. Download Image
1docker pull nginx:latestMendownload image "nginx" dengan tag "latest" dari Docker Hub. Tag "latest" adalah default, jadi bisa juga simplemente docker pull nginx.
3. Lihat Semua Image
1docker imagesatau
1docker image lsMenampilkan daftar semua image yang sudah terdownload di local mesin.
4. Jalankan Container
1docker run nginxMenjalankan container dari image "nginx". Docker akan otomatis pull image jika belum ada.
Dengan port forwarding:
1docker run -p 8080:80 nginxArtinya: port 8080 di host maps ke port 80 di container. Buka browser ke http://localhost:8080 untuk melihat nginx.
Dengan nama kustom:
1docker run -p 8080:80 --name web-server nginxDengan detached mode (background process):
1docker run -d -p 8080:80 --name web-server nginx5. Lihat Running Containers
1docker psMenampilkan container yang sedang berjalan.
Untuk melihat semua container (termasuk yang berhenti):
1docker ps -a6. Stop dan Start Container
1docker stop web-server
2docker start web-serverstop — menghentikan container dengan grace (SIGTERM).
start — menjalankan kembali container yang sudah berhenti.
7. Hapus Container
1docker rm web-serverMenghapus container. Container harus dalam status stopped terlebih dahulu.
Untuk force delete (jika container sedang berjalan):
1docker rm -f web-server8. Lihat Logs
1docker logs web-serverMelihat stdout/stderr dari container. Berguna untuk debugging.
Untuk mengikuti log secara real-time:
1docker logs -f web-server9. Execute Command di Dalam Container
1docker exec -it web-server bashMembuka interactive bash shell di dalam container. Kamu bisa eksplorasi filesystem dan config container.
Contoh lain:
1docker exec -it web-server ls /usr/share/nginx/html10. Build Docker Image
1docker build -t my-app .Membuat image dari Dockerfile. Flag -t untuk memberikan nama dan tag.
Contoh dengan tag specific:
1docker build -t my-app:1.0 .11. Hapus Image
1docker rmi nginxMenghapus image dari local mesin.
Hapus semua unused images:
1docker image prune12. Docker Compose
Untuk aplikasi yang butuh beberapa container (misalnya: app + database + redis), gunakan Docker Compose.
Contoh docker-compose.yml:
1version: '3.8'
2services:
3 app:
4 build: .
5 ports:
6 - "3000:3000"
7 depends_on:
8 - db
9 db:
10 image: postgres:15
11 environment:
12 POSTGRES_PASSWORD: secretJalankan dengan:
1docker-compose upUntuk background:
1docker-compose up -dStop:
1docker-compose downContoh Dockerfile Sederhana
Dockerfile adalah template untuk build Docker image:
1# Gunakan base image Node.js
2FROM node:18-alpine
3
4# Set working directory
5WORKDIR /app
6
7# Copy package files
8COPY package*.json ./
9
10# Install dependencies
11RUN npm install
12
13# Copy source code
14COPY . .
15
16# Expose port
17EXPOSE 3000
18
19# Start command
20CMD ["node", "index.js"]Penjelasan baris per baris:
FROM— base image yang digunakanWORKDIR— direktori di dalam containerCOPY— menyalin file dari host ke containerRUN— menjalankan command saat buildEXPOSE— deklarasi port yang digunakanCMD— command yang dijalankan saat container beroperasi
Kenapa Docker Penting untuk Developer?
1. Konsistensi
Environment development, staging, dan production bisa identical. Tidak ada lagi "works on my machine".
2. Isolation
Setiap aplikasi berjalan di environment terisolasi. Tidak ada konflik antara library atau dependencies.
3. Portabilitas
Container bisa jalan di laptop, server, cloud — anywhere yang ada Docker.
4. Efisiensi Resource
Container lebih ringan dari VM. Satu server bisa menjalankan puluhan container sekaligus.
5. CI/CD Friendly
Dockerfile bisa di-commit ke Git, di-build otomatis, dan di-deploy sebagai container.
Contoh Use Case
Development Environment Kamu mau coba aplikasi Rails tapi tidak mau menginstall Ruby, Rails, PostgreSQL secara langsung. Cukup:
1docker run -p 3000:3000 my-rails-appMicroservices Membangun system yang terdiri dari Node.js API, Python ML service, dan Go worker. Each berjalan di container terpisah, berkomunikasi via internal network.
CI/CD Pipeline Setiap pull request di-build menjadi Docker image, ditest dalam container, lalu di-deploy ke production sebagai container.
Summary
Docker adalah tool yang memungkinkan kamu mengemas aplikasi dengan semua dependencies-nya ke dalam container yang bisa dijalankan di anywhere.
Key commands:
docker run— menjalankan containerdocker ps— melihat running containersdocker images— melihat downloaded imagesdocker build— membangun image dari Dockerfiledocker-compose up— menjalankan multi-container app
