Course: Containerization and DevOps
Focus: Virtualization, Containers, CI/CD, Cloud-Native Systems
Name: Nitanshu Tak
SapID: 500121943
Course: BTech. CSE (CCVT)
Batch: 2
This repository serves as the master lab repository for the subject
Containerization and DevOps.
The link to the deployed pages for this repository is: https://nitanshu715.github.io/DevOps-Containerization/
Each experiment is organized in its own folder, containing:
This structure reflects real-world DevOps repositories, where infrastructure, automation, and documentation coexist in a clean, scalable manner.
Modern software systems require:
This lab repository demonstrates hands-on implementation of:
A DevOps-oriented comparison between Virtual Machines and Containers using:
This experiment demonstrates:
Link: Experiment 1 — Virtual Machines vs Containers
This experiment covers the fundamentals of Docker including:
Link: Experiment 2 — Docker Installation & Container Lifecycle
This experiment focuses on building custom Docker images using different Linux base images and deploying NGINX inside containers. Base Images Used:
This experiment demonstrates:
Key Implementation:
Link: Experiment 3 — Custom Docker Images (Ubuntu & Alpine Based NGINX)
The experiment was successfully completed by containerizing both a Python Flask application and a Node.js Express application using Docker. The following outcomes were achieved:
Link: Experiment 4 - Docker Networking, Volumes & Environment Variables Lab
Link: Experiment 5 - Docker Networking, Volumes & Environment Variables Lab
A practical session focused on comparing imperative and declarative container deployment using Docker Run and Docker Compose, including single and multi-container applications.
Single container application was deployed using docker run command Container execution was verified using docker ps Application was accessed through browser using port mapping Docker Compose configuration file was created using YAML format Single container deployment was replicated using Docker Compose Multi-container application consisting of WordPress and MySQL was deployed Service dependencies and environment variables were configured Application communication between containers was established Persistent storage concepts were explored using Docker volumes Container lifecycle was managed using compose commands
Link: Experiment 6 - Docker Run vs Docker Compose
A practical session focused on implementing a complete CI/CD pipeline integrating Jenkins and Docker Hub for automated build and deployment of containerized applications.
Application was developed using Flask framework Dockerfile was created to containerize the application Jenkins pipeline was defined using declarative syntax Jenkins was configured to execute pipeline stages successfully Docker image was built automatically using pipeline execution Docker Hub credentials were securely managed within Jenkins Pipeline successfully authenticated with Docker Hub Docker image was pushed to Docker Hub repository Pipeline execution was verified with successful build status End-to-end CI/CD workflow was achieved without errors
Link: Experiment 7 - CI/CD Pipeline using Jenkins and Docker
The experiment was successfully completed by implementing configuration management using Ansible and comparing it with Chef Solo. The following outcomes were achieved:
Ansible was installed and configured successfully on a local control node (WSL Ubuntu). Inventory file was created to define the managed node (localhost). Connectivity was verified using the Ansible ping module. Playbook was developed using YAML to automate installation and configuration of Nginx. Playbook execution completed successfully with zero failures. Nginx service was installed and started using Ansible automation. A 502 Bad Gateway error was encountered and resolved by correcting Nginx configuration. Static web server configuration was implemented for proper content serving. Final output was verified using curl command.
Key concepts demonstrated include: Configuration Management using Ansible Agentless architecture and push-based execution Inventory and Playbook structure Service automation and deployment Real-world debugging and system configuration
Link: Experiment 8 - Configuration Management using Ansible
The experiment was successfully completed by implementing configuration management and automation using Ansible over multiple Docker containers acting as remote servers. The following outcomes were achieved:
Ansible was successfully installed and configured in WSL (Ubuntu). Docker containers were created to simulate multiple remote servers. SSH key-based authentication was established for secure, passwordless access. Ansible inventory file was created to manage multiple nodes. Connectivity between control node and managed nodes was verified using Ansible ping. YAML-based playbook was created and executed successfully. System packages (vim, htop, wget) were installed across all nodes automatically. Configuration file was created on all servers using Ansible automation. Tasks were executed simultaneously on multiple containers without manual login. Idempotency was demonstrated by running the playbook multiple times without unintended changes. Verification was performed using Ansible command module to confirm successful execution. Docker containers were stopped and removed after completion.
Link: Experiment 9 - Ansible Automation with Docker
All objectives of Experiment 10 were successfully completed. The experiment demonstrated a practical and production-oriented understanding of:
End-to-end CI/CD pipeline design and automation Integration of Jenkins with Docker for containerized builds Continuous code quality analysis using SonarQube Cloud Secure credential management using GitHub Secrets (SONAR_TOKEN, DOCKER_TOKEN) Automated Docker image build and push workflow GitHub integration for triggering pipeline execution on code changes Multi-stage pipeline execution (Build → Analyze → Package → Push) Real-time pipeline monitoring and build history tracking in Jenkins Code quality validation using Quality Gates, Issues, and Metrics Handling real-world DevOps challenges (port conflicts, container failures, architecture mismatch)
Link: Experiment 10 – CI/CD Pipeline with Jenkins, Docker & SonarQube
This experiment focuses on implementing container orchestration using Docker Swarm to deploy a multi-container WordPress application with MySQL as the backend. The objective was to understand how Docker Swarm manages services, scaling, load balancing, and fault tolerance in a distributed environment.
The experiment demonstrates:
docker stack deploy, replacing traditional container-based executiondocker service ls and docker psThis experiment highlights core orchestration features such as service-based deployment, scaling, load balancing, and self-healing, which are essential for modern cloud-native applications.
Link: Experiment 11 — Docker Swarm Orchestration
This experiment builds upon container orchestration concepts by implementing Kubernetes as a more advanced orchestration platform. The objective was to deploy, manage, and scale a containerized WordPress application using Kubernetes resources such as Deployments and Services.
The experiment demonstrates:
kubectl commandskubectl get pods and related commandsThis experiment demonstrates Kubernetes as a declarative, scalable, and self-healing orchestration system, highlighting its ability to manage containerized applications in a production-like environment.
Link: Experiment 12 — Kubernetes Orchestration
A date-wise practical session focused on understanding and implementing core DevOps foundations through hands-on exercises using:
Link: Class Practical 21 Jan
A date-wise practical session focused on exploring Docker core concepts and managing containers through hands-on classroom implementation using:
Link: Class Practical 22 Jan
A date-wise practical session focused on understanding Docker networking concepts and working with multiple containers through hands-on classroom exercises using:
Link: Class Practical 23 Jan
A date-wise practical session focused on understanding Docker data persistence concepts and managing storage using hands-on classroom implementation through:
Link: Class Practical 27 Jan
A date-wise practical session focused on learning Docker Compose and deploying multi-container applications through structured classroom exercises using:
Link: Class Practical 28 Jan
A date-wise practical session focused on understanding Dockerfile instructions and building custom Docker images through hands-on classroom implementation using:
Link: Class Practical 30 Jan
A practical session focused on verifying Docker Desktop setup, testing Docker Engine connectivity through CLI and REST API, and deploying a production-ready Nginx container through hands-on implementation using:
Link: Class Practical 3 Feb
A hands-on practical session focused on configuring Docker Engine, enabling Remote API communication, and validating daemon connectivity through CLI and UNIX socket testing using:
Link: Class Practical 4 Feb
A hands-on class test focused on containerizing a Python-based SAP ID verification application using Docker, demonstrating real-world application packaging and execution inside containers through implementation using:
Link: Class Practical Test 5 Feb
A hands-on practical session focused on executing a containerized Python application using Docker volume mounting for dynamic runtime execution, demonstrating real-world development workflow through implementation using:
Link: Class Practical 6 Feb
A hands-on practical session focused on compiling and running a containerized C application using Docker volume mounting for dynamic runtime execution, demonstrating multi-language container workflows through implementation using:
Link: Class Practical 6 Feb Assignment
A hands-on practical series focused on building, running, and optimizing containerized C applications using Docker. This included runtime execution using volume mounts and production-level image optimization using multi-stage builds and minimal scratch runtime images. The practical demonstrated real-world container development workflows through implementation using:
Link: Class Practical 10 Feb
A hands-on practical session focused on implementing enterprise-grade Docker container build workflows using multi-stage builds for Java applications. This practical demonstrated real-world production container optimization by separating build and runtime environments, reducing image size, and improving container security using non-root user implementation through execution using:
Link: Class Practical 10 Feb Assignment
A hands-on practical session focused on implementing Docker storage mechanisms using named volumes and bind mounts to enable persistent data management between host and container environments. This practical demonstrated real-world container storage workflows through implementation using:
Link: Class Practical 11 Feb
A hands-on practical session focused on implementing advanced Docker storage management by performing volume data backup, restoration, and inspection using TAR-based archival and named Docker volumes. This practical demonstrated real-world container storage backup and disaster recovery workflows through implementation using:
Link: Class Practical 11 Feb Assignment
This class focused on understanding Docker storage mechanisms by working with named volumes, bind mounts, and tmpfs mounts, along with implementing persistent storage for a MySQL container.
Link: Class Practical 12 Feb
This class focused on understanding Docker networking concepts by working with default bridge networks, creating custom user-defined bridge networks, and enabling inter-container communication.
Link: Class Practical 18 Feb
This lab focused on understanding Docker networking from basic container communication to advanced Swarm-based networking, including overlay networks, service scaling, and macvlan configuration.
Link: Class Practical 20 Feb
This class practical demonstrated the fundamental concepts of Docker image management and container lifecycle operations.
Link: Class Practical 23 Feb
This class practical successfully demonstrated the working of Docker Compose for both single-container and multi-container applications. Using Docker Compose:
Link: Class Practical 25 Feb
This experiment demonstrated how Docker Compose can scale services easily using the –scale flag.
Link: Class Practical 26 Feb
A practical session focused on setting up a local Kubernetes cluster using k3d and performing core orchestration tasks including deployment, service exposure, scaling, and verification.
Kubernetes cluster was successfully created locally using k3d Cluster connectivity was configured and verified using kubectl Node status was validated and confirmed in Ready state Nginx application was deployed using a Kubernetes Deployment Pods were automatically created and managed by the Deployment Service was exposed using NodePort for external access Application scaling was performed to run multiple replicas Deployment state and configuration were verified using describe Container logs were inspected for runtime validation Port forwarding was used to enable browser access Application output was successfully verified in browser
This practical demonstrates fundamental Kubernetes operations including cluster setup, deployment, scaling, service exposure, and debugging.
Link: Class Practical 18 Mar
A practical session focused on deploying an application in Kubernetes, managing pods, scaling deployments, exposing services, and verifying outputs using kubectl commands.
Application was deployed using Kubernetes Deployment resource Pods were automatically created and managed by the Deployment controller Deployment was scaled to multiple replicas demonstrating horizontal scaling Service was exposed using NodePort for external communication Application was accessed using port-forwarding in local environment Deployment configuration and state were verified using describe command Container logs were inspected for runtime validation All cluster resources were validated using kubectl get all Common errors were identified and resolved during execution
This practical demonstrates core Kubernetes concepts including deployment, scaling, service exposure, and debugging workflows.
Link: Class Practical 19 Mar
A practical session focused on Docker container management and deploying Portainer for GUI-based container orchestration.
Docker environment was verified using CLI commands
Kubernetes context was checked and validated
Portainer volume was created for persistent storage
Portainer container was deployed and verified running
Web interface was accessed securely via HTTPS
Admin configuration and local Docker environment setup completed
Containers, images, volumes, and networks were managed through GUI
Real-time monitoring and container inspection were performed
Minikube limitations were identified in certain environments
This practical demonstrates Docker container management and GUI-based orchestration using Portainer.
Link: Class Practical 20 Mar
A practical session focused on deploying and managing an Apache web server on Kubernetes, covering pod lifecycle, deployment management, service exposure, scaling, debugging, and live container modification.
Apache application was deployed using both Pod and Deployment approaches Pod behavior and lifecycle were verified using Kubernetes CLI commands Application was accessed locally using port-forwarding Deployment was created to manage pods in a controlled and scalable manner Service was exposed to enable network access to the application Application scaling was performed to run multiple replicas Failure scenario was simulated using incorrect image configuration Deployment was debugged and restored to a healthy state Live container content was modified using exec command Self-healing capability was verified by deleting pods and observing automatic recreation
This practical demonstrates real-world Kubernetes capabilities including deployment control, scaling, debugging, and self-healing mechanisms.
Link: Class Practical 25 Mar
A practical session focused on understanding and implementing imperative and declarative approaches in Kubernetes by deploying and managing an NGINX application.
Deployment was created using imperative command-based approach Application resources were verified using kubectl commands YAML configuration file was generated using dry-run method Deployment configuration was modified using declarative YAML approach Existing deployment was replaced using declarative configuration Multiple replicas were created using replica configuration Deployment state and behavior were verified using describe Application was accessed using port forwarding Scaling operation was performed to increase number of pods Resources were cleaned up after execution
This practical demonstrates the difference between imperative and declarative models and highlights the importance of declarative configuration in Kubernetes for scalability, reproducibility, and version control.
Link: Class Practical 27 Mar
A practical session focused on deploying Jenkins using Docker and performing initial CI/CD server setup including configuration, persistence, and validation.
Jenkins server was successfully deployed using Docker Compose Container was created and managed using Docker runtime Port mapping was configured to expose Jenkins on localhost Persistent storage was implemented using Docker volumes Jenkins was accessed through browser and initial setup was completed Admin password was retrieved from container for authentication Plugins were installed to enable CI/CD functionality User account was created and dashboard was configured Container logs were verified to ensure proper execution
This practical demonstrates containerized CI/CD server setup, persistent storage handling, and basic Jenkins configuration using Docker.
Link: Class Practical 1 Apr
A practical session focused on configuring Git, setting up SSH authentication with GitHub, and performing version control operations including repository initialization, branching, and remote integration.
Git global configuration was set for user identity SSH key pair was generated using ED25519 algorithm Public key was added to GitHub for secure authentication SSH connection to GitHub was successfully verified Local repository was initialized and initial commit was created Branching workflow was implemented using a feature branch Files were staged, committed, and managed using Git Remote repository was connected using SSH protocol Code was successfully pushed to GitHub for both main and feature branch
This practical demonstrates secure GitHub authentication, efficient version control workflows, and branch-based development using Git.
Link: Class Practical 7 Apr
A practical session focused on core Git workflows including cloning a repository, committing changes, working with branches, and merging feature work.
Repository was cloned from GitHub to local system Branch information was inspected using Git commands Files were created, staged, and committed to the repository Commit history was analyzed using log and graph view Feature branch was created to simulate development workflow Changes were made and committed within the feature branch Branch divergence was observed through commit history Feature branch was merged back into main branch Final changes were pushed and organized within repository
This practical demonstrates fundamental Git operations including version control, branching strategies, commit tracking, and merging workflows.
Link: Class Practical 9 Apr
This practical demonstrates the implementation of an end-to-end CI/CD pipeline by containerizing a FastAPI application and automating its build and deployment using GitHub Actions.
Link: Class Practical 10 Apr
Operating Systems:
- Ubuntu Linux
- Windows (Host)
Virtualization:
- Oracle VirtualBox
- Vagrant
Containerization:
- Docker Engine
- Docker CLI
Networking & Services:
- Nginx
DevOps Concepts:
- Infrastructure as Code (IaC)
- Automation
- CI/CD
- Cloud-Native Architecture
By completing all experiments in this repository, the learner will be able to:
# Clone repository
git clone https://github.com/<your-username>/containerization-and-devops-lab.git
# Navigate to an experiment
cd experiment-01-vm-vs-container
# Read experiment-specific documentation
cat README.md
This repository reflects:
The structure and workflow mirror professional DevOps projects, making this repository suitable for academic evaluation as well as portfolio use.
Name: Nitanshu Tak
Program: B.Tech Computer Science Engineering
Specialization: Cloud Computing & Virtualization Technology
Focus Areas: DevOps · Cloud · Automation · Linux
This repository is not just a lab submission —
it is a foundation for real DevOps engineering practices.
Build it. Improve it. Ship it.