Apa Itu Docker dan Mengapa Developer Harus Mempelajarinya?
Penjelasan praktis Docker untuk developer: container vs VM, command inti, Dockerfile, dan cara mulai menggunakannya di project nyata.
Docker terus muncul di lowongan kerja dan panduan setup, dan jika Anda belum pernah menggunakan container, rasanya seperti tembok yang harus Anda daki sebelum diizinkan menulis kode sungguhan. Sebenarnya tidak rumit setelah Anda melewati istilah-istilahnya.
Apa itu container sebenarnya
Sebuah container membungkus aplikasi Anda dengan semua yang dibutuhkan untuk menjalankannya: kode, runtime, library sistem, dan file konfigurasi. Ini bukan mesin virtual. VM memvirtualisasi seluruh sistem operasi, termasuk kernel, yang berarti boot bisa memakan waktu satu menit dan menggunakan beberapa gigabyte RAM. Container berbagi kernel mesin host dan hanya mengisolasi proses, jadi ia dimulai dalam waktu kurang dari satu detik dan biasanya menggunakan puluhan megabyte bukannya gigabyte.
Perbedaan ini adalah alasan mengapa Docker menguasai pengembangan lokal dan pipeline CI dengan cepat. Anda bisa menjalankan database Postgres, cache Redis, dan app server di satu laptop tanpa menginstal salah satunya langsung di OS Anda.
Bagian inti yang perlu Anda ketahui
Ada empat istilah yang mencakup sebagian besar apa yang akan Anda tangani sehari-hari:
- Image: template read-only yang dibangun dari Dockerfile. Pikirkan ini sebagai snapshot filesystem plus metadata tentang cara menjalankannya.
- Container: instance yang berjalan dari sebuah image. Anda bisa memulai, menghentikan, dan menghapus container tanpa menyentuh image yang mereka berasal darinya.
- Dockerfile: file teks dengan instruksi untuk membangun image, baris per baris.
- Registry: tempat image disimpan dan diambil dari sana, paling umum adalah Docker Hub.
Dockerfile minimal untuk aplikasi Node.js terlihat seperti ini:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Bangun dengan docker build -t my-app . dan jalankan dengan docker run -p 3000:3000 my-app. Flag -p memetakan port di mesin Anda ke port di dalam container, yang merupakan cara Anda benar-benar mencapai app dari browser.
Command yang akan Anda gunakan terus-menerus
Segelintir command mencakup sebagian besar pekerjaan sehari-hari:
docker ps— list container yang berjalandocker ps -a— list semua container, termasuk yang dihentikandocker images— list image di mesin Andadocker logs <container>— cek output dari container yang sedang berjalan atau crashdocker exec -it <container> sh— buka shell di dalam container yang berjalandocker rm/docker rmi— bersihkan container dan image yang tidak Anda butuhkan lagi
Pasangan terakhir itu penting lebih dari yang orang harapkan. Docker dengan senang hati akan membiarkan ruang disk hilang ke image lama dan container yang dihentikan. Menjalankan docker system prune sesekali memulihkan jumlah ruang yang mengejutkan.
Mengapa docker-compose mengubah workflow
Sebagian besar project nyata butuh lebih dari satu container: app server, database, mungkin cache. Menulis command docker run untuk masing-masing cepat membosankan. docker-compose.yml memungkinkan Anda mendefinisikan seluruh stack dalam satu file:
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: devpassword
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Jalankan docker compose up dan kedua service dimulai bersama, terhubung jaringan sehingga web bisa mencapai db dengan service name. Ini adalah setup yang akan Anda lihat di hampir setiap README repo open-source, dan memahaminya berarti Anda bisa clone project dan menjalankannya dalam hitungan menit bukannya menginstal Postgres, Redis, dan apapun lagi yang dibutuhkan app.
Tempat orang tersesat di awal
Volume membingungkan hampir semua orang pada mulanya. Tanpa volume, apapun yang ditulis di dalam container hilang saat container dihapus, yang merupakan masalah untuk database. Section volumes di file compose di atas memetakan named volume ke path di dalam container sehingga data bertahan setelah restart.
Kesalahan umum lainnya adalah menyalin node_modules atau .git ke dalam image karena tidak ada file .dockerignore. Tambahkan satu seperti .gitignore:
node_modules
.git
.env
Itu membuat build lebih cepat dan image lebih kecil, yang penting setelah Anda push image ke registry atau deploy ke Kubernetes.
Kemana pergi setelah dasar-dasarnya
Setelah membangun dan menjalankan container terasa normal, skill yang berguna selanjutnya adalah multi-stage build untuk image production yang lebih kecil, memahami mode networking Docker, dan membaca output docker inspect saat sesuatu tidak tersambung dengan benar. Tidak ada yang sulit, hanya tidak familiar pertama kali.
Untuk lebih lanjut tentang containerize aplikasi nyata dan menghubungkannya ke pipeline deployment cloud, cek segmen DevOps dan Cloud di Korra Studio.
Ditulis dengan bantuan AI, ditinjau dan dipublikasikan oleh Michal Pilch (CISSP), Korra Studio.
Ini satu catatan dari basis pengetahuan Korra Studio — platform ini memasangkan setiap topik dengan bimbingan privat.
Mulai gratisarrow_forward