30-Day Docker & DevOps Mastery: 300 Questions
(Beginner to Senior Engineer)
Day 1: Docker Fundamentals - Basics & Installation
1. Install Docker on your system and verify the installation
Install Docker Desktop (Windows/Mac) or Docker Engine (Linux)
Run docker --version and docker info
Explain what the Docker daemon is and how it differs from the Docker CLI
Document any issues you encountered and how you resolved them
2. Run your first container using the official "hello-world" image
Execute docker run hello-world
Explain what happened step by step (image pull, container creation, execution)
What is a Docker image vs a Docker container?
Where are Docker images stored locally on your system?
3. Pull and run an Ubuntu container interactively
Pull the ubuntu:latest image explicitly
Run it with interactive terminal access ( -it flags)
Execute basic commands inside (ls, pwd, whoami)
Exit the container and explain what happened to it
4. Understand container lifecycle - run, stop, start, restart
Run an nginx container in detached mode with --name my-nginx
Use docker ps to see running containers
Stop, start, and restart the container using its name
What's the difference between docker stop and docker kill ?
5. Inspect container logs and monitor running processes
Run a container that outputs logs continuously (e.g., docker run -d ubuntu bash -c "while true; do echo
Hello; sleep 2; done" )
View logs using docker logs with different options (-f, --tail, --since)
Use docker top to see processes inside the container
What's the difference between attached and detached mode?
6. Execute commands in a running container
Start an nginx container
Use docker exec to run bash inside the running container
Modify a file inside the container (e.g., /etc/nginx/[Link])
Explain why these changes won't persist if you remove and recreate the container
7. Understand container resource usage and statistics
Run multiple containers (nginx, redis, postgres)
Use docker stats to monitor CPU, memory, network usage
What are the default resource limits for containers?
How would you limit a container to use only 512MB of RAM and 1 CPU?
8. Remove containers and clean up Docker resources
Create multiple stopped containers
Remove individual containers using docker rm
Use docker container prune to remove all stopped containers
What's the difference between docker rm and docker rmi ?
How do you remove all containers, images, and volumes at once?
9. Work with container ports and port mapping
Run nginx container and map port 80 to host port 8080
Access the nginx welcome page from your browser
Run another nginx on port 8081
Explain the difference between EXPOSE in Dockerfile and -p flag
What happens if you don't specify port mapping?
10. Understand Docker architecture - daemon, client, registry
Draw a diagram showing Docker architecture components
Explain the role of Docker daemon, Docker client, and Docker registry
What is Docker Hub and how does it relate to your local setup?
Trace the flow when you run docker run ubuntu : where does it check for images?
What is containerd and how does it relate to Docker?
Day 2: Docker Images - Building Blocks
11. Explore Docker images and image layers
Pull different versions of the same image (ubuntu:20.04, ubuntu:22.04)
Use docker images to list all images
Use docker history ubuntu:latest to see image layers
Why are Docker images built in layers? What's the benefit?
12. Understand image tags and versioning
Pull multiple tags of nginx image (nginx:alpine, nginx:1.24, nginx:latest)
What does the "latest" tag mean? Is it always the newest version?
Explain semantic versioning in Docker image tags
How would you tag your own image for development, staging, and production?
13. Inspect image details and metadata
Use docker inspect nginx to view detailed image information
Find the exposed ports, environment variables, and default command
What is the difference between CMD and ENTRYPOINT in image metadata?
How can you view the Dockerfile instructions that built an image?
14. Search and pull images from Docker Hub
Search for "postgres" images on Docker Hub using CLI
Compare official vs community images - how to identify official images?
Pull a specific version of postgres (postgres:14-alpine)
What are the security implications of using unverified images?
15. Understand image registries and repositories
What is the difference between a registry, repository, and tag?
Explain the full image name format: registry/repository:tag
Where is Docker Hub in the image name "nginx:latest"?
What are alternative registries to Docker Hub? (ECR, GCR, ACR, Harbor)
16. Create your first custom Docker image using commit
Run an ubuntu container interactively
Install curl and vim inside the container
Commit the container to create a new image named "ubuntu-custom"
Create a container from your new image and verify curl is installed
Why is this method not recommended for production?
17. Understand image size optimization
Compare the sizes of ubuntu:latest and alpine:latest
Why is alpine so much smaller? What trade-offs does it make?
Pull both nginx:latest and nginx:alpine, compare sizes
When would you choose alpine over standard distributions?
18. Work with multi-architecture images
Use docker manifest inspect nginx to see supported architectures
What is a manifest list in Docker?
How does Docker handle running amd64 images on arm64 systems?
Pull and run an arm64 image if you're on amd64 (or vice versa)
19. Export and import images as tar files
Save an nginx image to a tar file using docker save
Delete the nginx image from your local system
Load the image back from the tar file using docker load
When would you use save/load vs export/import?
What's the difference between docker save and docker export ?
20. Understand image digests and immutability
Pull an image using its digest instead of tag (e.g., nginx@sha256:...)
Why are digests important for security and reproducibility?
What happens to the digest when you push the same tag multiple times?
Explain how content-addressable storage works in Docker
Day 3: Dockerfile Basics - Creating Custom Images
21. Write your first Dockerfile with basic instructions
Create a Dockerfile that starts FROM ubuntu:22.04
Use RUN to install curl and python3
Set a CMD to run python3 --version
Build the image with docker build -t my-python-app .
Run a container from your image and verify it works
22. Understand the difference between RUN, CMD, and ENTRYPOINT
Create three different Dockerfiles demonstrating each
Dockerfile 1: Use RUN to install packages
Dockerfile 2: Use CMD with shell form vs exec form
Dockerfile 3: Use ENTRYPOINT and show how CMD becomes arguments
What happens when you override CMD vs ENTRYPOINT at runtime?
23. Work with COPY and ADD instructions
Create a simple HTML file on your host
Write a Dockerfile that copies it into an nginx container
Build and run the container, verify your HTML is served
What's the difference between COPY and ADD?
Why is COPY preferred over ADD in most cases?
24. Set environment variables in Dockerfile
Create a Dockerfile with ENV instructions setting APP_ENV=development
Use the environment variable in RUN commands
Override the environment variable at runtime with -e flag
What's the difference between ENV and ARG?
25. Understand WORKDIR and its importance
Create a Dockerfile without WORKDIR, see where files are created
Refactor to use WORKDIR /app
Explain why WORKDIR is better than RUN cd /app
Can you have multiple WORKDIR instructions? What happens?
26. Implement EXPOSE instruction for documentation
Create a simple Python Flask app that runs on port 5000
Write a Dockerfile that EXPOSE 5000
Build and run the container with proper port mapping
Does EXPOSE actually publish the port? What's its real purpose?
27. Use LABEL to add metadata to your images
Add labels for version, maintainer, description in your Dockerfile
Build the image and inspect labels with docker inspect
Why are labels important for image management?
What are some common label conventions (OCI annotations)?
28. Understand build context and .dockerignore
Create a project with large files (node_modules, .git)
Build without .dockerignore and observe the build time
Create .dockerignore to exclude unnecessary files
Rebuild and compare - why is the second build faster?
What files should always be in .dockerignore?
29. Use ARG for build-time variables
Create a Dockerfile with ARG for BASE_IMAGE version
Use the ARG to set the FROM instruction dynamically
Build the image with --build-arg to change the base image
What's the difference between ARG and ENV?
Can ARG values be seen in the final image?
30. Build a complete [Link] application image
Create a simple [Link] app with [Link] and [Link]
Write a Dockerfile that: uses node:18-alpine, copies files, runs npm install, exposes 3000, starts the app
Build and run the container
Access your app from the browser
What can be improved in this basic Dockerfile?
Day 4: Dockerfile Optimization & Best Practices
31. Implement layer caching for faster builds
Build a [Link] Dockerfile that copies all files then runs npm install
Make a small change to your code and rebuild - observe full npm install
Refactor: copy [Link] first, run npm install, then copy code
Rebuild and observe cached npm install layer
Explain Docker's layer caching mechanism
32. Minimize image layers by combining RUN commands
Create a Dockerfile with multiple RUN instructions installing packages
Use docker history to count layers
Combine all RUN commands using && and \
Compare final image sizes and layer counts
What's the trade-off between readability and layer optimization?
33. Implement multi-stage builds for smaller images
Build a Go application with a standard Dockerfile (results in 800MB+ image)
Refactor using multi-stage build: compile stage + runtime stage
Compare image sizes (should reduce to ~10-20MB)
Explain how multi-stage builds work
What are the benefits beyond size reduction?
34. Use build cache mounts for dependency caching
Write a Dockerfile using BuildKit's --mount=type=cache for npm/pip cache
Build multiple times and observe faster dependency installation
What is BuildKit and how do you enable it?
How do cache mounts differ from layer caching?
35. Implement security best practices - non-root user
Create a Dockerfile that creates a non-root user
Use USER instruction to switch to that user
Run the container and verify you're not root inside
Why is running as root a security risk?
What challenges arise when using non-root users?
36. Scan images for vulnerabilities
Install Docker Scout or use docker scan command
Scan an ubuntu:latest image for vulnerabilities
Scan an alpine-based image and compare results
Interpret the vulnerability report (Critical, High, Medium, Low)
What steps would you take to remediate vulnerabilities?
37. Use specific image tags instead of latest
Build an image using FROM node:latest
Rebuild a month later - potentially different base image!
Refactor to use specific version: FROM node:18.17.0-alpine3.18
Why is using "latest" problematic in production?
What's a good tagging strategy for your own images?
38. Implement health checks in Dockerfile
Create a web application Dockerfile
Add HEALTHCHECK instruction that curls the app endpoint
Run the container and monitor health status with docker ps
What happens when a health check fails repeatedly?
How do orchestrators like Kubernetes use health checks?
39. Optimize Python application images
Create a Python Dockerfile that installs [Link]
Implement multi-stage build separating build dependencies
Use .dockerignore for .pyc files and pycache
Set PYTHONDONTWRITEBYTECODE and PYTHONUNBUFFERED env vars
Why are these Python-specific optimizations important?
40. Build a complete production-ready Dockerfile
Choose a real application ([Link], Python, or Go)
Implement: multi-stage build, non-root user, health check, specific tags, minimal layers, .dockerignore
Build and run the optimized image
Document all optimization decisions made
Compare with a naive Dockerfile approach
Day 5: Docker Networking Fundamentals
41. Understand default bridge network
Run two containers without specifying network
Try to ping one container from another using IP address
Use docker network inspect bridge to see connected containers
What are the limitations of the default bridge network?
42. Create and use custom bridge networks
Create a custom bridge network named "my-app-network"
Run two containers attached to this network
Ping containers by name (not IP) - observe DNS resolution
Why is custom bridge network better than default bridge?
43. Implement container-to-container communication
Run a MySQL container on custom network
Run a WordPress container on same network
Configure WordPress to connect to MySQL using container name
Verify the application works
Explain how DNS resolution works in Docker networks
44. Understand host network mode
Run a container with --network host
What's the difference between host and bridge networking?
When would you use host networking?
What are the security implications?
45. Explore none network mode
Run a container with --network none
Verify no network interfaces exist (except loopback)
What use cases exist for no networking?
How is this useful for security?
46. Connect containers to multiple networks
Create two networks: "frontend" and "backend"
Run a database on "backend" only
Run an API server connected to both networks
Run a web server on "frontend" only
Verify web server can reach API but not database directly
47. Inspect network details and troubleshoot connectivity
Use docker network ls to list all networks
Use docker network inspect to see connected containers
Run docker exec to get into a container and use ping, curl, nslookup
What tools should you install in containers for network debugging?
48. Implement port publishing and understand the difference
Run nginx with -p 8080:80 (explicit mapping)
Run another with -p 80 (random host port)
Run another with -P (publish all exposed ports)
Use docker port command to check mappings
Explain iptables rules Docker creates for port forwarding
49. Work with container IP addresses
Run a container and find its IP using docker inspect
Access the container using its internal IP from host (may not work on Mac/Windows)
Why can't you access container IPs directly on Docker Desktop?
Explain the difference between Docker on Linux vs Mac/Windows
50. Clean up networks and handle naming conflicts
Create multiple networks and containers
Try to remove a network that has connected containers
Disconnect containers properly and remove networks
Use docker network prune to clean unused networks
What happens to containers when their network is removed?
Day 6: Docker Volumes & Data Persistence
51. Understand container filesystem and data loss
Run a postgres container and create some data
Stop and remove the container
Run a new postgres container - observe data is gone
Explain why containers are ephemeral and stateless by default
52. Create and use named volumes
Create a volume using docker volume create my-data
Run a postgres container mounting this volume to /var/lib/postgresql/data
Create data, remove container, start new container with same volume
Verify data persisted - how and where is volume data stored on host?
53. Use bind mounts to mount host directories
Create a directory on your host with [Link]
Run nginx with -v $(pwd):/usr/share/nginx/html
Modify [Link] on host, refresh browser - see live changes
What's the difference between volumes and bind mounts?
54. Implement read-only mounts for security
Mount a configuration file as read-only using :ro flag
Try to modify the file from inside container - should fail
When would you use read-only mounts?
How does this improve security?
55. Share volumes between multiple containers
Create a volume and mount it to a container that writes data
Mount the same volume to another container that reads data
Verify both containers can access the same data
What are the use cases for shared volumes?
56. Use tmpfs mounts for sensitive temporary data
Run a container with --tmpfs /tmp
Write sensitive data to /tmp inside container
Stop container and verify data is gone (not persisted to host)
When would you use tmpfs instead of volumes?
57. Backup and restore volume data
Create a volume with important data
Run a temporary container to tar the volume contents to host
Delete the volume and create a new one
Restore from the tar backup
Document the complete backup/restore procedure
58. Understand volume drivers and plugins
List available volume drivers using docker volume ls
What is the default volume driver (local)?
Research alternative drivers: NFS, AWS EBS, GlusterFS
When would you use a non-local volume driver?
59. Inspect and manage volumes
Use docker volume ls to list volumes
Use docker volume inspect to see mount point and driver
Find where Docker stores volumes on your host filesystem
Use docker volume prune to remove unused volumes
What's the difference between dangling and unused volumes?
60. Build a database container with persistent storage
Run MySQL with a named volume for data directory
Run phpMyAdmin or another client connecting to MySQL
Create databases and tables
Test complete container recreation while preserving data
Document best practices for database containers
Day 7: Docker Compose Basics
61. Install Docker Compose and verify installation
Install Docker Compose (comes with Docker Desktop)
Run docker compose version
What's the difference between docker-compose (v1) and docker compose (v2)?
62. Create your first [Link] file
Define a simple service running nginx
Specify image, container_name, and ports
Run docker compose up
Access the service and then bring it down
What files does Compose create in the directory?
63. Define multiple services in Compose
Create a wordpress and mysql setup in [Link]
Define both services with proper configuration
Use docker compose up -d to run in detached mode
Verify the application works
Use docker compose logs to view logs
64. Understand Compose networking (default)
Observe that Compose creates a default network
Services can reach each other by service name
Use docker compose ps to see running services
Inspect the network Compose created
What's the naming convention for Compose networks?
65. Work with environment variables in Compose
Define environment variables in the service definition
Create a .env file with variables
Reference .env variables in [Link]
Override variables using docker compose up --env-file
What's the precedence order for environment variables?
66. Implement depends_on for service dependencies
Create a web app that depends on a database
Use depends_on to ensure database starts first
What are the limitations of depends_on?
How does depends_on differ from actual readiness checking?
67. Define volumes in Docker Compose
Add a named volume for database persistence
Add a bind mount for application code
Use the volumes: top-level key
What's the difference between anonymous, named, and host volumes in Compose?
68. Use build context in Compose
Create a custom Dockerfile for your application
Instead of image:, use build: with context and dockerfile
Run docker compose build to build images
Run docker compose up and verify custom image is used
What's the difference between compose build and compose up --build ?
69. Scale services with Compose
Create a simple web service
Use docker compose up --scale web=3 to run 3 instances
What happens to port mapping when scaling?
Use a load balancer to distribute traffic across instances
70. Compose commands - logs, exec, down, restart
Practice: docker compose logs -f service-name
Execute commands: docker compose exec service-name bash
Restart services: docker compose restart
Remove everything: docker compose down -v
What's the difference between stop, down, and down -v?
Day 8: Advanced Docker Compose
71. Create custom networks in Compose
Define multiple networks: frontend and backend
Attach services to specific networks
Ensure web server can't directly access database
Test network isolation
How do custom networks improve security?
72. Use health checks in Compose
Add healthcheck configuration for a database service
Configure test, interval, timeout, retries, start_period
Use condition: service_healthy in depends_on
Observe startup order with proper health checking
Why are health checks critical in production?
73. Implement restart policies
Configure different restart policies: no, always, on-failure, unless-stopped
Test each by killing containers manually
Which restart policy is appropriate for production?
What's the difference between always and unless-stopped?
74. Use Compose profiles for different environments
Create profiles: dev, test, prod
Assign services to specific profiles
Run docker compose --profile dev up
How do profiles help manage multiple environments?
75. Implement secrets management in Compose
Create secret files for sensitive data
Reference secrets in [Link]
Mount secrets into containers at /run/secrets/
Compare this approach vs environment variables for secrets
What are the limitations of Compose secrets?
76. Override Compose files for different environments
Create [Link] as base
Create [Link] for local development
Create [Link] for production
Use -f flag to specify files
What's the merge strategy when using multiple Compose files?
77. Use variables and interpolation in Compose
Use ${VARIABLE} syntax in [Link]
Provide defaults: ${VARIABLE:-default}
Use variable substitution for image tags, ports, volumes
What's the difference between $VARIABLE and ${VARIABLE}?
78. Implement resource limits in Compose
Set CPU and memory limits for services
Use deploy: resources: limits: and reservations:
Test by running resource-intensive tasks
Monitor with docker stats
Why is deploy: key only for Swarm? How to use it with Compose?
79. Configure logging in Compose
Set logging driver (json-file, syslog, etc.)
Configure log options: max-size, max-file
Use docker compose logs with filters
Where are container logs stored by default?
80. Build a complete multi-tier application with Compose
Create: frontend (React/nginx), backend API ([Link]/Python), database (Postgres), cache (Redis)
Define all services with proper networking
Implement health checks, volumes, environment variables
Test the complete stack
Document the architecture
Day 9: CI/CD Basics & Version Control Integration
81. Set up a Git repository for your Docker project
Initialize a Git repo with .gitignore for Docker
Commit Dockerfile and [Link]
What files should never be committed? (secrets, volumes data)
Create a proper .gitignore for Docker projects
82. Implement automated builds with GitHub Actions
Create .github/workflows/[Link]
Configure workflow to build Docker image on push
Use official docker/build-push-action
Trigger the workflow and verify it runs
What are the benefits of automated builds?
83. Build and push images to Docker Hub in CI
Create Docker Hub account and repository
Configure GitHub Actions secrets for Docker Hub credentials
Modify workflow to login and push to Docker Hub
Verify image appears on Docker Hub
How do you handle authentication securely?
84. Implement image tagging strategy in CI
Tag images with git commit SHA
Tag with branch name (main, develop)
Tag with version number from tags
Push multiple tags for the same image
Why are multiple tags important?
85. Use Docker layer caching in CI/CD
Configure GitHub Actions to cache Docker layers
Use docker/build-push-action cache options
Compare build times with and without caching
What's the trade-off between cache size and build speed?
86. Run tests inside Docker containers in CI
Create a multi-stage Dockerfile with a test stage
Configure CI to run tests before building final image
Fail the build if tests fail
How does this ensure quality?
87. Implement vulnerability scanning in CI pipeline
Add Trivy or Snyk scanning step in GitHub Actions
Scan built images for vulnerabilities
Fail builds on high/critical vulnerabilities
Generate and store scan reports
How do you handle false positives?
88. Use matrix builds for multiple architectures
Configure GitHub Actions to build for amd64 and arm64
Use Docker Buildx for multi-platform builds
Push manifest with both architectures
Test pulling on different platforms
Why is multi-architecture support important?
89. Implement continuous deployment to a staging environment
Set up a remote server (AWS EC2, DigitalOcean, etc.)
Configure SSH access from GitHub Actions
Deploy latest image to server on successful build
Restart services using docker compose on remote
What are the security considerations for CD?
90. Create a complete CI/CD pipeline
Combine all previous steps: build, test, scan, push, deploy
Add notifications (Slack, email) on success/failure
Implement environment-specific deployments (dev, staging, prod)
Document the entire pipeline
What improvements could be made?
Day 10: Container Orchestration Introduction
91. Understand the limitations of running containers manually
List challenges: scaling, health monitoring, load balancing, updates
What happens when a container crashes?
How do you distribute load across multiple hosts?
Why is manual container management not viable at scale?
92. Introduction to Docker Swarm basics
Initialize a Swarm cluster: docker swarm init
Understand managers vs workers
Deploy a simple service: docker service create
Scale the service: docker service scale
How does Swarm handle service discovery?
93. Introduction to Kubernetes concepts
Install minikube or kind for local Kubernetes
Understand Pods, Services, Deployments
Run kubectl run nginx --image=nginx
Expose it as a service
Compare Kubernetes vs Docker Swarm philosophies
94. Deploy a multi-container app to Swarm
Convert [Link] to Swarm stack
Deploy with docker stack deploy
Scale services independently
How does service networking work in Swarm?
95. Implement rolling updates in Swarm
Deploy a service with version 1 of your app
Update to version 2 using docker service update
Observe gradual rollout
What's the difference between replicated and global services?
96. Understand service discovery and load balancing
Deploy multiple replicas of a service
Access the service and observe load distribution
How does Swarm's routing mesh work?
What is VIP (Virtual IP) mode?
97. Implement health checks in orchestration
Define health checks in service definition
Deploy services with health checks
Kill a container and observe Swarm recreating it
How do orchestrators use health checks differently than standalone Docker?
98. Use configs and secrets in Swarm
Create a Docker config for configuration files
Create a Docker secret for passwords
Reference them in service definitions
How are secrets stored and distributed securely?
99. Implement persistent storage in orchestrated environments
Understand challenges of volumes in clustered environments
Use volume plugins for shared storage
What happens when a container moves to another node?
Research solutions: NFS, GlusterFS, Ceph
100. Monitor and troubleshoot orchestrated services
Use docker service ls and docker service ps
Check service logs across all replicas
Inspect service configuration
What tools exist for better observability?
Day 11: Monitoring & Logging
101. Set up container logging with Docker logging drivers
Configure json-file logging driver with rotation
Test with syslog driver
Try the fluentd driver
What are the pros/cons of each driver?
102. Implement centralized logging with ELK stack
Deploy Elasticsearch, Logstash, Kibana using Compose
Configure Docker to send logs to Logstash
View and search logs in Kibana
Why is centralized logging important?
103. Use Prometheus for container metrics
Deploy Prometheus using Docker
Configure it to scrape Docker metrics
Use cAdvisor for container-level metrics
Query metrics using PromQL
104. Create Grafana dashboards for monitoring
Deploy Grafana alongside Prometheus
Connect Grafana to Prometheus as data source
Create dashboards showing CPU, memory, network per container
Set up alerts for high resource usage
105. Implement health check monitoring and alerting
Monitor container health status programmatically
Set up alerts when containers become unhealthy
Create a simple script to restart unhealthy containers
What are the limitations of simple health checks?
106. Use Docker events for real-time monitoring
Use docker events to watch container lifecycle events
Filter events by type (start, stop, die, kill)
Create a script that reacts to specific events
How can events be used for automation?
107. Implement distributed tracing for microservices
Deploy Jaeger tracing system
Instrument a simple microservices app with tracing
View traces showing request flow across services
Why is distributed tracing critical in microservices?
108. Monitor application performance (APM)
Deploy an APM solution (New Relic, Datadog, or open-source alternative)
Instrument your application to report metrics
View application-level performance data
What's the difference between infrastructure and application monitoring?
109. Set up log aggregation with Loki
Deploy Grafana Loki for log aggregation
Configure promtail to ship container logs
Query logs using LogQL in Grafana
Compare Loki vs ELK stack (advantages/disadvantages)
110. Create a complete observability stack
Combine: Prometheus (metrics), Loki (logs), Jaeger (traces)
Visualize everything in Grafana
Set up unified dashboards showing metrics, logs, and traces
Document best practices for production observability
Day 12: Security Best Practices
111. Implement Docker Content Trust for image signing
Enable Docker Content Trust (DCT)
Sign and push images to registry
Pull images with verification
What protection does image signing provide?
How does DCT prevent man-in-the-middle attacks?
112. Scan images for vulnerabilities with multiple tools
Use Trivy to scan images
Use Snyk for vulnerability scanning
Compare results from different scanners
Create a policy: no Critical vulnerabilities allowed
How do you prioritize vulnerability remediation?
113. Implement least privilege with user namespaces
Enable user namespace remapping in Docker daemon
Run containers as non-root users
Verify reduced privileges with id command
What are the compatibility challenges with user namespaces?
114. Use read-only root filesystems
Run containers with --read-only flag
Use tmpfs for temporary writes
Identify which applications can run read-only
How does read-only FS prevent attacks?
115. Implement security scanning in CI/CD pipeline
Add Trivy scanning to GitHub Actions
Fail builds on Critical/High vulnerabilities
Generate SARIF reports for GitHub Security tab
Set up automated PR comments with scan results
116. Use Docker secrets for sensitive data
Never use ENV for passwords or keys
Store secrets in Docker secrets or external vaults
Mount secrets as files, not environment variables
Why are secrets in ENV variables dangerous?
117. Implement network segmentation and firewalls
Create isolated networks for different tiers
Use iptables rules to restrict container traffic
Implement egress filtering (whitelist outbound)
Why is network segmentation critical for security?
118. Audit Docker daemon configuration
Review Docker [Link] for security settings
Disable inter-container communication if not needed
Enable audit logging for Docker daemon
Use CIS Docker Benchmark to audit configuration
What are the most critical daemon security settings?
119. Implement resource limits to prevent DoS
Set CPU and memory limits on all containers
Set PID limits to prevent fork bombs
Configure ulimits for file descriptors, processes
How do resource limits protect against attacks?
120. Use AppArmor/SELinux for mandatory access control
Understand Docker's default AppArmor/SELinux profiles
Create custom security profiles
Run containers with specific security profiles
What additional protection does MAC provide?
Day 13: Infrastructure as Code (IaC)
121. Introduction to Infrastructure as Code concepts
Define IaC and its benefits
Compare declarative vs imperative approaches
Why is IaC important for DevOps?
What problems does IaC solve?
122. Use Terraform to provision Docker infrastructure
Install Terraform
Write Terraform config to create Docker networks
Create containers using Terraform Docker provider
Apply and destroy infrastructure
What are Terraform's advantages over manual provisioning?
123. Manage Docker resources with Terraform modules
Create reusable Terraform modules for common patterns
Module for web server + database setup
Use variables and outputs
How do modules promote reusability?
124. Implement Ansible for Docker container management
Install Ansible
Write playbooks to install Docker
Deploy containers using docker_container module
Manage docker-compose with Ansible
When would you choose Ansible over Terraform?
125. Use Ansible roles for Docker application deployment
Create Ansible roles for: Docker installation, app deployment, monitoring
Organize playbooks with proper directory structure
Use inventory for multiple environments
How do roles improve organization?
126. Implement version control for infrastructure
Store all IaC code in Git
Use branches for different environments
Implement code review process for infrastructure changes
Tag infrastructure versions
Why is version control critical for IaC?
127. Use Vagrant for local development environments
Create Vagrantfile defining VM with Docker
Provision Docker and containers automatically
Share development environment with team
How does Vagrant ensure consistency?
128. Implement infrastructure testing
Write tests for Terraform using Terratest
Use Ansible's --check mode for dry runs
Test container deployments before production
What should you test in infrastructure code?
129. Use Pulumi as code-first IaC alternative
Install Pulumi and choose a language (Python, TypeScript)
Write code to provision Docker infrastructure
Compare Pulumi vs Terraform approaches
What are the benefits of real programming languages?
130. Create a complete IaC pipeline
Write IaC code (Terraform/Ansible)
Set up CI/CD to validate and apply changes
Implement plan/apply workflow with approvals
Store state securely (S3, Terraform Cloud)
Document the complete workflow
Day 14: Container Registry Management
131. Push and pull images from Docker Hub
Create Docker Hub account
Tag images with your username
Push images using docker push
Make repositories public and private
What are Docker Hub rate limits?
132. Set up a private Docker registry
Deploy registry:2 container
Configure TLS certificates
Push and pull images to private registry
Why would you run your own registry?
133. Implement authentication for private registry
Set up basic auth for registry
Configure Docker to authenticate
Use htpasswd for user management
How do you rotate credentials?
134. Use Harbor as enterprise registry
Deploy Harbor using docker-compose
Configure projects and RBAC
Enable vulnerability scanning
Set up image replication
What advantages does Harbor provide?
135. Implement image retention policies
Configure policies to delete old images
Keep only last N versions or recent images
Set up tag pattern matching
Why is retention important for storage management?
136. Set up image promotion between registries
Create dev, staging, prod registries/repos
Implement process to promote images through environments
Use image digests for immutability
How does promotion ensure stability?
137. Configure registry mirroring and caching
Set up registry pull-through cache
Configure Docker daemon to use mirror
Reduce external bandwidth usage
What are the benefits of registry caching?
138. Implement registry webhooks
Configure webhooks on image push
Trigger CI/CD pipelines from registry events
Send notifications on new images
What automation opportunities do webhooks enable?
139. Use cloud-managed registries (ECR, GCR, ACR)
Set up AWS ECR (or GCR/ACR)
Configure authentication (IAM, service accounts)
Push and pull images
Enable scanning and lifecycle policies
Compare cloud vs self-hosted registries
140. Implement garbage collection for registries
Understand registry storage layout
Run garbage collection to reclaim space
Automate garbage collection process
What happens if you don't run garbage collection?
Day 15: Advanced Networking
141. Implement custom DNS for containers
Configure custom DNS servers for containers
Use --dns flag and [Link] configuration
Set up DNS search domains
Why would you need custom DNS?
142. Create overlay networks for multi-host communication
Initialize Docker Swarm or use standalone overlay
Create overlay network
Connect containers on different hosts
How does overlay networking work (VXLAN)?
143. Implement service mesh concepts with Linkerd
Deploy Linkerd service mesh
Inject sidecar proxies into containers
Observe traffic metrics and tracing
What problems do service meshes solve?
144. Use macvlan for direct network access
Create macvlan network
Assign containers real IPs on physical network
When would you use macvlan over bridge?
What are the limitations?
145. Implement network policies and firewall rules
Use iptables to restrict container traffic
Create rules for ingress and egress
Implement allowlist approach
How do you debug network policy issues?
146. Configure IPv6 for Docker containers
Enable IPv6 in Docker daemon
Create IPv6 networks
Run containers with IPv6 addresses
What challenges exist with IPv6 adoption?
147. Use network namespaces directly
Understand Linux network namespaces
Create network namespace manually
Move interfaces between namespaces
How does Docker use network namespaces?
148. Implement ingress load balancing
Deploy Traefik or nginx as ingress controller
Configure routing based on hostnames/paths
Implement SSL/TLS termination
How does ingress differ from NodePort?
149. Monitor and troubleshoot network performance
Use iperf to measure bandwidth between containers
Use tcpdump to capture packets
Analyze network latency issues
What tools are essential for network debugging?
150. Design a complete network architecture
Design multi-tier application network
Implement: frontend network, backend network, database network
Add load balancer and ingress
Document network topology and security zones
Day 16: Performance Optimization
151. Benchmark container performance
Use tools like sysbench, stress-ng
Measure CPU, memory, disk I/O performance
Compare bare metal vs container performance
What overhead does containerization add?
152. Optimize container startup time
Measure current startup times
Reduce image size (smaller base images)
Parallelize operations in Dockerfile
Use multi-stage builds efficiently
How much did you improve startup time?
153. Implement proper resource allocation
Set appropriate CPU and memory limits
Use CPU shares vs CPU quotas
Configure memory swappiness
What happens when containers exceed limits?
154. Optimize image pull times
Use smaller base images
Implement layer caching effectively
Use local registry or mirror
Pre-pull images on nodes
How much faster are Alpine-based images?
155. Use BuildKit for faster builds
Enable BuildKit (DOCKER_BUILDKIT=1)
Use cache mounts and secret mounts
Implement parallel build stages
Compare build times with and without BuildKit
156. Implement caching strategies
Application-level caching (Redis, Memcached)
HTTP caching with Varnish or nginx
Database query caching
Where should cache containers run?
157. Optimize database containers
Tune database configuration for containers
Use appropriate storage drivers
Implement connection pooling
Monitor query performance
What's different about databases in containers?
158. Profile application performance in containers
Use profiling tools (pprof, py-spy, perf)
Identify bottlenecks (CPU, I/O, network)
Optimize hot code paths
How does containerization affect profiling?
159. Implement horizontal scaling
Deploy multiple replicas of services
Use load balancer to distribute traffic
Measure performance improvement
When should you scale horizontally vs vertically?
160. Create a performance testing environment
Set up load testing with k6 or Apache JMeter
Test application under various loads
Monitor resource usage during tests
Document performance characteristics and limits
Day 17: Backup and Disaster Recovery
161. Implement automated volume backups
Create scripts to backup Docker volumes
Use tar or rsync to copy volume data
Schedule backups with cron
Where should backups be stored?
162. Backup and restore container state
Use docker commit to save container state
Export containers with docker export
Restore from saved images
What are the limitations of this approach?
163. Implement database backup strategies
Backup databases using native tools (mysqldump, pg_dump)
Run backup containers on schedule
Store backups in S3 or other object storage
Test restore procedures regularly
164. Use volume snapshots
If using cloud storage (EBS, persistent disks), create snapshots
Automate snapshot creation
Restore volumes from snapshots
What's the difference between snapshots and backups?
165. Implement disaster recovery procedures
Document complete recovery steps
Test recovery on separate infrastructure
Calculate RTO (Recovery Time Objective)
Calculate RPO (Recovery Point Objective)
What's your acceptable data loss window?
166. Use version control for configuration
Store all configs in Git
Include: Dockerfiles, Compose files, configs
Ability to recreate entire environment from Git
How does this support disaster recovery?
167. Implement blue-green deployments
Run two identical environments (blue and green)
Deploy to inactive environment
Switch traffic to new version
Keep old version for quick rollback
What's the infrastructure cost?
168. Set up offsite backup replication
Replicate backups to different region/provider
Test restoration from offsite backups
Implement backup verification
Why is offsite replication critical?
169. Create runbooks for common failures
Document: container crash, host failure, network partition
Include step-by-step recovery procedures
Test runbooks in simulated failures
Who should have access to runbooks?
170. Conduct disaster recovery drills
Simulate complete infrastructure failure
Execute recovery procedures
Measure actual recovery time
Document lessons learned and improve processes
Day 18: Microservices Architecture
171. Design a microservices architecture
Break monolith into services: user, product, order, payment
Define service boundaries and responsibilities
Design inter-service communication
What principles guide service decomposition?
172. Implement API gateway pattern
Deploy Kong, Traefik, or nginx as API gateway
Route requests to appropriate services
Implement rate limiting and authentication at gateway
Why is API gateway important?
173. Use service discovery for dynamic environments
Implement Consul or etcd for service registry
Register services on startup
Discover service endpoints dynamically
How does this enable flexibility?
174. Implement inter-service authentication
Use JWT tokens for service-to-service auth
Implement mutual TLS (mTLS)
Set up service accounts and permissions
How do you prevent unauthorized service access?
175. Handle distributed transactions
Implement Saga pattern for long transactions
Use compensating transactions for rollbacks
Implement idempotency for all operations
Why is distributed transaction handling complex?
176. Implement circuit breaker pattern
Use libraries like Hystrix or resilience4j
Configure thresholds for circuit opening
Implement fallback responses
How does circuit breaker prevent cascading failures?
177. Use message queues for async communication
Deploy RabbitMQ or Kafka
Implement event-driven architecture
Handle message failures and retries
When should you use async vs sync communication?
178. Implement distributed tracing across services
Instrument all services with tracing
Propagate trace context across service calls
View end-to-end request flows in Jaeger
How does tracing help debug microservices?
179. Handle configuration for multiple services
Use centralized config (Spring Cloud Config, Consul)
Implement config versioning
Allow dynamic config updates
How do you handle secrets in configs?
180. Deploy a complete microservices application
Build: 5+ microservices, API gateway, service mesh, monitoring
Implement all patterns learned
Test inter-service communication
Document the architecture and decisions
Day 19: Cloud Integration
181. Deploy containers to AWS ECS
Create ECS cluster
Define task definitions
Deploy services using Fargate or EC2
Configure load balancer
What are ECS advantages over self-managed?
182. Use AWS ECR for container registry
Create ECR repository
Configure IAM permissions
Push images from CI/CD pipeline
Implement lifecycle policies
How does ECR integrate with ECS?
183. Deploy to Google Cloud Run
Containerize a web application
Deploy to Cloud Run
Configure auto-scaling and concurrency
Set up custom domains
What are Cloud Run's limitations?
184. Use Azure Container Instances
Deploy containers to ACI
Configure networking and persistence
Integrate with Azure services
When would you choose ACI over AKS?
185. Implement secrets management with cloud services
Use AWS Secrets Manager or GCP Secret Manager
Inject secrets into containers at runtime
Rotate secrets automatically
How is this better than environment variables?
186. Set up cloud-based monitoring
Use CloudWatch, Stackdriver, or Azure Monitor
Configure container metrics and logs
Set up alerts and dashboards
What are advantages over self-hosted monitoring?
187. Implement auto-scaling in cloud
Configure horizontal pod autoscaling
Set up cluster autoscaling
Test scaling under load
What metrics should trigger scaling?
188. Use cloud load balancers
Configure ALB (AWS), Cloud Load Balancer (GCP), or Azure LB
Implement health checks
Configure SSL/TLS termination
What's the difference between L4 and L7 load balancers?
189. Implement multi-region deployment
Deploy application to multiple regions
Configure global load balancing
Implement data replication across regions
What are the challenges of multi-region?
190. Calculate cloud costs for containerized workloads
Analyze costs: compute, storage, networking
Compare Fargate vs EC2 costs
Implement cost optimization strategies
How do you allocate costs to teams/projects?
Day 20: Kubernetes Deep Dive - Basics
191. Set up a local Kubernetes cluster
Install minikube or kind
Start cluster and verify with kubectl
Understand control plane and worker nodes
What components run on master vs worker nodes?
192. Understand Pods - the smallest unit
Create a Pod using YAML manifest
Run multi-container Pods
Understand Pod lifecycle states
Why are Pods ephemeral?
193. Use ReplicaSets for scalability
Create ReplicaSet manifest
Scale replicas up and down
Observe self-healing when Pods die
Why don't we use ReplicaSets directly?
194. Deploy applications with Deployments
Create Deployment manifest
Deploy multiple replicas
Update Deployment with new image version
Observe rolling update
What's the relationship between Deployment, ReplicaSet, and Pod?
195. Expose applications with Services
Create ClusterIP service (default)
Create NodePort service
Create LoadBalancer service
Understand service discovery and DNS
When would you use each service type?
196. Use ConfigMaps for configuration
Create ConfigMap from literal values
Create ConfigMap from files
Mount ConfigMap as volume
Inject ConfigMap as environment variables
How do you update running Pods with new config?
197. Manage secrets in Kubernetes
Create Secret for passwords/tokens
Mount Secrets as files
Use Secrets as environment variables
Are Kubernetes Secrets really secure?
What alternatives exist? (Vault, Sealed Secrets)
198. Implement persistent storage with PVs and PVCs
Create PersistentVolume
Create PersistentVolumeClaim
Mount PVC to Pod
Understand storage classes
What happens when a Pod is deleted?
199. Use Namespaces for resource isolation
Create multiple namespaces (dev, staging, prod)
Deploy resources to specific namespaces
Set resource quotas per namespace
How do namespaces improve organization?
200. Understand Kubernetes networking
Every Pod gets an IP
Pod-to-Pod communication
Service discovery through DNS
How does kube-proxy work?
Day 21: Kubernetes Deep Dive - Advanced
201. Implement health checks with probes
Configure liveness probes
Configure readiness probes
Configure startup probes
What happens when probes fail?
Best practices for probe configuration
202. Use DaemonSets for node-level services
Create DaemonSet for logging agent
Understand when to use DaemonSet vs Deployment
Update DaemonSet strategy
What are typical DaemonSet use cases?
203. Run batch jobs with Jobs and CronJobs
Create one-time Job
Create CronJob for scheduled tasks
Configure parallelism and completions
Handle job failures and retries
How do you monitor job execution?
204. Implement StatefulSets for stateful applications
Deploy database using StatefulSet
Understand stable network identity
Use volumeClaimTemplates
What's different about StatefulSet vs Deployment?
205. Configure resource requests and limits
Set CPU and memory requests
Set CPU and memory limits
Understand QoS classes (Guaranteed, Burstable, BestEffort)
What happens when Pod exceeds limits?
206. Implement Horizontal Pod Autoscaling
Install metrics-server
Create HPA based on CPU utilization
Test scaling under load
Configure custom metrics for scaling
What are HPA limitations?
207. Use Ingress for HTTP routing
Install Ingress controller (nginx, Traefik)
Create Ingress resource with routing rules
Configure TLS/SSL with cert-manager
Implement path-based and host-based routing
How does Ingress differ from Service?
208. Implement Network Policies
Create NetworkPolicy to restrict traffic
Allow traffic only from specific Pods/namespaces
Implement default deny policy
Test network isolation
What CNI plugins support NetworkPolicies?
209. Use Init Containers for setup tasks
Create Pod with init containers
Run database migrations before app starts
Download configurations or wait for dependencies
How do init containers differ from regular containers?
210. Configure Pod Security Policies/Standards
Understand Pod Security Standards (Privileged, Baseline, Restricted)
Apply pod security at namespace level
Prevent privileged containers
How does this improve security?
Day 22: Kubernetes - Production Readiness
211. Implement role-based access control (RBAC)
Create ServiceAccounts
Create Roles and ClusterRoles
Create RoleBindings
Test permissions with different users
What's the difference between Role and ClusterRole?
212. Set up cluster monitoring with Prometheus
Deploy Prometheus using Helm
Configure service monitors
Query metrics with PromQL
What metrics are most important to monitor?
213. Deploy Grafana for visualization
Deploy Grafana
Add Prometheus as data source
Import Kubernetes dashboards
Create custom dashboards
What should production dashboards show?
214. Implement centralized logging
Deploy EFK/ELK stack or Loki
Configure log collection from all Pods
Search and filter logs
Set up log retention policies
How much log storage is needed?
215. Use Helm for package management
Install Helm
Deploy applications using Helm charts
Create custom Helm chart
Manage releases and rollbacks
What are Helm's advantages?
216. Implement GitOps with ArgoCD or Flux
Install ArgoCD
Connect Git repository
Deploy applications through Git commits
Observe automatic synchronization
What are GitOps benefits?
217. Set up backup and disaster recovery
Use Velero for cluster backups
Backup cluster resources and volumes
Test restoration to new cluster
What's your backup frequency and retention?
218. Implement multi-tenancy
Use namespaces for tenant isolation
Set resource quotas and limits
Implement network policies between tenants
What are multi-tenancy challenges?
219. Configure cluster auto-scaling
Install cluster autoscaler
Configure min/max node counts
Test scaling with increased load
What's the difference between HPA and cluster autoscaler?
220. Conduct chaos engineering experiments
Install Chaos Mesh or Litmus
Kill random Pods and observe recovery
Introduce network latency
What did you learn about your application's resilience?
Day 23: Advanced DevOps Practices
221. Implement feature flags
Use LaunchDarkly, Unleash, or custom solution
Deploy code with features disabled
Enable features gradually
How do feature flags enable continuous delivery?
222. Set up canary deployments
Deploy new version to small subset (5%)
Monitor metrics and errors
Gradually increase traffic
Rollback if issues detected
What metrics indicate deployment success?
223. Implement progressive delivery with Flagger
Install Flagger and service mesh
Configure automatic canary analysis
Define success metrics
Observe automatic promotion or rollback
How is this better than manual canary?
224. Use infrastructure testing frameworks
Write tests with Terratest or kitchen-terraform
Test infrastructure provisioning
Validate configurations
Run tests in CI/CD
What should infrastructure tests verify?
225. Implement contract testing for microservices
Use Pact or Spring Cloud Contract
Define consumer-provider contracts
Test services against contracts
How do contracts prevent breaking changes?
226. Set up synthetic monitoring
Use tools like Pingdom, Datadog Synthetics
Create monitors for critical user journeys
Alert on synthetic test failures
Why is synthetic monitoring important?
227. Implement SRE principles - SLIs, SLOs, SLAs
Define Service Level Indicators
Set Service Level Objectives
Calculate error budgets
What happens when error budget is exhausted?
228. Use trunk-based development
All developers commit to main branch
Use feature flags for incomplete features
Deploy main branch continuously
What are the benefits and challenges?
229. Implement automated rollback mechanisms
Monitor deployment metrics
Automatically rollback on error rate increase
Configure rollback triggers
How quickly can you detect and rollback?
230. Create a complete CI/CD pipeline with quality gates
Combine: unit tests, integration tests, security scans, performance tests
Implement approval gates for production
Set up deployment windows
Document entire pipeline
Day 24: Configuration Management at Scale
231. Use Ansible for large-scale configuration
Manage 100+ servers with Ansible
Use dynamic inventory (AWS, GCP)
Implement parallel execution
How do you handle failures at scale?
232. Implement configuration drift detection
Monitor for manual changes to infrastructure
Alert when configuration drifts from desired state
Automatically remediate drift
What tools detect drift?
233. Use Consul for service configuration
Deploy Consul cluster
Store configuration in Consul KV
Use Consul Template for dynamic configs
How does configuration propagate?
234. Implement secret rotation
Rotate database passwords automatically
Update secrets in running applications
Zero-downtime secret updates
How often should secrets rotate?
235. Use external secrets operators
Install External Secrets Operator
Sync secrets from Vault/AWS Secrets Manager to Kubernetes
Keep secrets outside cluster
Why is this more secure?
236. Implement policy as code with OPA
Install Open Policy Agent
Write Rego policies for resource validation
Enforce policies on Kubernetes admission
What types of policies should you enforce?
237. Use Kustomize for environment-specific configs
Create base Kubernetes manifests
Create overlays for dev/staging/prod
Use Kustomize to generate final manifests
How does Kustomize differ from Helm?
238. Implement configuration validation
Validate YAML syntax
Validate against schemas
Test configurations before applying
What tools help with validation?
239. Use templating for configuration generation
Use Jinja2, Go templates, or jsonnet
Generate configs from templates and variables
Reduce duplication
When is templating appropriate?
240. Create a configuration management strategy
Document: how configs are stored, versioned, deployed
Define configuration hierarchy
Set up change approval process
What's your rollback strategy?
Day 25: Performance and Cost Optimization
241. Implement resource right-sizing
Analyze actual resource usage
Adjust requests and limits based on data
Use VPA (Vertical Pod Autoscaler) recommendations
How much can you reduce costs?
242. Use spot/preemptible instances
Run fault-tolerant workloads on spot instances
Handle instance interruptions gracefully
Mix spot and on-demand instances
What workloads are suitable for spot?
243. Implement node pools for workload separation
Create node pools: general, CPU-intensive, memory-intensive
Use node affinity to schedule Pods
Optimize instance types per workload
What's the cost impact?
244. Use cluster over-provisioning
Deploy pause Pods as placeholder
Ensure fast scaling for production workloads
Balance cost vs responsiveness
What's the right amount of over-provisioning?
245. Implement workload scheduling optimization
Use pod priority and preemption
Schedule batch jobs on cheaper nodes
Implement pod disruption budgets
How do you balance cost and availability?
246. Monitor and optimize container startup time
Profile startup performance
Optimize application initialization
Use faster base images
How does startup time affect scaling?
247. Implement caching at multiple layers
Application caching (Redis, Memcached)
HTTP caching (CDN, Varnish)
DNS caching
Database query caching
What's the cache hit rate?
248. Use compression for data transfer
Enable gzip compression
Use efficient serialization (Protocol Buffers, Avro)
Compress logs and backups
How much bandwidth can you save?
249. Optimize database performance
Add proper indexes
Implement connection pooling
Use read replicas for read-heavy workloads
Consider caching layer
What queries are slowest?
250. Create a cost optimization report
Analyze current spending
Identify optimization opportunities
Calculate potential savings
Implement top 5 optimizations
Document the results
Day 26: Compliance and Governance
251. Implement audit logging
Enable Kubernetes audit logs
Log all API server requests
Store logs securely long-term
What should audit logs include?
252. Set up compliance scanning
Use tools like kube-bench for CIS benchmarks
Scan for compliance violations
Remediate findings
How often shoul