DevOps-Containerization

Containerization & DevOps Lab

Master Repository for All Experiments


Course: Containerization and DevOps
Focus: Virtualization, Containers, CI/CD, Cloud-Native Systems


Name: Nitanshu Tak
SapID: 500121943
Course: BTech. CSE (CCVT)
Batch: 2

About This Repository

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.


Why This Repository Exists

Modern software systems require:

This lab repository demonstrates hands-on implementation of:


Lab Experiments Performed

Experiment 1 — Virtual Machines vs Containers

A DevOps-oriented comparison between Virtual Machines and Containers using:

This experiment demonstrates:

Link: Experiment 1 — Virtual Machines vs Containers

Experiment 2 — Docker Installation & Container Lifecycle

This experiment covers the fundamentals of Docker including:

Link: Experiment 2 — Docker Installation & Container Lifecycle

Experiment 3 — Custom Docker Images (Ubuntu & Alpine Based NGINX)

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)

Experiment 4 - Containerization using Dockerfile, .dockerignore, Tagging & Publishing

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

Experiment 5 - Containerization using Dockerfile, .dockerignore, Tagging & Publishing

Link: Experiment 5 - Docker Networking, Volumes & Environment Variables Lab

Experiment 6 — Docker Run vs Docker Compose

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

Experiment 7 — CI/CD Pipeline using Jenkins and Docker

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

Experiment 8 — Configuration Management using Ansible (Chef Solo vs Ansible)

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

Experiment 9 — Ansible Automation with Docker (WSL-Based Setup)

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

Experiment 10 — CI/CD Pipeline using Jenkins, Docker & SonarQube

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

Experiment 11 — Container Orchestration using Docker Swarm

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:

This 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


Experiment 12 — Container Orchestration using Kubernetes (Minikube)

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:

This 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


Class Practicals performed

Class Practical — 21 January (DevOps Fundamentals & Setup)

A date-wise practical session focused on understanding and implementing core DevOps foundations through hands-on exercises using:

Link: Class Practical 21 Jan

Class Practical — 22 January (Docker Basics & Container Management)

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

Class Practical — 23 January (Docker Networking & Multi-Container Basics)

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

Class Practical — 27 January (Docker Volumes & Persistent Storage)

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

Class Practical — 28 January (Docker Compose & Multi-Service Deployment)

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

Class Practical — 30 January (Dockerfile Creation & Image Building)

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

Class Practical — 3 Feb (Docker Installation Verification & Nginx Deployment)

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

Class Practical — 4 Feb (Docker Engine Configuration & Remote API Access)

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

Class Practical Test — 5 Feb (Containerizing Python SAP ID Verification Application)

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

Class Practical — 6 Feb (Running Python Application Using Docker Volume Mount (Continuous Runtime))

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

Class Practical — 6 Feb Assignment (Running C Application Using Docker Volume Mount (Runtime Compilation & Continuous Execution))

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

Class Practical — 10 Feb (C Application Containerization & Optimization)

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

Class Practical — 10 Feb Assignment (Multi-Stage Build for Java Application with Secure Runtime Container)

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

Class Practical — 11 Feb (Docker Volume Management & Data Persistence)

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

Class Practical — 11 Feb Assignment (Volume Backup, Restore & Inspection Using TAR & Named Volumes)

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

Class Practical — 12 Feb (Docker Volumes, Bind Mounts, tmpfs & MySQL Persistence)

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

Class Practical — 18 Feb (Docker Networking — Bridge, Custom Network & Container Communicatione)

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

Class Practical — 20 Feb (Docker Swarm & Advanced Networking Lab — Bridge, Overlay, Services & Macvlan)

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

Class Practical — 23 February (Docker Image Management & Container Lifecycle)

This class practical demonstrated the fundamental concepts of Docker image management and container lifecycle operations.

Link: Class Practical 23 Feb

Class Practical — 25 Feb (Docker Compose – Nginx & WordPress with MySQL)

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

Class Practical — 26 Feb (Scaling Services using Docker Compose)

This experiment demonstrated how Docker Compose can scale services easily using the –scale flag.

Link: Class Practical 26 Feb

Class Practical — March 18 (Kubernetes Setup using k3d)

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

Class Practical - March 19 (Kubernetes Deployment & Service Exposure)

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

Class Practical - March 20 (Docker & Portainer Setup)

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

Class Practical - March 25 (Apache Web Application on Kubernetes)

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

Class Practical - March 27 (Imperative vs Declarative Deployment)

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

Class Practical — April 1 (Jenkins on Docker)

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

Class Practical — April 7 (Git & GitHub SSH Setup)

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

Class Practical — April 9 (Git Workflow and Branching)

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

Class Practical — 10 Apr (FastAPI CI/CD Pipeline — Docker & GitHub Actions Integration)

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


Technologies & Tools Used

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

Learning Outcomes

By completing all experiments in this repository, the learner will be able to:


How to Use This Repository

# 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

DevOps Mindset Demonstrated

This repository reflects:

The structure and workflow mirror professional DevOps projects, making this repository suitable for academic evaluation as well as portfolio use.


Future Enhancements


Author

Name: Nitanshu Tak Program: B.Tech Computer Science Engineering
Specialization: Cloud Computing & Virtualization Technology
Focus Areas: DevOps · Cloud · Automation · Linux


Final Note

This repository is not just a lab submission —
it is a foundation for real DevOps engineering practices.

Build it. Improve it. Ship it.