Modul Minggu 7 — Containerization (untuk Software Developer)
Pendamping
minggu_7.md(jadwal & outline). File ini konten pengajaran lengkap: penjelasan konsep, analogi kode, contoh, latihan, kunci jawaban. Lihat jugamateri/minggu_3/sampaimateri/minggu_6/— minggu ini tidak menambah tool baru, tapi membongkar tool yang sudah dipakai sejak Minggu 1 (Docker) untuk dipahami jauh lebih dalam.
Shift Minggu Ini: dari Pemakai Image ke Pembuat Image
Sejak Minggu 1, Docker sudah dipakai terus-menerus — postgres:16 (Minggu 1), apache/airflow:2.9.3 (Minggu 3), bitnami/kafka:3.7 (Minggu 4) — tapi selalu sebagai image resmi orang lain, dipakai apa adanya atau di-extend sedikit lewat Dockerfile (menambah Java + pyspark ke image Airflow, Minggu 3). Minggu ini membalik posisinya: kode sendiri (spark_jobs/, streaming-demo/) dikemas jadi image sendiri, dari nol — bukan lagi cuma menambah lapisan tipis di atas image orang lain, tapi memahami penuh apa yang terjadi di dalam sebuah image.
Ini juga jawaban langsung untuk pertanyaan yang sengaja belum dijawab sejak Minggu 3: “kenapa Airflow dijalankan lewat Docker, bukan install langsung?” (materi/minggu_3/00_overview.md cuma menyebut singkat “jembatan pemanasan ke Minggu 7”) — minggu ini jembatan itu dilewati penuh.
Kenapa Bobot Materinya Begini
- Senin–Selasa: fondasi (container vs VM, Dockerfile) — wajib dipahami sebelum menyentuh Compose/K8s, karena keduanya cuma “cara menjalankan banyak container sekaligus” — kalau dasar 1 container saja belum jelas, Compose/K8s jadi hafalan perintah tanpa pemahaman.
- Rabu: Docker Compose — bukan tool baru (sudah dipakai sejak Minggu 3), tapi baru sekarang dibedah tiap barisnya.
- Kamis: networking & volume — pertanyaan “kenapa harus
host.docker.internal?” (Minggu 3) dan “kenapa data hilang kalau container dihapus?” akhirnya dijawab tuntas di sini. - Jumat: Kubernetes level konsep + hands-on ringan — sengaja tidak all-in ke K8s (deploy 1 komponen saja di mini project), karena tujuan minggu ini adalah paham kenapa K8s dibutuhkan, bukan mahir K8s (topik yang bisa jadi spesialisasi tersendiri).
- Sabtu–Minggu: hands-on penuh — containerize kode sendiri, lalu deploy 1 komponen ke Kubernetes lokal.
Setup Environment
# Docker Desktop (Mac/Windows) sudah terpasang sejak Minggu 1 -- pastikan versi terbaru
docker --version
docker compose version
# kubectl (CLI untuk kontrol Kubernetes)
brew install kubectl
# minikube (Kubernetes 1-node lokal, paling umum dipakai untuk belajar)
brew install minikube
minikube start --driver=docker
- minikube vs kind: keduanya menjalankan Kubernetes lokal untuk belajar.
minikubedipakai di modul ini karena punyaminikube dashboard(UI visual, membantu peserta baru “melihat” apa yang terjadi) dandriver=docker(jalan di atas Docker yang sudah terpasang, tidak perlu VM terpisah).kind(Kubernetes IN Docker) valid juga kalau lebih familiar — semua perintahkubectldi modul ini sama persis, cuma cara start cluster-nya beda. - Tidak ada dependency Python baru minggu ini — semua materi soal cara mengemas & menjalankan kode yang sudah ada, bukan soal menulis kode data baru.
Dataset & Repo yang Dipakai Minggu Ini
Tidak ada dataset baru. Minggu ini membungkus ulang kode yang sudah ada di repo ecommerce-etl-pipeline: spark_jobs/ (Minggu 3) dan streaming-demo/ (Minggu 4) dikemas jadi image Docker sendiri, lalu 1 komponen (streaming-demo/consumer.py) di-deploy ke Kubernetes lokal.
Struktur Modul
| File | Sesuai Jadwal minggu_7.md | Topik |
|---|---|---|
hari_1_container_vs_vm.md | Senin, 2 jam | Container vs VM, image vs container, Docker architecture |
hari_2_dockerfile.md | Selasa, 2 jam | Dockerfile: instruksi dasar, layer caching, best practice |
hari_3_docker_compose.md | Rabu, 2 jam | Docker Compose: membedah docker-compose.yml yang sudah dipakai sejak Minggu 3 |
hari_4_networking_volume.md | Kamis, 2 jam | Networking & volume: bind mount vs volume, komunikasi antar container |
hari_5_kubernetes_intro.md | Jumat, 2 jam | Pengantar Kubernetes: pod, deployment, service, kenapa butuh orchestration |
latihan_containerization_mini_project.md | Sabtu (4 jam) + Minggu (4 jam) | Hands-on: custom Dockerfile, update Compose, deploy ke Kubernetes lokal |
Struktur tiap file hari_X sama dengan minggu-minggu sebelumnya: Tujuan Belajar → Untuk Instruktur → Konsep & Sintaks → Contoh → Kesalahan Umum → Latihan → Kunci Jawaban.
Catatan Cara Mengajar
- Pakai contoh nyata dari repo sendiri, bukan contoh generik. Peserta sudah punya
Dockerfile(Minggu 3) dandocker-compose.yml(Minggu 3-4) yang benar-benar mereka pakai — bedah file itu sendiri baris per baris, jauh lebih efektif daripada contohhello-worldabstrak. - Jangan buru-buru ke Kubernetes production-grade. Minggu ini cuma level “paham konsep + bisa deploy 1 komponen sederhana lokal” — Helm, Ingress, StatefulSet, autoscaling adalah topik lanjutan di luar cakupan roadmap 8 minggu ini, sengaja tidak disinggung supaya tidak membingungkan peserta baru.
- Tekankan bahwa Compose dan Kubernetes menjawab masalah berbeda. Compose = “jalankan beberapa container di 1 mesin”, Kubernetes = “jalankan & kelola container di banyak mesin, dengan self-healing & scaling otomatis”. Keduanya tidak saling menggantikan sepenuhnya untuk semua kasus — pilihan tergantung skala kebutuhan.
- Total waktu: 5 hari × 2 jam + Sabtu 4 jam + Minggu 4 jam = 18 jam, sesuai
minggu_7.md.