Bab sebelumnya memasang PostgreSQL langsung ke sistem operasi, dan pendekatan tersebut punya batas: versi berbeda antar server, pemasangan menyentuh konfigurasi global, dan membersihkan jejaknya tidak sederhana. Docker menyelesaikan masalah tersebut dengan mengemas aplikasi beserta seluruh dependensinya ke dalam wadah terisolasi bernama container. Bagi data engineer, Docker adalah cara standar menyediakan database, message broker, dan orchestration engine di laptop tanpa saling mengganggu.
Konsep Inti: Image, Container, dan Registry #
Tiga istilah ini menjadi fondasi seluruh operasi Docker:
- Image: cetakan siap pakai berisi aplikasi dan dependensinya, tersusun dalam lapisan yang tidak dapat diubah. Contoh: image
postgres:17memuat PostgreSQL versi 17 beserta pustaka sistem yang dibutuhkan. - Container: proses berjalan yang dibuat dari sebuah image. Satu image dapat menurunkan banyak container, seperti satu cetakan menghasilkan banyak salinan.
- Registry: gudang penyimpanan image di jaringan. Docker Hub adalah registry publik terbesar; perusahaan biasanya memakai registry privat untuk image internal.
Alur kerjanya terlihat seperti ini:
Dockerfile (resep berisi langkah membangun image) dibangun menjadi image, image dijalankan sebagai container, dan registry mendistribusikan image yang sama ke komputer mana pun.
Mengapa Data Engineer Memakai Docker #
- Lingkungan seragam: tim memakai PostgreSQL versi identik tanpa bergantung pada versi yang kebetulan terpasang di masing-masing laptop.
- Cepat bersih: menghapus container dan volumenya mengembalikan sistem seperti semula — tidak ada sisa konfigurasi tersebar.
- Meniru produksi: stack lengkap (database, Kafka, Airflow) dapat dijalankan di laptop sebelum dideploy ke server sungguhan.
- Isolasi antar proyek: proyek A dapat memakai PostgreSQL 16 sementara proyek B memakai PostgreSQL 18 dalam waktu bersamaan.
Menjalankan PostgreSQL dengan docker run #
Perintah docker run mengunduh image dari registry lalu menjalankan container. Perhatikan contoh berikut baris demi baris:
docker run --name latihan-postgres \
-e POSTGRES_USER=budi \
-e POSTGRES_PASSWORD=YOUR_DATABASE_PASSWORD \
-e POSTGRES_DB=penjualan \
-p 5432:5432 \
-d postgres:17--name latihan-postgres: memberi nama container agar mudah dipanggil perintah berikutnya.-e POSTGRES_USER=...: menetapkan environment variable di dalam container; image resmi PostgreSQL memakai tiga variabel tersebut untuk membuat pengguna, kata sandi, dan database awal.-p 5432:5432: meneruskan port 5432 dari komputer host ke port 5432 di dalam container, sehingga klien lokal dapat terhubung.-d postgres:17: menjalankan container di latar belakang (detached) menggunakan imagepostgres:17dari Docker Hub.
Saat perintah tersebut dijalankan di sistem dengan Docker terpasang, Docker mengunduh image saat pertama kali, mencetak ID container, dan server PostgreSQL berjalan siap menerima koneksi di localhost:5432. Lingkungan penulisan tidak memasang Docker, sehingga tidak ada keluaran nyata yang dapat disertakan di sini — perilaku yang dijelaskan di atas mengikuti dokumentasi resmi Docker.
Merangkai Layanan dengan docker-compose #
Ketika pipeline membutuhkan lebih dari satu layanan (misalnya PostgreSQL dan Airflow), mengetik docker run panjang berulang kali menjadi merepotkan. Berkas docker-compose.yml mendeklarasikan seluruh layanan dalam satu tempat:
services:
postgres:
image: postgres:17
environment:
POSTGRES_USER: budi
POSTGRES_PASSWORD: YOUR_DATABASE_PASSWORD
POSTGRES_DB: penjualan
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:Berkas tersebut memuat satu layanan bernama postgres yang memakai image postgres:17, mengulangi tiga environment variable dari contoh sebelumnya, meneruskan port 5432, dan memasang volume bernama postgres_data ke direktori data PostgreSQL di dalam container — volume membuat data bertahan meskipun container dihapus dan dibuat ulang. Struktur YAML di atas telah diperiksa dengan parser YAML di lingkungan penulisan, meskipun perintah Docker-nya sendiri tidak dieksekusi.
Menjalankan seluruh deklarasi tersebut cukup satu perintah:
docker compose up -dSaat perintah tersebut berjalan di sistem dengan Docker terpasang, Docker membuat jaringan internal, menjalankan setiap layanan di services, dan menjalankannya di latar belakang karena tanda -d. Perintah docker compose down menghentikan dan membersihkan semuanya.
Dokumentasi lengkap instalasi Docker, perintah docker run, dan referensi Compose tersedia di https://docs.docker.com/
. Container menyediakan layanannya lewat environment variable, dan cara membaca variabel tersebut dari kode Python kita bahas pada chapter Konfigurasi Environment.