Kursus Dasar Docker dan Kubernetes

Kursus menengah terstruktur tentang image Docker, kontainer, volume, jaringan, Compose, serta workload, layanan, penyimpanan, dan pemecahan masalah Kubernetes.

Tingkat: Docker & Kubernetes Kesulitan: intermediate 5 pelajaran 90 mnt
Kemajuan kursus 0 / 5
Kembali ke kursus

Yang akan Anda pelajari

  • Membangun dan mengoptimalkan image Docker dengan Dockerfile
  • Menjalankan dan memeriksa kontainer serta menyimpan data permanen dengan volume
  • Menghubungkan kontainer dengan jaringan Docker dan Compose
  • Menyebarkan workload inti Kubernetes dengan ConfigMap dan Secret
  • Mengekspos aplikasi dan memecahkan masalah klaster Kubernetes

Sebelum mulai

  • Pengalaman dasar dengan baris perintah Linux
  • Familiar dengan HTTP, port, dan penyebaran aplikasi
  • Bank latihan Docker dan Kubernetes berguna untuk penilaian mandiri

Pelajaran 1 Image Docker dan Dockerfile

Image Docker adalah template hanya-baca yang berisi aplikasi, runtime, pustaka, dan konfigurasinya. Image dibangun dari Dockerfile menggunakan lapisan: setiap instruksi seperti FROM, COPY, RUN, atau ENV membuat satu lapisan, dan lapisan yang tidak berubah di-cache agar proses build ulang lebih cepat. Image yang lebih kecil dan aman menggunakan image dasar yang minimal, menggabungkan perintah RUN yang berkaitan, dan hanya menyalin file yang dibutuhkan aplikasi.

Instruksi FROM memilih image dasar. COPY memindahkan file dari build context ke dalam image, sedangkan RUN menjalankan perintah selama proses build. CMD menyediakan perintah dan argumen default yang digunakan saat kontainer dimulai, dan ENTRYPOINT mendefinisikan executable yang selalu dijalankan. Jika keduanya ada, entrypoint menerima argumen baris perintah sebagai parameternya. Pemeriksaan kesehatan atau pengguna non-root dapat ditambahkan dengan HEALTHCHECK dan USER.

Gunakan docker build -t myapp:latest . untuk membuat image dan docker image ls untuk mencantumkan image. Beri tag image dengan nomor versi yang bermakna dan hindari hanya menggunakan latest di produksi. Tujuannya adalah image yang deterministik, kecil, dan dapat direproduksi hanya dari Dockerfile.

Tips latihan Image Docker dan Dockerfile: Ulangi pelajaran ini dalam sesi singkat setiap hari. Setelah setiap latihan, sebutkan aturan atau langkah yang kamu gunakan; jika tidak bisa, pelajari topik itu sebelum lanjut. Konsistensi mengingat lebih baik daripada sesi panjang.

Contoh

Aplikasi Node.js hanya membutuhkan file paket untuk menginstal dependensi dan kode sumbernya untuk dijalankan. Dockerfile dimulai dengan FROM node:20-alpine, menyalin package.json terlebih dahulu, menjalankan npm ci, menyalin kode sumber, berpindah ke pengguna non-root, dan mendefinisikan CMD ["node", "server.js"]. Menyalin dependensi sebelum kode sumber memungkinkan Docker menggunakan kembali lapisan dependensi hingga file paket berubah.

Baca ulang pertanyaan sebelum selesai dan pastikan makna jawabanmu benar.

Pelajaran 2 Siklus Hidup Kontainer dan Penyimpanan Persisten

Kontainer adalah instance yang berjalan dari sebuah image. Docker membuat, memulai, menghentikan, memulai ulang, dan menghapus kontainer dengan perintah seperti docker create, docker start, docker stop, dan docker rm. Pintasan umum docker run membuat dan memulai kontainer dalam satu langkah. Gunakan docker ps untuk kontainer yang berjalan, docker ps -a untuk menyertakan kontainer yang dihentikan, dan docker logs untuk memeriksa keluaran aplikasi.

Filesystem kontainer bersifat sementara: ketika kontainer dihapus, perubahan yang ditulis di dalamnya hilang. Volume dan bind mount mengatasi masalah ini. Volume bernama dikelola oleh Docker dan tetap ada setelah kontainer dihapus; bind mount memetakan direktori host ke dalam kontainer. Bendera -v dan --mount melampirkan penyimpanan, dan kontainer dapat berbagi volume yang sama. Mount hanya-baca mencegah perubahan yang tidak disengaja.

Untuk debugging, docker exec -it container bash membuka shell di dalam kontainer yang berjalan, dan docker inspect menampilkan detail konfigurasi dan status. Terapkan kebijakan --restart hanya ketika aplikasi harus pulih secara otomatis, dan simpan log serta data di luar kontainer ketika kontainer itu sendiri dapat diganti.

Tips latihan Siklus Hidup Kontainer dan Penyimpanan Persisten: Ulangi pelajaran ini dalam sesi singkat setiap hari. Setelah setiap latihan, sebutkan aturan atau langkah yang kamu gunakan; jika tidak bisa, pelajari topik itu sebelum lanjut. Konsistensi mengingat lebih baik daripada sesi panjang.

Contoh

Kontainer database dimulai dengan docker run -d --name postgres -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=secret postgres:16. Volume bernama pgdata menyimpan file database setelah docker rm postgres, sehingga kontainer pengganti yang menggunakan volume yang sama memulihkan data yang sama.

Baca ulang pertanyaan sebelum selesai dan pastikan makna jawabanmu benar.

Pelajaran 3 Jaringan Docker dan Compose

Jaringan Docker memungkinkan kontainer berkomunikasi berdasarkan nama atau IP. Jaringan bridge default menyediakan DNS otomatis antar kontainer di jaringan yang sama, sedangkan jaringan host berbagi tumpukan jaringan host dan menghilangkan isolasi. Jaringan bridge yang ditentukan pengguna disarankan karena mendukung resolusi DNS dan dapat dilampirkan atau dilepas tanpa membuat ulang kontainer. Publikasikan port kontainer ke host dengan -p 8080:80; sisi kiri adalah port host dan sisi kanan adalah port kontainer.

Docker Compose mendefinisikan aplikasi multi-kontainer dalam file YAML. Layanan mendeklarasikan image, build context, port, volume, variabel lingkungan, dan jaringan. Menjalankan docker compose up -d membuat jaringan dan memulai layanan secara bersamaan; docker compose down menghapus kontainer dan jaringan default sambil mempertahankan volume bernama. Compose juga mendukung dependensi, pemeriksaan kesehatan, dan penskalaan replika layanan.

Periksa konektivitas dengan docker network ls, docker network inspect, dan docker exec. Kegagalan umum adalah kontainer web yang tidak dapat menjangkau database karena berada di jaringan berbeda atau karena aplikasi menggunakan localhost alih-alih nama layanan. Gunakan nama layanan di Compose agar DNS bawaan menyelesaikan ke kontainer yang benar.

Tips latihan Jaringan Docker dan Compose: Ulangi pelajaran ini dalam sesi singkat setiap hari. Setelah setiap latihan, sebutkan aturan atau langkah yang kamu gunakan; jika tidak bisa, pelajari topik itu sebelum lanjut. Konsistensi mengingat lebih baik daripada sesi panjang.

Contoh

File compose mendefinisikan layanan web dan db. Layanan web memetakan "8080:3000" dan terhubung ke database menggunakan hostname db dan port 5432. Layanan database memasang volume bernama dan menetapkan pemeriksaan kesehatan saat dimulai. Menjalankan docker compose up -d memulai kedua layanan pada satu jaringan privat, dan browser mencapai aplikasi di http://localhost:8080.

Baca ulang pertanyaan sebelum selesai dan pastikan makna jawabanmu benar.

Pelajaran 4 Workload Inti Kubernetes

Kubernetes menjalankan aplikasi berkontainer pada klaster node. Unit terkecil yang dapat disebarkan adalah Pod, yang membungkus satu atau lebih kontainer dengan penyimpanan, jaringan, dan siklus hidup bersama. Pod biasanya dibuat oleh controller. Deployment mengelola replika tanpa status dengan rolling update dan rollback; StatefulSet memberikan identitas jaringan yang stabil dan penskalaan terurut untuk aplikasi stateful; DaemonSet menjalankan tepat satu Pod di setiap node terpilih; Job menjalankan workload hingga selesai; dan CronJob menjalankan Job sesuai jadwal.

Konfigurasi dipisahkan dari kode dengan ConfigMap dan Secret. ConfigMap menyimpan data yang tidak sensitif seperti variabel lingkungan atau file konfigurasi, sedangkan Secret menyimpan nilai sensitif seperti kata sandi dan token API. Keduanya dapat dipasang sebagai volume atau disuntikkan sebagai variabel lingkungan. Secret dienkode base64 di API tetapi tetap harus dilindungi dengan RBAC dan enkripsi saat disimpan.

Controller menyelaraskan kondisi yang diinginkan: Anda mendeklarasikan jumlah replika yang diinginkan, dan Kubernetes membuat atau menghapus Pod hingga kenyataan sesuai. Label dan selector menghubungkan controller ke Pod, jadi gunakan label yang bermakna seperti app dan tier. Terapkan manifest dengan kubectl apply -f dan periksa status workload dengan kubectl get pods, kubectl describe deployment, dan kubectl rollout status.

Tips latihan Workload Inti Kubernetes: Ulangi pelajaran ini dalam sesi singkat setiap hari. Setelah setiap latihan, sebutkan aturan atau langkah yang kamu gunakan; jika tidak bisa, pelajari topik itu sebelum lanjut. Konsistensi mengingat lebih baik daripada sesi panjang.

Contoh

Manifest Deployment mendeklarasikan tiga replika kontainer nginx dengan label app: web. ConfigMap menyediakan nilai APP_MODE, dan Secret menyediakan DB_PASSWORD. Jika sebuah node gagal, controller membuat Pod pengganti di node yang sehat, menjaga jumlah yang diinginkan tetap tiga.

Baca ulang pertanyaan sebelum selesai dan pastikan makna jawabanmu benar.

Pelajaran 5 Layanan, Penyimpanan, dan Pemecahan Masalah Kubernetes

Service menyediakan endpoint jaringan yang stabil untuk sekumpulan Pod. ClusterIP mengekspos Service di dalam klaster, NodePort membuka port di setiap node, dan LoadBalancer terintegrasi dengan penyedia cloud untuk lalu lintas eksternal. Ingress merutekan lalu lintas HTTP dan HTTPS ke Service menggunakan hostname dan path, biasanya melalui ingress controller. Selector di Service harus cocok dengan label Pod, dan targetPort Service harus cocok dengan port kontainer.

Penyimpanan persisten menggunakan PersistentVolumeClaim (PVC) untuk meminta penyimpanan, PersistentVolume (PV) untuk menyediakannya, dan StorageClass untuk menentukan perilaku provisioning. PVC yang terikat pada PV dapat dipasang ke Pod; ReclaimPolicy mengontrol apakah volume dipertahankan atau dihapus ketika PVC dilepaskan. Workload stateful seperti database harus menggunakan penyimpanan yang stabil dan memahami bagaimana volume claim dipetakan ke Pod.

Pemecahan masalah mengikuti urutan terstruktur: kubectl get pods untuk melihat status, kubectl describe pod untuk event dan kondisi, kubectl logs untuk keluaran aplikasi, dan kubectl exec untuk pemeriksaan interaktif. Periksa kesalahan penarikan image, penyebab CrashLoopBackOff, readiness probe, selector Service, dan network policy. Alur kerja tinjauan yang membangun image, menguji secara lokal, menyebarkan perubahan kecil, dan rollback dengan cepat mengubah praktik Kubernetes menjadi keterampilan yang dapat diulang.

Tips latihan Layanan, Penyimpanan, dan Pemecahan Masalah Kubernetes: Ulangi pelajaran ini dalam sesi singkat setiap hari. Setelah setiap latihan, sebutkan aturan atau langkah yang kamu gunakan; jika tidak bisa, pelajari topik itu sebelum lanjut. Konsistensi mengingat lebih baik daripada sesi panjang.

Contoh

Sebuah Pod tetap dalam CrashLoopBackOff setelah tag image baru disebarkan. kubectl describe pod menunjukkan kode keluar kontainer, kubectl logs mengungkap variabel lingkungan yang hilang, dan Deployment mereferensikan ConfigMap yang tidak ada. Setelah membuat ConfigMap dan menyebarkan ulang, Pod mencapai Running dan Service mulai mengembalikan lalu lintas.

Baca ulang pertanyaan sebelum selesai dan pastikan makna jawabanmu benar.