Docker & Containers\n\n## Containerization Fundamentals\n\nWhat youโll learn:\n- Container concepts\n- Docker basics (images, containers)\n- Dockerfile creation\n- Docker Compose\n- Multi-stage builds\n- Container orchestration intro\n- Best practices\n\nTime: 90-120 minutes#
1. Why Containers?\n\n### The Problem\n\nTraditional:\n\n\"It works on my machine!\"\n\nDeveloper: Python 3.10, Ubuntu 20.04\nProduction: Python 3.8, CentOS 7\nโ Different behavior, bugs in production\n\n\nWith Containers:\n\nSame image runs everywhere:\n- Developer laptop\n- CI/CD pipeline\n- Production servers\n- Cloud platforms\n#
Containers vs VMs\n\n\nโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ\nโ Container โ โ VM โ\nโ โโโโโโโฌโโโโโโ โ โ โโโโโโโโโโโโ โ\nโ โApp 1โApp 2โ โ โ โ App โ โ\nโ โโโโโโโดโโโโโโ โ โ โโโโโโโโโโโโค โ\nโ โโโโโโโโโโโโโ โ โ โGuest OS โ โ\nโ โContainer โ โ โ โโโโโโโโโโโโ โ\nโ โ Runtime โ โ โ โโโโโโโโโโโโ โ\nโ โโโโโโโโโโโโโ โ โ โHypervisorโ โ\nโ โโโโโโโโโโโโโ โ โ โโโโโโโโโโโโ โ\nโ โ Host OS โ โ โ โโโโโโโโโโโโ โ\nโ โโโโโโโโโโโโโ โ โ โ Host OS โ โ\nโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ\n Lightweight Resource Heavy\n Start in ms Start in minutes\n MB in size GB in size\n#
2. Docker Basics\n\n### Installation\n\nbash\n# Ubuntu/Debian\ncurl -fsSL https://get.docker.com | sh\n\n# Add user to docker group (no sudo needed)\nsudo usermod -aG docker $USER\n\n# Verify\ndocker --version\ndocker run hello-world\n#
Core Concepts\n\nImage: Blueprint (like a class)\nContainer: Running instance (like an object)\n\nbash\n# Pull image from Docker Hub\ndocker pull python:3.11\n\n# List images\ndocker images\n\n# Run container\ndocker run python:3.11 python --version\n\n# Run interactively\ndocker run -it python:3.11 bash\n\n# Run in background (detached)\ndocker run -d nginx\n\n# List running containers\ndocker ps\n\n# List all containers\ndocker ps -a\n#
3. Creating Docker Images\n\n### Dockerfile\n\nSimple Python app:#
# Create sample app\n!mkdir -p docker_demo\n!cat > docker_demo/app.py << 'EOF'\nfrom flask import Flask\napp = Flask(__name__)\n\n@app.route('/')\ndef hello():\n return 'Hello from Docker!'\n\nif __name__ == '__main__':\n app.run(host='0.0.0.0', port=5000)\nEOF\n\n!cat > docker_demo/requirements.txt << 'EOF'\nFlask==2.3.0\nEOF\n\nprint('โ
Created app files')
# Create Dockerfile\n!cat > docker_demo/Dockerfile << 'EOF'\n# Base image\nFROM python:3.11-slim\n\n# Set working directory\nWORKDIR /app\n\n# Copy requirements\nCOPY requirements.txt .\n\n# Install dependencies\nRUN pip install --no-cache-dir -r requirements.txt\n\n# Copy application\nCOPY app.py .\n\n# Expose port\nEXPOSE 5000\n\n# Run application\nCMD [\"python\", \"app.py\"]\nEOF\n\nprint('โ
Created Dockerfile')
Build and Run\n\nbash\n# Build image\ndocker build -t my-app:1.0 .\n\n# Run container\ndocker run -d -p 5000:5000 --name myapp my-app:1.0\n\n# Test\ncurl http://localhost:5000\n\n# View logs\ndocker logs myapp\n\n# Stop container\ndocker stop myapp\n\n# Remove container\ndocker rm myapp\n#
5. Docker Compose\n\n### Multi-Container Apps\n\ndocker-compose.yml:#
!cat > docker_demo/docker-compose.yml << 'EOF'\nversion: '3.8'\n\nservices:\n web:\n build: .\n ports:\n - \"5000:5000\"\n environment:\n - DATABASE_URL=postgresql://db:5432/myapp\n depends_on:\n - db\n \n db:\n image: postgres:15\n environment:\n - POSTGRES_PASSWORD=secret\n - POSTGRES_DB=myapp\n volumes:\n - postgres_data:/var/lib/postgresql/data\n \n redis:\n image: redis:7-alpine\n \nvolumes:\n postgres_data:\nEOF\n\nprint('โ
Created docker-compose.yml')