Join today
Write your awesome label here.

Docker and Kubernetes: The Complete Course

Go from containerization beginner to confident practitioner with hands-on training in Docker and Kubernetes. Learn to build optimized images, orchestrate complex deployments, and manage cloud-native applications with the industry's most in-demand tools.
🏅 Included in the PRO membership!
Write your awesome label here.

302 Lectures

Comprehensive Knowledge

33 Hours

Video Duration

130+ Labs

Focus on Practice

Course Certificate

Validate Your Learning
What you are going to learn

Transform Your Career with Real-World Container Orchestration Skills

This course takes you from understanding why containers matter to deploying production applications on managed Kubernetes clusters in Google Cloud. You will start by mastering Docker fundamentals: building efficient images, managing containers, and implementing security best practices. From there, you will progress to Kubernetes, where you will learn pod management, deployments, services, persistent storage, resource management, and security configurations including RBAC and network policies.

By the end of this course, you will be able to architect containerized applications, automate deployments with declarative configurations, manage stateful and stateless workloads, and deploy secure, scalable applications to real cloud infrastructure. You will leave with a solid understanding of how these tools work under the hood, how to diagnose common issues, and how to make informed architectural decisions that hold up in production environments.

By completing this course, you will be able to:

  • Build Docker images using Dockerfiles
  • Optimize container images with multi-stage builds
  • Orchestrate multi-container applications with Docker Compose
  • Publish and distribute images using Docker Hub
  • Deploy applications to Kubernetes using Pods
  • Scale workloads with Deployments and ReplicaSets
  • Expose applications using Kubernetes Services
  • Persist data with Volumes and PersistentVolumeClaims
  • Run stateful applications using StatefulSets
  • Manage application configuration with ConfigMaps and Secrets
  • Organize cluster resources using Namespaces and Labels
  • Control resource allocation with quotas and limits
  • Implement health monitoring with liveness and readiness probes
  • Secure clusters with RBAC and Network Policies
  • And much more!

Course Contents

01

Course Introduction

Welcome and Motivation!
02:13
How to Make Best Use of this Course
05:45
Aligning Expectations
03:47
Let's Stay Connected!
00:28
Course Resources
00:52

02

[Docker] Introduction to Containers

This section provides a comprehensive introduction to Docker fundamentals, establishing the foundational knowledge needed to understand container technology. The learning objectives include understanding why containers are valuable by comparing deployment approaches with and without them, exploring the key benefits of containerization such as simplified setup, portability, consistent environments, isolation, and resource efficiency, comparing containers with virtual machines to understand when to use each technology, and examining the core Docker components (Docker client, Docker host, Docker daemon, image cache, and image registries) and how they interact during common operations like running containers and pushing images.
Section Introduction
01:15
Why Using Containers?
07:47
Containers and Virtual Machines (VMs)
05:54
Docker Architecture and Components
07:28

03

[Docker] Installing Docker and Necessary Tools

This section covers the foundational setup required to work with Docker across multiple operating systems and introduces essential supporting tools. The learning objectives include installing Docker Desktop on Windows (with WSL2 integration), macOS, and Linux through the Docker Engine, understanding Docker configuration and post-installation setup to run containers without elevated privileges, exploring alternative cloud-based Docker environments, and installing complementary development tools including Node.js, Postman API client, and Visual Studio Code IDE. By the end of this section, learners will have a fully configured Docker environment and all necessary tools to follow along with subsequent course lectures and develop applications.
Section Introduction
01:11
[MacOS Users] Installing Docker on MacOS
01:32
[Linux Users] Installing Docker on Linux
04:44
[Linux Users] Running Docker without Sudo
02:28
[Windows Users] Note about enabling the WSL Windows feature
00:47
[Windows Users] Installing Windows Subsystem for Linux (WSL)
03:54
[Windows Users] Windows Subsystem for Linux Features
06:10
[Windows Users] Installing Docker in Windows
02:27
[Windows Users] Using Docker in Windows Subsystem for Linux (WSL)
01:51
Exploring Play with Docker
02:42
Installing NodeJS
01:25
Installing Postman
02:31
Installing Visual Studio Code
02:10

04

[Docker] Running Containers with Docker

This section provides a comprehensive introduction to Docker fundamentals, focusing on practical hands-on experience with containers and the Docker CLI. The learning objectives include understanding how to run containers, managing the container lifecycle through different states, mastering essential Docker CLI commands for managing both images and containers, exploring logging and shell access within containers, and introducing the Docker build process with Dockerfiles. Students will learn to work with both short-lived and long-lived containers, handle port mapping, use filtering and bulk operations, and create custom Docker images, building a foundation for effective Docker container management and development.
Section Introduction
01:23
Hands-On: Running Your First Container
08:13
The Container Lifecycle
06:33
Hands-On: Working with the Docker CLI - Part 1
11:34
Hands-On: Working with the Docker CLI - Part 2
09:47
Hands-On: Getting Help in the Docker CLI
03:32

05

[Docker] Project - Customizing NGINX Containers

This section introduces Docker fundamentals through a hands-on project focused on customizing an NGINX server container. The learning objectives include understanding how to pull and run Docker images with specific version tags, executing commands interactively within a running container, and modifying container files. By completing this foundational project, learners gain practical experience with essential Docker workflows while also learning about key limitations of manual container modifications, including lack of scalability, non-persistent storage, and the need for better configuration management approaches to handle real-world scenarios.
Project Overview
01:38
Running NGINX Containers
02:37
Modifying the Contents of Our NGINX Container
05:33
Project Conclusion
02:17

06

[Docker] Introduction to Docker Images

This section focuses on mastering Docker images and container registries, which are foundational concepts for working effectively with Docker. The learning objectives include understanding what Docker images are and their purpose, exploring container registries and their various implementations, learning to browse and use Docker Hub, managing images with the CLI, creating and building Dockerfiles, and clarifying the critical distinction between images and containers. Through practical demonstrations and deep dives into Docker's architecture, this section equips learners with the knowledge to build custom images, publish them to registries, and manage containers efficiently throughout their development and deployment workflows.
Section Introduction
01:18
What Are Docker Images?
05:59
Container Registries
07:31
Hands-On: Introduction to DockerHub
03:58
Hands-On: Logging Into DockerHub in the Docker CLI
05:20
Hands-On: Managing Images with the Docker CLI
08:20
Introduction to Dockerfiles
07:25
Hands-On: Creating Our First Dockerfile for Nginx
08:01
Hands-On: Copying Local Files Into Our Image
08:27
Hands-On: Images vs. Containers
10:47

07

[Docker] Project - Containerize an Express App

This section focuses on the fundamentals of Docker containerization through a practical hands-on approach. The learning objectives include understanding Docker image creation using Dockerfiles, building containers from images, and mastering the complete lifecycle of containerizing applications. Using a Node.js Express backend API as the example application, students learn core Docker concepts such as setting working directories, installing dependencies, copying source code, and running applications within containers. The section emphasizes the importance of understanding container management operations including starting, stopping, pausing, and removing containers, while exploring how containerization provides consistent environments for application deployment.
Project Introduction
00:43
Create a Hello World Express App
07:37
Save and Return Users in Memory
05:19
Test Users App
03:25
Dockerize Our Express App
08:31
Explore Interacting with Containers + Project Cleanup
05:37

08

[Docker] Images Deep Dive

This section covers advanced Docker image building techniques and optimization strategies. The section's learning objectives include understanding Docker's layered architecture and how each instruction creates a layer, mastering build contexts and .dockerignore files to optimize what gets sent to the Docker daemon, managing environment variables through multiple methods (Dockerfile ENV, CLI flags, and .env files), differentiating between CMD and ENTRYPOINT instructions and how they work together, implementing multi-stage builds for efficient image construction, leveraging distroless images for enhanced security, and applying various optimization strategies to reduce both image size and build time through base image selection, instruction ordering, and installing only necessary runtime dependencies.
Section Introduction
01:33
Bundled Code from "Containerize Express App" Section
00:21
Hands-On: Docker’s Layered Architecture
06:51
Hands-On: Build Contexts
08:36
Hands-On: Skipping files with Dockerignore
07:49
Hands-On: Introduction to Environment Variables
10:41
Hands-On: Setting Environment Variables via the CLI
07:55
Hands-On: Setting Environment Variables via Files
06:59
Hands-On: CMD vs. ENTRYPOINT
10:30
Introduction to Distroless Images
03:42
Hands-On: Motivation to Multistage Dockerfiles
08:08
Hands-On: Multistage Dockerfiles and Distroless Images
09:04
Hands-On: Adding Typescript to Our Express App
11:14
Hands-On: Update Dockerfile to Transpile Typescript Code
09:42
Hands-On: Optimizing Images - The Role of Base Images
18:22
Hands-On: Optimizing Images - The Role of Instruction Order
08:18
Hands-On: Optimizing Images - The Role of Dependencies
11:07
Hands-On: Revisiting and Optimizing Our Typescript Dockerfile
08:37

09

[Docker] Project - Containerize React App

This section covers containerizing a React application using Docker with a focus on multistage builds. Students will learn how to create a React application using Create React App, understand the development vs. production build process, write a multistage Dockerfile that builds the React application and serves it through Nginx, and explore real-world deployment strategies like zero-downtime deployments. The primary learning objectives are to master multistage Docker builds for complex applications, understand how static files are served in production, and see how Docker can manage both the build and runtime stages of an application lifecycle.
Project Introduction
00:53
IMPORTANT! What to do if you face an error with create-react-app
03:19
Initializing the React App
06:08
Build and Serve the React App
04:07
Create a Dockerfile for Our React App - Part 1
07:36
Create a Dockerfile for Our React App - Part 2
07:39

10

[Docker] Volumes and Data Persistence

This section focuses on Docker volumes and data persistence, covering the fundamental concepts and practical applications of volume management. Learners will understand the limitations of container-level data storage, explore different volume types (bind mounts and named volumes), and gain hands-on experience managing volumes through the Docker CLI. The section emphasizes how volumes enable data persistence beyond container lifecycles, facilitate data sharing between containers, and support scalable application architectures. By the end, students will be able to differentiate between volume types and effectively manage data in containerized environments.
Section Introduction
00:47
Bundled Code from "Containerize React App" Section
00:19
Hands-On: Why Do We Need Volumes?
03:55
Introduction to Volumes
02:48
IMPORTANT! Hot Reloading Fix
01:28
Hands-On: Bind Mounts
11:11
Hands-On: Named Volumes
10:01
Hands-On: Managing Volumes with the CLI
07:02

11

[Docker] Advanced Topics - Resource Management, Restart Policies, and Networking

This section covers advanced Docker topics focused on resource management, container lifecycle policies, and networking infrastructure. The learning objectives include understanding how to set CPU and memory limits to protect the Docker host from runaway containers, implementing restart policies to ensure container availability, and mastering Docker networking through both default and user-defined networks. Students will learn practical techniques for constraining container resources, managing container failures, and enabling inter-container communication while maintaining security and isolation.
Section Introduction
01:03
Hands-On: Setting CPU Limits for Containers
10:37
Hands-On: Setting Memory Limits for Containers
11:27
Hands-On: Restart Policies
10:26
Introduction to Networking in Docker
04:04
Hands-On: The Default Bridge Network
05:56
Hands-On: User-Defined Networks
08:01
Hands-On: The Host Network
05:05

12

[Docker] Project - Code and Deploy a Key-Value App with Data Persistence

This section covers building a complete key-value REST API using Docker, implementing multi-container architecture with Express.js for the backend and MongoDB for data persistence. Students learn essential Docker concepts including containers, volumes for data persistence, user-defined networks for inter-container communication, and shell scripts for container management. The project progresses from database setup with authentication to implementing a full CRUD API with proper error handling, environment configuration, and testing data persistence and cleanup procedures. Key learning objectives include understanding containerization best practices, managing microservices, configuring databases in containers, setting up networked services, and building production-ready Node.js applications within Docker environments.
Project Introduction
02:58
Running a MongoDB Server
07:24
Adding Root Credentials to MongoDB
08:38
Adding Credentials for the Key-Value Database
07:23
Defining Ports, Volumes, and Networks
11:52
Improving the Structure of Our Utility Scripts
15:35
Setting Up the Express App
10:58
Dockerizing the Express App
04:13
Create Scripts to Initialize the Backend Container
11:05
Adding Hot Reloading with Nodemon
04:39
Defining the API Routes
07:56
Creating and Getting Key-Value Pairs
11:07
Updating and Deleting Key-Value Pairs
06:45
Testing the Application and Final Cleanup
04:28

13

[Docker] Docker Compose

focuses on Docker Compose, a powerful tool for managing multi-container applications in a declarative way. The learning objectives include understanding the benefits and use cases of Docker Compose, learning how to define and manage services, volumes, networks, and environment variables through YAML configuration files, managing the application lifecycle with start/stop/delete operations, handling service dependencies to ensure correct startup order, configuring hot reloading for development workflows, and mastering the Docker Compose CLI for efficient project management. By the end of this section, learners will be able to orchestrate complex multi-container applications with a single configuration file and manage them effectively across development, testing, and production environments.
Section Introduction
01:06
Docker Compose Overview
07:13
Docker-Compose vs. Compose CLI Commands
01:42
Hands-On: Run MongoDB with Docker Compose
06:30
Hands-On: Environment Variables in Docker Compose
03:48
Hands-On: Bind Mounts in Docker Compose
06:42
Hands-On: Volumes and Networks in Docker Compose
04:57
Hands-On: Adding a Backend Service to Our Docker Compose File
02:39
Hands-On: Service Dependencies in Docker Compose
03:53
Hands-On: Hot Reloading and Watching for Changes
06:11
Hands-On: Docker Compose CLI
10:39
Hands-On: Getting Help with Docker Compose CLI
02:50

14

[Docker] Project - Code and Deploy a Notes App with Docker Compose

This section builds a complete Notes Rest API microservices architecture using Docker and Docker Compose. The section covers containerizing two independent services (Notebooks and Notes) with a shared database layer, configuring an NGINX reverse proxy to route requests, and implementing full CRUD REST APIs for both services. Students learn advanced Docker concepts including multistage builds, service networking, Docker Compose file inclusion, and handling service resilience and validation when services may be temporarily unavailable. The project demonstrates production-ready patterns for orchestrating multiple containerized services, managing their dependencies, and ensuring proper communication between services.
Project Introduction
04:34
Setup NPM Projects
06:44
Dockerize the Notebooks Backend
04:45
Setup Docker Compose for Notebooks Services
11:41
Setup Docker Compose for Notes Services
08:11
Use Multistage Builds for Our Images
11:47
Merging Multiple Projects in Docker Compose
05:15
Implement the NGINX Reverse Proxy
09:03
Establish the Connections between Services
07:47
Setup Models and Routes for the Notebooks Service
06:20
Implement Routes to Create and Retrieve Notebooks
07:17
Implement Routes to Update and Delete Notebooks
08:58
Code Refactorings
07:57
Implement Routes and Business Logic in the Notes Backend
08:57
Storing Notebook IDs in the Notes Service - Part 1
07:56
Storing Notebook IDs in the Notes Service - Part 2
09:54
Storing Notebook IDs in the Notes Service - Part 3
04:35

15

[Kubernetes] 10.000-Foot Overview

This section provides a comprehensive introduction to Kubernetes fundamentals, covering what Kubernetes is, why it's essential for production workloads, and how it works. The learning objectives include understanding container orchestration and Kubernetes advantages over Docker (including container scheduling, load balancing, auto-scaling, self-healing, service discovery, and configuration management); understanding Kubernetes architecture with its control plane (containing API server, scheduler, controller manager, etcd store, and cloud controller manager) and data plane with worker nodes; understanding core components like kubelet, container runtime, and kube-proxy; and learning to use kubectl CLI for interacting with Kubernetes clusters through imperative and declarative resource management.
Section Introduction
01:14
Why Use Kubernetes?
05:41
What Is Kubernetes?
04:23
Kubernetes Architecture
04:25
The Control Plane
08:12
The Data Plane
04:14
The kubectl CLI
03:08

16

[Kubernetes] Installing Tools

This section covers the essential setup and installation phase for Kubernetes development environments across different operating systems. The learning objectives include: installing kubectl (the Kubernetes command-line interface) on macOS, Linux, and Windows systems; understanding kubectl versioning and compatibility requirements with Kubernetes server versions; installing and configuring Minikube to create local Kubernetes clusters; and verifying proper cluster connectivity through kubectl commands. These foundational tools and configurations enable learners to interact with Kubernetes clusters locally and understand the relationship between kubectl client versions and Kubernetes server versions.
[MacOS Users] Installing Kubectl in MacOS
05:01
[MacOS Users] Installing Minikube in MacOS
05:44
[Linux Users] Installing Kubectl in Linux
03:36
[Linux Users] Installing Minikube in Linux
03:50
[Windows Users] Installing Kubectl in Windows Subsystem for Linux (WSL)
03:38
[Windows Users] Installing Minikube in Windows Subsystem for Linux (WSL)
03:42

17

[Kubernetes] Running Containers in Kubernetes

This section introduces the fundamental concepts of Kubernetes pods, their lifecycle, and pod management using kubectl. The learning objectives covered include understanding pods as the smallest deployable units in Kubernetes, managing pod creation and deletion with kubectl commands, examining pod lifecycle phases (pending, running, succeeded, failed), implementing pod restart policies and exponential backoff mechanisms, exposing pods via services for stable DNS resolution and communication, and building the complete workflow from Dockerfile to running pods in a Kubernetes cluster.
Section Introduction
01:17
Introduction to Pods
04:08
The Pod Lifecycle
08:15
Hands-On: Creating Pods with Kubectl
04:06
Hands-On: Managing Pods with Kubectl
08:17
Hands-On: Exposing Pods via Services
06:29
Hands-On: Color API - Implement v1.0.0
06:48
Hands-On: From Dockerfiles to Pods
08:04

18

[Kubernetes] Object Management and YAML Manifests

This section introduces Kubernetes object management with YAML configuration files. The learning objectives covered include: understanding three approaches to managing Kubernetes objects (imperative with kubectl commands, imperative with configuration files, and declarative with configuration files), exploring the structure and syntax of Kubernetes manifest files, writing YAML configuration for common objects like pods and services, understanding the differences between imperative and declarative management approaches including their respective advantages and limitations, using kubectl create, replace, apply, and delete commands, leveraging the dry-run flag to generate configuration files, migrating from imperative to declarative management, and organizing multiple objects within single manifest files or directories.
Section Introduction
01:45
Object Management in Kubernetes
10:18
Kubernetes Manifest Files
04:51
Hands-On: Working with Imperative Commands - Part 1
05:45
Hands-On: Working with Imperative Commands - Part 2
08:21
Hands-On: Generating Kubernetes Manifests with kubectl
03:40
Hands-On: Shortcomings of Imperative Commands with Configuration Files
08:46
Hands-On: Declarative Object Management in Kubernetes
08:40
Hands-On: Migrating from Imperative to Declarative Object Management
02:48
Hands-On: Creating Multiple Kubernetes Manifests in the Same YAML File
05:28

19

[Kubernetes] ReplicaSets and Deployments

This section covers the fundamental concepts of managing pods at scale in Kubernetes through replica sets and deployments. Learning objectives include understanding how replica sets maintain a desired number of pod replicas, identifying their limitations in managing pod updates, exploring how deployments extend replica sets with rolling update capabilities, debugging failed rollouts, and scaling deployments dynamically.
Section Introduction
00:56
What Are ReplicaSets?
05:29
Hands-On: Creating and Managing ReplicaSets
06:10
Hands-On: Shortcomings of ReplicaSets - Updating Pods
06:00
Hands-On: Shortcomings of ReplicaSets - Managing Existing Pods
07:06
Introduction to Deployments
07:03
Hands-On: Creating and Managing Deployments
06:52
Hands-On: Updating the Pod Template
04:42
Hands-On: Understanding Rollouts
12:09
Hands-On: Scaling Deployments with Kubectl
03:22
Hands-On: Troubleshooting Failed Rollouts
10:39

20

[Kubernetes] Services Deep Dive

This section on Kubernetes Services covers the fundamentals of service types and their role in facilitating cluster communication. Students will learn about four service types: Cluster IP (for internal cluster communication with stable IP addresses), Node Port (for external access via node IP and port), External Name (for mapping to external DNS names), and Load Balancer (deferred to later sections). The core learning objectives include understanding how services abstract pod IP addresses to provide stable endpoints, how Cluster IP services perform load balancing across pods, how Node Port services expose applications externally, and how External Name services enable communication with external services. Practical demonstrations show service creation, traffic routing, DNS resolution via CoreDNS, and the difference between accessing services internally versus externally.
Section Introduction
01:12
Overview of Services
06:52
Hands-On: Color API - Implement v1.1.0: Add hostname information
08:35
Hands-On: Traffic Generator - Implement v1.0.0
11:35
Hands-On: Deploy the Color API and Traffic Generator
08:23
Hands-On: Working with ClusterIP Services
12:54
Hands-On: Working with NodePort Services
07:15
Hands-On: NodePort Services in Linux
07:03
Hands-On: Working with ExternalName Services
05:23

21

[Kubernetes] Resource Management

This section covers essential resource management concepts in Kubernetes. Learning objectives include understanding labels and selectors for identifying and grouping resources across the cluster, annotations for adding metadata and configuration information to objects, namespaces for isolating resources and enabling multi-environment deployments with cross-namespace service communication, resource quotas and resource requests/limits for managing CPU and memory allocation to prevent resource starvation, and health probes (startup, liveness, and readiness) for maintaining container health and lifecycle management.
Section Introduction
01:24
Labels and Selectors
06:59
Hands-On: Labels and Selectors in Kubectl
05:55
Hands-On: Selecting Objects with MatchLabels and MatchExpressions
09:37
Annotations
04:11
Introduction to Namespaces
08:39
Hands-On: Creating and Managing Namespaces
11:57
Hands-On: Cross-Namespace Service Communication
06:25
Introduction to Resource Quotas, Requests, and Limits
07:14
Hands-On: Working with Resource Quotas
07:12
Hands-On: Setting Resource Requests and Limits
05:46
Hands-On: Rollouts, Resource Requests and Limits
11:22
Introduction to Startup, Liveness, and Readiness Probes
05:51
Hands-On: Color API - Implement v1.2.0: Add health endpoints
07:44
Hands-On: Startup Probes in Details
07:48
Hands-On: Color API - Implement v1.2.1: Add dedicated startup endpoint
01:45
Hands-On: Liveness Probes in Details
03:18
Hands-On: Readiness Probes in Details
12:00

22

[Kubernetes] Storage and Persistence

This section covers essential concepts for managing persistent storage in Kubernetes. The learning objectives include understanding how persistent storage is handled in Kubernetes at a high level, working with emptyDir volumes for temporary ephemeral storage within pods, exploring persistent volumes (PVs) and persistent volume claims (PVCs) with local and dynamically provisioned storage, understanding the configuration and lifecycle of PVs and PVCs, and learning about StatefulSets and headless services for managing stateful applications with stable pod identities and DNS entries.
Section Introduction
01:30
Introduction to Volumes
08:54
EmptyDir and Local Volumes
03:55
Hands-On: Working with EmptyDir Ephemeral Storage
14:32
Introduction to Persistent Volume Claims
06:54
Hands-On: Creating Persistent Volumes and Persistent Volume Claims
14:34
Hands-On: Mounting Volumes in Pods and Containers
10:31
Hands-On: Deleting Persistent Volumes and Persistent Volume Claims
05:50
Hands-On: Dynamically Provisioning Persistent Volumes
10:24
Introduction to StatefulSets
05:12
Hands-On: Working with StatefulSets - Creating Persistent Volumes
06:52
Hands-On: Working with StatefulSets - Creating the StatefulSet
13:43
Quick Note: Delete StatefulSets, PVCs, and PVs from Previous Lectures
00:29
Hands-On: StatefulSets with Dynamically Provisioned Persistent Volumes
05:04
Hands-On: Headless Services
12:10

23

[Kubernetes] Configuration Management

This section covers configuration management in Kubernetes through ConfigMaps and Secrets as native mechanisms for decoupling configuration and sensitive data from application code. Learning objectives include understanding ConfigMaps for non-sensitive data storage in key-value pairs with a one megabyte size limit, passing ConfigMap data via environment variables and volume mounts, creating and managing ConfigMaps and Secrets in Kubernetes, recognizing that Secrets store data in base64 encoding (not encryption) and require RBAC protections, and mounting both ConfigMaps and Secrets as containers files or environment variables while understanding namespace requirements and access control implications.
Section Introduction
00:58
Introduction to ConfigMaps
05:15
Hands-On: Color API - Implement v1.3.0: Receive color information externally
04:36
Hands-On: Passing Information from ConfigMaps via Environment Variables
13:46
Hands-On: Mounting ConfigMaps as Volumes
15:14
Introduction to Secrets
03:04
Hands-On: Passing Information from Secrets via Environment Variables
09:23
Hands-On: Mounting Secrets as Volumes
07:01

24

[Kubernetes] Project - Deploying a MongoDB Database

This section covers implementing persistent data storage for a Kubernetes-based color API application using MongoDB. The learning objectives include deploying a MongoDB StatefulSet with a headless service and persistent volume claims to enable dynamic volume provisioning, creating configuration maps and secrets for database initialization and secure credential management, refactoring a Node.js Express color API application to accept database connection parameters via environment variables and establish connections using Mongoose, implementing database persistence and CRUD operations for color data, and deploying the updated color API alongside MongoDB to demonstrate stateful and stateless application patterns in Kubernetes.
Project Overview
04:03
Create Database Credentials
06:18
Create Headless Service and ConfigMaps
05:34
Create the StatefulSet
09:41
Deploy and Validate the StatefulSet
06:17
Test Scaling the StatefulSet
07:19
Color API - Implement v2.0.0: Refactoring the Code
16:04
Color API - Implement v2.0.0: Persist Data in the MongoDB Database
12:00
Color API - Implement v2.0.0: Implement Database Connection Logic
02:58
Color API - Implement v2.0.0: Implement Routes for Business Logic
11:02
Deploy the New Color API Version
15:39
Project Wrap-Up and Clean-Up
12:50

25

[Kubernetes] Security Fundamentals

This section covers Kubernetes security fundamentals, focusing on practical security mechanisms and controls for protecting clusters and applications. The learning objectives include understanding role-based access control (RBAC) with roles, cluster roles, and their bindings to users, groups, and service accounts; exploring the Kubernetes API structure and API groups for defining access control rules; creating and managing service accounts for pod-to-API authentication; regulating network traffic through network policies for ingress and egress control; and enforcing pod security standards to ensure workloads meet security best practices.
Section Introduction
02:02
Introduction to Security in Kubernetes
07:01
Role-Based Access Control (RBAC)
08:55
Hands-On: Overview of Minikube’s Roles and ClusterRoles
12:14
The Kubernetes API
08:36
Hands-On: Exploring API Resources
08:56
Hands-On: Creating Two Users: Alice and Bob
11:14
Hands-On: Configure Access Credentials for Alice and Bob
07:34
Hands-On: Setup Permissions to Read Pods
11:04
Hands-On: Use ClusterRoles for Cluster-Wide Permissions
07:41
Hands-On: Exploring Subresources and Permissions
04:43
Introduction to Service Accounts
04:26
Hands-On: Default Service Accounts
06:15
Hands-On: Creating Our Own Service Accounts
09:21
Hands-On: RBAC - Clean-Up
03:31
Introduction to Network Policies
06:43
Calico vs. Native Kubernetes Network Policies
02:04
Hands-On: Deny All Ingress Traffic
10:55
Hands-On: Allow Traffic Between Specific Pods
06:16
Hands-On: Exploring Pod Selectors
05:42
Hands-On: Combining Pod Selectors
09:29
Hands-On: Handling Egress Traffic
11:42
Hands-On: Network Policies and Namespaces
02:32
Introduction to Pod Security Standards (PSS)
05:31
Hands-On: Working with Pod Security Standards
12:28
Hands-On: Exploring the Pod Security Standards Documentation
02:16

26

[Kubernetes] Kustomize

This section covers Kustomize, a declarative tool for customizing and managing Kubernetes resources in YAML format. Key learning objectives include understanding Kustomize fundamentals and its role in managing configurations across environments; leveraging bases and overlays to define shared resource configurations and apply environment-specific customizations; applying common transformations such as namespace assignment, name prefixes/suffixes, labels, and annotations; generating ConfigMaps and Secrets dynamically from files and environment variables; and mastering patching techniques including inline patches, strategic merge patches, and JSON patches to achieve fine-grained resource customization without duplicating manifests.
Section Introduction
01:22
Introduction to Kustomize
06:55
Update: Deprecation of commonLabels
00:55
Hands-On: Our First Kustomize Project
08:25
Bases and Overlays
02:43
Hands-On: Creating the Dev and Prod Overlays
07:52
Transformations
04:20
Hands-On: Working with Transformations
10:14
Hands-On: Generating ConfigMaps
09:22
Hands-On: Generating Secrets
06:28
Hands-On: Introduction to Patching
08:54
Hands-On: Working with Strategic Merge Patches
06:32
Hands-On: Working with JSON Patches
10:15

27

[Kubernetes] Project - Deploying Our Color API to Google Kubernetes Engine (GKE)

This section provides a comprehensive guide to deploying a production-ready color API application across two environments (dev and prod) in Google Kubernetes Engine. Learners will understand how to set up a Google Cloud account with free trial credits, provision and configure an autopilot GKE cluster, deploy stateful applications using MongoDB with persistent storage, integrate managed cloud services with Kubernetes, implement network policies for secure communication, configure ingress and TLS certificates, and leverage Kustomize for managing environment-specific configurations across multiple Kubernetes namespaces.
Project Overview
04:02
Creating a Google Cloud Platform (GCP) Account
06:54
Overview of Project Costs
03:15
Overview of GCP’s UI Console
09:18
Installing the gcloud CLI
03:57
Exploring the GKE UI Console
02:05
Create a Google Kubernetes Engine (GKE) Cluster
07:37
Connecting kubectl and GKE
05:47
Deploying an Nginx-based Website
08:31
Exploring Storage Classes in GKE
09:03
Exploring API Resources in GKE
02:42
Create Database Credentials for MongoDB
06:35
Deploy the MongoDB StatefulSet - Part 1
05:59
Deploy the MongoDB StatefulSet - Part 2
10:07
Deploy the MongoDB StatefulSet - Part 3
13:01
Deploy the Color API Application
05:00
Create a LoadBalancer Service for External Access
03:34
Color API - Implement v2.1.0-dev: Expose Prometheus Metrics
03:40
Customize Database Deployments
14:38
Deploy Prod Overlay and Customize Dev Color API Image
04:44
Deny All Ingress and Allow Traffic Between Color API and MongoDB
09:13
Allow External Traffic into Color API Pods
04:51
Register Our Website Domain
03:46
Allocate Static IPs for Ingress
05:32
Create Ingress Objects
06:24
Create Managed TLS Certificates
04:30
Test Ingress Traffic from the Web Towards the Color API Pods
03:46
Project Cleanup
05:37

28

[Kubernetes] Conclusion

Conclusion and Wrap-Up
00:23
Certificate of Completion

Frequently asked questions

Who is this course designed for?

This course is designed for multiple technical roles:
  • Software Engineers and Developers who want to modernize their deployment workflows and build cloud-native applications will gain the containerization skills needed to package applications with all dependencies and deploy them consistently across any environment.
  • DevOps Engineers and Platform Engineers seeking to deepen their container orchestration expertise will learn advanced Kubernetes patterns including StatefulSets, custom resource management, RBAC implementation, and multi-environment deployments with Kustomize.
  • System Administrators and IT Professionals transitioning to cloud-native infrastructure will understand how to migrate traditional applications to containers, manage resources efficiently, and implement security policies in Kubernetes clusters.
  • Technical Leads and Architects evaluating container technologies for their organizations will gain the deep technical knowledge needed to make informed architectural decisions about when and how to implement Docker and Kubernetes in production systems.

What prior knowledge do I need before taking this course?

You should have familiarity with any programming language to understand the application examples used throughout the course. Basic comfort with running commands in the terminal and using the command line is highly recommended, as you will be working extensively with Docker and kubectl command-line tools.
No prior knowledge of Docker or Kubernetes is required. The course starts from the fundamentals and builds your knowledge progressively through hands-on exercises.

What software or hardware do I need for the hands-on labs?

Operating System: You can complete this course on macOS, Linux, or Windows. The course includes installation instructions for all three platforms.
Required Softare:
  • Docker Desktop (free for personal use) or Docker Engine
  • kubectl command-line tool (installation covered in the course)
  • Minikube or another local Kubernetes environment (installation covered in the course)
  • A code editor (Visual Studio Code, Sublime Text, or similar)
  • Git for version control
Hardware Requirements:
  • At least 8GB of RAM (16GB recommended for running local Kubernetes clusters smoothly)
  • At least 20GB of free disk space for Docker images and Kubernetes resources
  • A modern CPU with virtualization support enabled
All installation steps are covered in dedicated lectures with separate instructions for each operating system.

Will I incur costs from the cloud provider while taking this course?

The majority of the course can be completed entirely for free using local tools like Docker Desktop and Minikube.

Optional Cloud Costs: 
The final project section deploys an application to Google Kubernetes Engine (GKE), which may incur minimal costs. However, Google Cloud offers a generous free tier with $300 in credits for new users, which is more than sufficient to complete the project. If you carefully follow the cleanup instructions provided at the end of the project, your costs should remain within the free tier.

The course includes detailed guidance on creating your Google Cloud account and activating free credits, understanding cost estimates before deploying resources, and properly
 cleaning up resources to avoid unexpected charges.

Does this course cover Helm for Kubernetes package management?

This course focuses on core Kubernetes concepts and native tools to build a solid foundation. We cover Kustomize extensively for managing configurations across multiple environments, which is a native Kubernetes solution that provides powerful customization capabilities without requiring external templating languages.

We do offer a complete Helm course, and the deep understanding you will gain of Kubernetes manifests, deployments, services, ConfigMaps, and Secrets will prepare you well to learn it quickly!

Do I need to know Go to succeed in this course?

No, you do not need to know Go. The course uses Node.js with Express for application examples, which are simple enough to follow even if you are not a Node.js expert. The focus is on containerizing and deploying applications, not on complex application development.

The concepts you learn apply to applications written in any language including Python, Java, Go, Ruby, PHP, and others. Docker and Kubernetes are language-agnostic tools, so the skills you acquire will transfer directly to whatever programming languages your projects use.

We use cookies to provide you with an optimal experience and relevant communication. Learn more or accept individual cookies.

Necessary

Necessary cookies (First Party Cookies) are sometimes called "strictly necessary" as without them we cannot provide the functionality that you need to use this website. For example, essential cookies help remember your preferences as you navigate through the online school.

Functional

Functional cookies enable this website to provide enhanced functionality and personalization, by remembering information you have entered and choices you make. These preferences are remembered through the use of persistent cookies, so that you will not have to set them again the next time you visit the website.

Analytics

Analytics cookies track information about visits on our website so that we can measure and improve its performance, as well as optimize our course content. These cookies help us analyze user behavior by tracking the number of visits, how visitors use the website, which site or page they come from and how long they are staying for.

Marketing

Marketing cookies are used to deliver advertising material relevant to you and your interests. They are also used to limit the number of times you see an advertisement, resulting to more targeted advertising, as well as help us measure the effectiveness of our campaigns. They are usually placed by advertising networks we collaborate with, with our permission.