Docker adalah platform yang membantu developer membungkus aplikasi beserta semua kebutuhannya ke dalam satu paket bernama container, sehingga aplikasi bisa jalan dengan cara yang sama di mana pun. Kamu pasti pernah mengalami situasi ini: kodenya mulus di laptopmu, tapi begitu dikirim ke teman atau di-deploy ke server, tiba-tiba muncul error versi Node.js, library hilang, atau konfigurasi tidak cocok.
Di artikel ini kita bahas docker adalah apa, kenapa hampir semua tim developer memakainya, bagaimana cara kerjanya, sampai 8 perintah dasar yang bisa langsung kamu praktikkan. Santai saja, tidak perlu pengalaman DevOps sebelumnya.
[Sisipkan thumbnail di sini. Alt text: Docker adalah platform container untuk developer. Hapus baris ini setelah gambar dipasang.]
Docker Adalah: Pengertian Singkat
Secara sederhana, docker adalah tools open source untuk membuat, menjalankan, dan membagikan aplikasi di dalam container. Container adalah lingkungan terisolasi yang berisi kode aplikasi, runtime (misalnya Node.js atau Python), library, dan pengaturan yang dibutuhkan.
Bayangkan container seperti kotak bekal. Isinya lengkap: nasi, lauk, dan sendok. Mau dibawa ke kantor, kampus, atau taman, kamu tinggal buka dan makan tanpa perlu mencari piring lagi. Begitu juga aplikasi di dalam container: tinggal dijalankan, tanpa repot menyiapkan lingkungannya dari nol.
Kenapa Developer Butuh Docker?
Docker adalah jawaban untuk masalah klasik “di komputer saya jalan kok”. Berikut alasan utama kenapa developer memakainya:
- Lingkungan konsisten. Aplikasi berjalan sama di laptop, server tim, maupun production.
- Setup project jadi cepat. Anggota tim baru tidak perlu menginstal database dan tools satu per satu. Cukup jalankan beberapa perintah.
- Aplikasi terisolasi. Proyek A yang butuh Node.js 16 dan proyek B yang butuh Node.js 20 bisa berjalan berdampingan tanpa bentrok.
- Deploy lebih mudah. Satu paket yang sama dari tahap development sampai production.
- Ringan dibanding virtual machine. Container memakai kernel sistem operasi host, jadi startnya lebih cepat dan hemat sumber daya.
Cara Kerja Docker
Untuk memahami docker adalah apa dalam praktiknya, kamu perlu mengenal empat komponen utama berikut.
1. Dockerfile
Dockerfile adalah file teks berisi resep untuk membuat image. Di dalamnya kamu menulis langkah seperti memakai base image tertentu, menyalin kode, menginstal dependency, dan menentukan perintah untuk menjalankan aplikasi.
2. Image
Image adalah template read-only hasil build dari Dockerfile. Anggap saja image sebagai cetakan kue, sedangkan container adalah kuenya. Dari satu image, kamu bisa membuat banyak container.
3. Container
Container adalah instance dari image yang sedang berjalan. Kamu bisa menjalankan, menghentikan, dan menghapus container kapan saja tanpa merusak image aslinya.
4. Registry
Registry adalah tempat menyimpan dan membagikan image. Yang paling terkenal adalah Docker Hub. Saat kamu menjalankan docker pull nginx, Docker mengunduh image nginx dari registry tersebut.
Perbedaan Docker dan Virtual Machine
Sekilas keduanya mirip karena sama-sama mengisolasi aplikasi. Bedanya ada di cara kerjanya:
- Virtual machine menjalankan sistem operasi lengkap di atas hypervisor. Ukurannya besar dan butuh waktu lama untuk menyala.
- Docker hanya membungkus aplikasi dan dependency-nya, lalu berbagi kernel dengan sistem operasi host. Ukurannya kecil dan bisa menyala dalam hitungan detik.
Jadi, docker adalah pilihan yang lebih ringan untuk menjalankan banyak aplikasi sekaligus di satu mesin.
Cara Install Docker
Cara termudah bagi pemula adalah memasang Docker Desktop di Windows atau macOS. Unduh installer dari situs resmi, jalankan, lalu ikuti petunjuknya. Pengguna Linux bisa memasang Docker Engine lewat package manager distro masing-masing. Panduan lengkapnya ada di dokumentasi resmi Docker.
Setelah selesai, cek apakah instalasi berhasil:
docker --version
Jika muncul nomor versi, Docker sudah siap dipakai.
8 Perintah Dasar Docker untuk Pemula
Ini perintah yang paling sering kamu pakai sehari-hari.
docker pull nginxmengunduh image nginx dari Docker Hub.docker imagesmenampilkan daftar image yang ada di komputermu.docker run -d -p 8080:80 --name web nginxmembuat dan menjalankan container di background. Opsi-p 8080:80menghubungkan port 8080 di komputermu ke port 80 di dalam container, jadi kamu bisa membukalocalhost:8080di browser.docker psmenampilkan container yang sedang berjalan. Tambahkan-auntuk melihat semuanya, termasuk yang sudah berhenti.docker logs webmenampilkan log dari container bernama web. Sangat berguna saat mencari penyebab error.docker stop webmenghentikan container.docker rm webmenghapus container yang sudah berhenti. Untuk menghapus image, gunakandocker rmi nginx.docker build -t myapp .membuat image baru dari Dockerfile di folder saat ini dan memberinya nama myapp.
Contoh Dockerfile Sederhana untuk Aplikasi Node.js
Berikut contoh Dockerfile untuk aplikasi Node.js dengan file utama index.js:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Penjelasan singkatnya:
FROMmenentukan base image, yaitu Node.js 20 versi alpine yang ukurannya kecil.WORKDIRmenentukan folder kerja di dalam container.COPY package*.json ./laluRUN npm installmenginstal dependency lebih dulu agar hasil build bisa di-cache dan proses berikutnya lebih cepat.COPY . .menyalin seluruh kode ke container.EXPOSE 3000mencatat bahwa aplikasi memakai port 3000.CMDadalah perintah yang dijalankan saat container menyala.
Bangun image dan jalankan:
docker build -t myapp .
docker run -p 3000:3000 myapp
Untuk menyimpan konfigurasi seperti kunci API atau port, jangan tulis langsung di kode. Gunakan environment variable, misalnya lewat docker run -e PORT=3000 myapp. Cara pemakaiannya sudah kami bahas di Environment Variable: Cara Pakai .env di Node.js.
Docker Volume: Cara Menyimpan Data Agar Tidak Hilang
Salah satu hal yang sering mengejutkan pemula: saat container dihapus, semua data di dalamnya ikut hilang. Padahal untuk database, kamu jelas butuh data yang bertahan. Di sinilah docker adalah solusi yang menyediakan fitur volume, yaitu penyimpanan terpisah yang dikelola Docker dan tetap ada walaupun container dihapus.
Contoh menjalankan PostgreSQL dengan volume:
docker volume create dbdata
docker run -d --name db -e POSTGRES_PASSWORD=rahasia -v dbdata:/var/lib/postgresql/data postgres:16
Opsi -v dbdata:/var/lib/postgresql/data menghubungkan volume dbdata ke folder tempat PostgreSQL menyimpan datanya. Kamu bisa menghapus container db lalu membuatnya lagi, dan datanya tetap utuh. Gunakan docker volume ls untuk melihat semua volume yang ada.
Docker Compose: Menjalankan Beberapa Container Sekaligus
Aplikasi nyata jarang berdiri sendiri. Biasanya ada backend, database, dan kadang cache. Menjalankan semuanya dengan docker run satu per satu cepat merepotkan. Docker Compose menyelesaikannya: kamu menulis semua layanan dalam satu file docker-compose.yml, lalu menjalankannya dengan satu perintah.
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DB_HOST=db
- DB_USER=postgres
- DB_PASSWORD=rahasia
depends_on:
- db
db:
image: postgres:16
environment:
- POSTGRES_PASSWORD=rahasia
volumes:
- dbdata:/var/lib/postgresql/data
volumes:
dbdata:
Jalankan semuanya dengan docker compose up -d, dan hentikan dengan docker compose down. Di dalam jaringan Compose, service app bisa memanggil database cukup dengan nama db sebagai host. Itu sebabnya nilai DB_HOST di atas adalah db.
Password di contoh ini hanya untuk belajar. Di project sungguhan, simpan kredensial di file .env dan jangan masukkan ke repositori Git.
Jika frontend dan backend kamu berjalan di container terpisah, error CORS hampir pasti akan muncul. Pelajari penyebab dan solusinya di CORS Error: Penyebab dan 5 Cara Mengatasinya di Express.
Alur Kerja Docker di Project Nyata
Supaya gambaran besarnya jelas, berikut alur kerja yang umum dipakai tim developer. Di sini terlihat kenapa docker adalah bagian penting dari proses deployment modern.
- Tulis aplikasi dan Dockerfile, lalu simpan di repositori Git.
- Build image dengan
docker build -t username/myapp:1.0 .. - Uji container di komputer lokal dengan
docker run. - Kirim image ke registry dengan
docker push username/myapp:1.0. - Di server, unduh image dengan
docker pull, lalu jalankan sebagai container. - Untuk update, ulangi build dengan nomor versi baru dan jalankan container versi terbaru.
Banyak tim mengotomatiskan langkah 2 sampai 4 lewat pipeline CI/CD, sehingga setiap perubahan kode langsung menghasilkan image baru yang siap di-deploy.
Docker vs Kubernetes: Apa Bedanya?
Pemula sering mengira keduanya bersaing, padahal fungsinya berbeda. Docker membungkus dan menjalankan container. Kubernetes adalah orkestrator yang mengatur banyak container di banyak server: menjaga jumlah replika, memulihkan container yang mati, dan membagi beban lalu lintas.
Untuk proyek pribadi atau aplikasi skala kecil, Docker dan Docker Compose sudah lebih dari cukup. Kubernetes baru terasa manfaatnya saat aplikasimu besar dan butuh skala otomatis. Jadi, docker adalah fondasi yang sebaiknya kamu kuasai sebelum melangkah ke Kubernetes.
6 Kesalahan Umum Pemula Saat Memakai Docker
- Tidak memakai
.dockerignore. Akibatnya foldernode_modulesdan file rahasia ikut masuk ke image. - Selalu memakai tag
latest. Versi bisa berubah diam-diam dan merusak aplikasimu. Tentukan versi spesifik. - Menyimpan data penting tanpa volume. Data hilang begitu container dihapus.
- Menulis password langsung di Dockerfile. Isi Dockerfile tersimpan di image dan bisa dibaca orang lain. Pakai environment variable.
- Menjalankan semua layanan dalam satu container. Pisahkan aplikasi, database, dan cache ke container masing-masing.
- Lupa membersihkan. Container dan image lama menumpuk dan memakan disk. Perintah
docker system prunebisa membantu, tapi baca dulu peringatannya karena perintah ini menghapus container yang berhenti, network yang tidak terpakai, dan image tanpa tag.
Kelebihan dan Kekurangan Docker
Kelebihan:
- Lingkungan development dan production konsisten.
- Setup project baru jadi cepat.
- Hemat sumber daya dibanding virtual machine.
- Cocok dipadukan dengan CI/CD dan deployment modern.
Kekurangan:
- Ada kurva belajar, apalagi untuk konsep jaringan dan volume.
- Di Windows dan macOS, Docker Desktop cukup memakan RAM.
- Container tidak menyimpan data secara permanen kecuali kamu memakai volume.
Tips Belajar Docker untuk Pemula
- Mulai dari satu project kecil. Bungkus aplikasi Node.js atau Python sederhanamu ke dalam container dulu.
- Pakai image resmi dan versi spesifik. Hindari tag
latestdi production agar hasilnya bisa diprediksi. - Gunakan file
.dockerignore. Abaikan foldernode_modulesdan file rahasia supaya image lebih kecil dan aman. - Pelajari volume. Ini penting bila kamu menjalankan database di dalam container.
- Kuasai Git lebih dulu. Jika belum nyaman, baca Git Adalah: Pengertian, Cara Kerja, dan 10 Perintah Dasar.
Setelah itu, kamu bisa lanjut mempelajari REST API vs GraphQL untuk membangun backend yang nanti dijalankan di dalam container, atau Server-Side Rendering vs Client-Side Rendering bila kamu fokus ke frontend.
Pertanyaan yang Sering Diajukan (FAQ)
Docker adalah software berbayar?
Docker Engine dan tools dasarnya gratis dan open source. Docker Desktop punya ketentuan lisensi tersendiri yang bisa berbayar untuk perusahaan berukuran tertentu. Untuk belajar dan proyek pribadi, kamu bisa memakainya dengan tenang. Cek syarat terbaru di situs resmi Docker.
Apakah Docker sama dengan virtual machine?
Bukan. Virtual machine membawa sistem operasi lengkap, sedangkan container berbagi kernel dengan sistem operasi host. Karena itu container lebih ringan dan lebih cepat dijalankan.
Apakah belajar Docker harus paham Linux?
Tidak wajib, tapi paham perintah dasar terminal akan sangat membantu. Banyak image Docker berbasis Linux, jadi lama-lama kamu akan terbiasa.
Apa bedanya image dan container?
Image adalah template read-only, sedangkan container adalah hasil menjalankan image tersebut. Satu image bisa menghasilkan banyak container.
Apa bedanya Docker dan Docker Compose?
Docker menjalankan container lewat perintah satu per satu, sedangkan Docker Compose mengatur banyak container sekaligus lewat satu file YAML. Compose bukan pengganti Docker. Compose memakai Docker di belakangnya.
Apakah data hilang saat container dihapus?
Ya, jika data disimpan di dalam container tanpa volume. Gunakan volume agar data tetap ada walaupun container dihapus atau dibuat ulang.
Kesimpulan
Docker adalah tools yang membuat aplikasi berjalan konsisten di mana saja dengan membungkusnya ke dalam container. Kamu sudah mengenal pengertian Docker, cara kerja Dockerfile, image, container, dan registry, serta 8 perintah dasar untuk memulai.
Langkah selanjutnya sederhana: pasang Docker Desktop, bungkus satu project kecilmu, lalu jalankan dengan docker run. Makin sering dipraktikkan, makin terasa kenapa docker adalah skill yang hampir wajib dimiliki developer modern. Kalau ada yang masih membingungkan, tulis di kolom komentar ya.