Devops - Docker and Kubernetes Training
Heitech Padu
Devops - Docker and Kubernetes Training
Date : 01 - 03 December 2025
Venue: Heitech Village, Subang

Syllabus
Table of Contents
1. DevOps Fundamentals
- What is DevOps?
- DevOps vs Traditional SDLC
- CI/CD concepts
- Infrastructure as Code (IaC)
- DevOps toolchain overview: Git, Docker, Jenkins/GitHub Actions, Kubernetes, Terraform, ArgoCD
2. Git for DevOps
- Git basics (clone, commit, branch, merge)
- Git workflows (Git Flow, trunk-based development)
- Managing releases & versioning
- Hands-on: Create repo → PR → Merge → Tag
3. Docker Basics
- What is containerization?
- Containers vs VMs
- Docker components (images, containers, volumes, networks)
- Dockerfile best practices
- Hands-on:
- Install Docker Desktop
- Create Dockerfile for a simple app
- Build image
- Run container
4. Docker for Development
- Multi-stage builds
- Environment variables & secrets
- Docker networking basics
- Hands-on:
- Build multi-stage Docker image
- Connect multiple containers
5. Docker Compose
- Why Docker Compose?
- yaml structure
- Hands-on:
- Build a multi-container app (API + DB)
- Use volumes & networks
6. Kubernetes Architecture
- Kubernetes components
- Master vs Worker nodes
- API Server, etcd, Scheduler, kubelet
- Pods, Deployments, ReplicaSets, Services
7. Kubectl Basics
- Contexts & namespaces
- Basic operations (apply, get, describe, logs, exec)
- Hands-on: deploy & debug pods
8. Kubernetes Objects
- Pods
- Deployments
- Services (ClusterIP, NodePort, LoadBalancer)
- ConfigMaps & Secrets
- Ingress controller (NGINX) overview
- Hands-on:
- Create Deployment + Service
- Expose app via NodePort
- Manage configs & secrets
9. Storage in Kubernetes
- Persistent Volumes (PV)
- Persistent Volume Claims (PVC)
- Storage classes
- Hands-on: mount data for apps
10. Docker Registry
- Public registry (Docker Hub)
- Private registry
- Tagging, pushing, versioning
- Hands-on: Push your image
11. Helm Basics
- What is Helm
- Chart structure
- Values.yaml
- Installing/upgrading applications
- Hands-on: Deploy app using Helm
12. CI/CD Pipeline
- CI pipeline basics
- Build → Test → Docker build → Push → Deploy
- Jenkins pipeline or GitHub Actions
- Hands-on:
- Automatic build & push Docker image
13. Deploying to Kubernetes
- Deployment strategies: Rolling, Blue-Green, Canary
- Hands-on:
- Create a CI/CD pipeline to deploy to k8s
14. Monitoring & Logging
- Metrics: Prometheus + Grafana
- Logging: EFK (Elastic + Fluentd + Kibana)
- Health checks (liveness/readiness probes)
15. Final Lab
- Build an app → Dockerize → Push → Deploy to Kubernetes → Expose
- Apply ConfigMap, secret, scaling, autoscaling
- Rancher for cluster management
- Kubernetes security (RBAC, network policies)
- Terraform for infrastructure provisioning
- ArgoCD for GitOps
Training Materials
Trainer Profile
![]() |
Nama : Azman bin Zakaria
|
|
Azman merupakan senior programmer yang passionate dalam bidang pengaturcaraan komputer dari awal mulai beliau bekerja pada tahun 2000 sehingga hari ini. Beliau mempunyai pengalaman bekerja yang luas di agensi kerajaan, swasta dan sebagai freelancer.
|
|
Notes
version: '3.8'
services:
nginx:
# NGINX service
image: nginx:latest
container_name: nginx
ports:
- "9000:80"
php:
image: php:8.3-fpm
container_name: php
mysql:
image: mysql
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
version: '3.8'
services:
app:
# cari Dockerfile dan run
build: .
container_name: php-app
working_dir: /var/www
volumes:
- ./src:/var/www
ports:
- "9000:9000" # default port php-fpm: 9000
networks:
- appnet
depends_on: # jgn run sehingga service mysql ready
- mysql
nginx:
image: nginx:latest
container_name: nginx-app
ports:
- "8080:80" # akses di localhost:8080
volumes:
- ./src:/var/www
- ./nginx/conf.d:/etc/nginx/conf.d
networks:
- appnet
depends_on:
- app
mysql:
image: mysql:8.0
container_name: mysql-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: appdb # create database nama appdb
MYSQL_USER: appuser # create user nama appuser
MYSQL_PASSWORD: apppassword # password untuk user appuser
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql # data mysql dlm linux disimpan disini
networks:
- appnet
# create network dan volume
networks:
appnet:
volumes:
dbdata:
server {
listen 80;
server_name localhost;
root /var/www;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string=404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php-app:9000;
fastcgi_index index.php;
fastcgi_params SCRIPT_FILENAME/var/www$fastcgi_script_name ;
}
location ~ /\.ht {
deny all;
}
}
Borang Penilaian Keberkesanan Latihan
Training evaluation ยท Devops - Docker and Kubernetes Training
Log in with the account you registered for this training to fill in the survey.
Log in to fill in the surveyAttendance
Students (0)
No students have registered yet.
