This repository contains the example project designed as laboratory exercises for the 'Containers and Microservices' course at Collin College.
The repository is structured to take you through a comprehensive, step-by-step journey: from modeling traditional monolithic applications to deploying a modern, resilient, multi-service application stack on a Kubernetes cluster.
The entire course progression is managed through separate Git branches. To begin a lab, check out the corresponding branch (e.g., git checkout lab-01).
| Branch Name | Description |
|---|---|
main |
Main branch containing the general README and tools |
lab-01 |
Monolithic Architecture Application |
lab-02 |
Microservices Architecture Application |
lab-02-fix |
Fixing the Microservices Application (manual approach) |
lab-03 |
Managing Containers with Commands (manual approach) |
lab-04 |
Creating Images Using Running Containers (manual approach) |
lab-05 |
Improving Image Efficiency (Single Image Source) |
lab-06 |
A More Automated Approach (Containerfiles) |
lab-07 |
The Unified Image Pattern (ENTRYPOINT) |
lab-08 |
Making Data Persistent (Volumes) |
lab-09 |
Isolate the Application (Bridge Networking) |
lab-10 |
Troubleshooting the Application |
lab-11 |
Securing our Application (Secrets Management) |
lab-12 |
Using Compose for the Pharmacy Application |
lab-13 |
Running Applications in Kubernetes |
The series of labs demonstrates the fundamental shift required for modern application management, moving from brittle, tightly-coupled code to secure, scalable microservices.
Key Operational & Security Lessons Learned
-
Immutability: Images are single sources of truth. Changes are never applied to running containers; instead, a new, clean image version is built and deployed.
-
Persistence vs. Immutability: Data must be externalized from the container’s volatile filesystem and placed into a dedicated Volume to survive crashes and restarts.
-
Security: Secrets are never stored in source code or environment variables.
-
Isolation: Moving from the insecure Host Network to a dedicated Bridge Network is crucial for preventing container conflicts.
-
Orchestration: Tools like Compose and Kubernetes are necessary to manage the lifecycle, networking, and scaling of multiple interconnected services automatically.
