Development Tools


Docker and Kubernetes: The Complete Guide

Build, test, and deploy Docker applications with Kubernetes while learning production-style development workflows

4.64 (35630 reviews)



22 hours


Jan 2021

Last Update
Regular Price

What you will learn

Learn Docker from scratch, no previous experience required

Master the Docker CLI to inspect and debug running containers

Build a CI + CD pipeline from scratch with Github, Travis CI, and AWS

Understand the purpose and theory of Kubernetes by building a complex app

Automatically deploy your code when it is pushed to Github!


If you're tired of spinning your wheels learning how to deploy web applications, this is the course for you.

CI+CD Workflows? You will learn it.  AWS Deployment? Included.  Kubernetes in Production? Of course!

This is the ultimate course to learn how to deploy any web application you can possibly dream up.  Docker and Kubernetes are the newest tech in the Dev Ops world, and have dramatically changed the flow of creating and deploying web apps.  Docker is a technology that allows applications to run in constructs called 'containers', while Kubernetes allows for many different 'containers' to run in coordination.

Docker from Scratch!

In this course you'll learn Docker from absolute fundamentals, beginning by learning the answer to basic questions such as "What is a container?" and "How does a container work?".  From the very first few lectures, we will do a deep dive on the inner workings of containers, so you get a core understanding of exactly how they are implemented.  Once you understand what a container is, you'll learn how to work with them using basic Docker CLI commands.  After that, you'll apply your new-found mastery of the Docker CLI to build your own custom images, effectively 'Dockerizing' your own personal applications. 

CI + CD Pipelines

Of course, no course on Docker would be complete without a full understanding of common Continuous Integration and Continuous Deployment patterns.  You will learn how to implement a full CI + CD workflow using Github, Travis CI, and Amazon Web Services, creating a pipeline that automatically deploys your code every time you push your latest changes to Github!

Multi-Container Deployments on AWS!

After building a deployment pipeline, you'll apply it to master both single-container and multi-container deployments on Amazon Web Services.  You will construct a multi-container application utilizing Node, React, Redis, and Postgres, and see the amazing power of containers in action (Note: all Javascript coding in this course is optional, the full source code is provided if you don't want to write JS).


Finally, you will tackle Kubernetes, a production-grade system for managing complex applications with many different running containers.  You will learn the right way to build a Kubernetes Cluster - this course doesn't have any of those annoying "don't do this in production" comments!  You will first build a Kubernetes Cluster on your local machine, then eventually move it over to a cloud provider.  You'll even learn how to set up HTTPS on Kubernetes, which is harder than it sounds!

Here's what you'll do:

  • Learn Docker from scratch, no previous experience required

  • Build your own custom images tailored to your applications

  • Master the Docker CLI to inspect and debug running containers

  • Understand how Docker works behind the scenes, and what a container is

  • Build a CI + CD pipeline from scratch with Github, Travis CI, and AWS

  • Automatically deploy your code when it is pushed to Github!

  • Build a complex multi-container application from scratch and deploy it to AWS

  • Understand the purpose and theory of Kubernetes

  • Deploy a production-ready Kubernetes Cluster to Google Cloud


Docker and Kubernetes: The Complete Guide
Docker and Kubernetes: The Complete Guide
Docker and Kubernetes: The Complete Guide
Docker and Kubernetes: The Complete Guide


Dive Into Docker!

Finished Code Repositories and Diagrams

Why Use Docker?

What is Docker?

Docker for Mac/Windows

Installing Docker on MacOS

Installing Docker for Windows Home users

Windows 10 Pro and Enterprise Docker Desktop v2.2 Issues

Installing Docker for Windows - Professional and Enterprise Editions

More Windows Setup - Professional and Enterprise Editions

One Last Piece of Windows Setup - Professional and Enterprise Editions

Installing Docker on Linux

Using the Docker Client

But Really...What's a Container?

How's Docker Running on Your Computer?

Manipulating Containers with the Docker Client

Docker Run in Detail

Overriding Default Commands

Listing Running Containers

Container Lifecycle

Restarting Stopped Containers

Removing Stopped Containers

Retrieving Log Outputs

Stopping Containers

Multi-Command Containers

Executing Commands in Running Containers

The Purpose of the IT Flag

Getting a Command Prompt in a Container

Starting with a Shell

Container Isolation

Building Custom Images Through Docker Server

Creating Docker Images

Building a Dockerfile

Dockerfile Teardown

What's a Base Image?

The Build Process in Detail

A Brief Recap

Rebuilds with Cache

Tagging an Image

Manual Image Generation with Docker Commit

Making Real Projects with Docker

Project Outline

Node Server Setup

Completed Server Code

A Few Planned Errors

Base Image Issues

A Few Missing Files

Copying Build Files

Container Port Mapping

Specifying a Working Directory

Unnecessary Rebuilds

Minimizing Cache Busting and Rebuilds

Docker Compose with Multiple Local Containers

App Overview

App Server Code

Completed Node Code

Assembling a Dockerfile

Introducing Docker Compose

Docker Compose Files

Networking with Docker Compose

Docker Compose Commands

Stopping Docker Compose Containers

Container Maintenance with Compose

Automatic Container Restarts

Container Status with Docker Compose

Creating a Production-Grade Workflow

Development Workflow

Flow Specifics

Docker's Purpose

Project Generation

npx Create React App Generation

More on Project Generation

Necessary Commands

Creating the Dev Dockerfile

Duplicating Dependencies

Starting the Container

Quick Note for Windows Users

Docker Volumes

Windows 10 Pro and Enterprise Docker Desktop v2.2 Issues

Fix for ENOENT: no such file or directory, open '/app/package.json

Bookmarking Volumes fix for Windows

Bookmarking Volumes

Shorthand with Docker Compose

Overriding Dockerfile Selection

Do We Need Copy?

Executing Tests

Live Updating Tests

Docker Compose for Running Tests

Tests Not Re-running on Windows

Shortcomings on Testing

Need for Nginx

Multi-Step Docker Builds

Implementing Multi-Step Builds

Running Nginx

Continuous Integration and Deployment with AWS

Services Overview

Github Setup

Travis CI Setup

Travis YML File Configuration

Fix for Failing Travis Builds

A Touch More Travis Setup

Automatic Build Creation

AWS Elastic Beanstalk

More on Elastic Beanstalk

Travis Config for Deployment

Fix for Missing bucket_name error

Travis Script Fix for access_key_id

Automated Deployments

Exposing Ports Through the Dockerfile

AWS Build Still Failing?

Workflow With Github

Redeploy on Pull Request Merge

Deployment Wrapup

Environment Cleanup

Building a Multi-Container Application

Single Container Deployment Issues

Application Overview

A Quick Note

Application Architecture

Worker Process Setup

Express API Setup

Connecting to Postgres

More Express API Setup

npx Create React App Generation

Generating the React App

Fetching Data in the React App

Rendering Logic in the App

Exporting the Fib Class

Routing in the React App

"Dockerizing" Multiple Services

Checkpoint Files

Checkpoint Catchup

Dockerizing a React App - Again!

Dockerizing Generic Node Apps

Adding Postgres as a Service

Docker-compose Config

Postgres Database is uninitialized or getaddrinfo ENOTFOUND Fix

Environment Variables with Docker Compose

The Worker and Client Services

Nginx Path Routing

Routing with Nginx

Building a Custom Nginx Image

Starting Up Docker Compose

Nginx connect() failed - Connection refused while connecting to upstream

Fix for "I Calculated Nothing Yet" message

Troubleshooting Startup Bugs

Opening Websocket Connections

A Continuous Integration Workflow for Multiple Images

Production Multi-Container Deployments

Production Dockerfiles

Multiple Nginx Instances

Altering Nginx's Listen Port

Nginx fix for React Router

Cleaning Up Tests

Github and Travis CI Setup

Fix for Failing Travis Builds

Travis Configuration Setup

Pushing Images to Docker Hub

Successful Image Building

Multi-Container Deployments to AWS

Multi-Container Definition Files

Finding Docs on Container Definitions

Adding Container Definitions to DockerRun

More Container Definitions

Forming Container Links

Creating the EB Environment

Managed Data Service Providers

Overview of AWS VPC's and Security Groups

RDS Database Creation

ElastiCache Redis Creation

Creating a Custom Security Group

Applying Security Groups to Resources

Setting Environment Variables

IAM Keys for Deployment

Travis Script Fix for access_key_id

Fix for Missing bucket_name error

Travis Deploy Script

Container Memory Allocations

Verifying Deployment

A Quick App Change

Making Changes

Cleaning Up AWS Resources

AWS Configuration Cheat Sheet

Onwards to Kubernetes!

The Why's and What's of Kubernetes

Kubernetes in Development and Production

New Minikube Install Instructions

Minikube Setup on MacOS

Minikube Setup on Windows Pro/Enterprise

Minikube Setup on Windows Home

Minikube Setup on Linux

Docker Desktop's Kubernetes instead of Minikube

Mapping Existing Knowledge

Adding Configuration Files

Object Types and API Versions

Running Containers in Pods

Service Config Files in Depth

Connecting to Running Containers

The Entire Deployment Flow

Imperative vs Declarative Deployments

Maintaining Sets of Containers with Deployments

Updating Existing Objects

Declarative Updates in Action

Limitations in Config Updates

Running Containers with Deployments

Deployment Configuration Files

Walking Through the Deployment Config

Applying a Deployment

Why Use Services?

Scaling and Changing Deployments

Updating Deployment Images

Rebuilding the Client Image

Triggering Deployment Updates

Imperatively Updating a Deployment's Image

Multiple Docker Installations

Reconfiguring Docker CLI

Why Mess with Docker in the Node?

A Multi-Container App with Kubernetes

The Path to Production

Checkpoint Files

A Quick Checkpoint

Recreating the Deployment

NodePort vs ClusterIP Services

The ClusterIP Config

Applying Multiple Files with Kubectl

Express API Deployment Config

Cluster IP for the Express API

Combining Config Into Single Files

The Worker Deployment

Reapplying a Batch of Config Files

Creating and Applying Redis Config

Last Set of Boring Config!

The Need for Volumes with Databases

Kubernetes Volumes

Volumes vs Persistent Volumes

Persistent Volumes vs Persistent Volume Claims

Claim Config Files

Persistent Volume Access Modes

Where Does Kubernetes Allocate Persistent Volumes?

Designating a PVC in a Pod Template

Fix for Postgres CrashLoopBackOff Error on Windows Pro

Applying a PVC

Defining Environment Variables

Adding Environment Variables to Config

Creating an Encoded Secret

Postgres Environment Variable Fix

Passing Secrets as Environment Variables

Environment Variables as Strings

Handling Traffic with Ingress Controllers

Load Balancer Services

A Quick Note on Ingresses

One Other Quick Note!

Behind the Scenes of Ingress

More Behind the Scenes of Ingress

Optional Reading on Ingress Nginx

Setting up Ingress Locally with Minikube

Setting up Ingress with Docker Desktop's Kubernetes

Ingress Fix / "this.state.seenIndexes.map is not a function" Fix

Creating the Ingress Configuration

Testing Ingress Locally

The Minikube Dashboard

Docker Desktop's Kubernetes Dashboard

Kubernetes Production Deployment

The Deployment Process

Google Cloud vs AWS for Kubernetes

Creating a Git Repo

Linking the Github Repo to Travis

Free Google Cloud Credits

Creating a Google Cloud Project

Linking a Billing Account

Kubernetes Engine Init

Creating a Cluster with Google Cloud

Don't Forget to Cleanup!

Kubernetes Dashboard on Google Cloud

Travis Deployment Overview

Installing the Google Cloud SDK

Generating a Service Account

Running Travis CLI in a Container

iv undefined Open SSL Error Fix

Encrypting a Service Account File

More Google Cloud CLI Config

Fix For Failing Travis Builds

Running Tests with Travis

Custom Deployment Providers

Unique Deployment Images

Unique Tags for Built Images

Updating the Deployment Script

Configuring the GCloud CLI on Cloud Console

Creating a Secret on Google Cloud

Helm v3 Update

Helm v2 Update

Helm Setup

Kubernetes Security with RBAC

Assigning Tiller a Service Account

Ingress-Nginx with Helm

The Result of Ingress-Nginx

Finally - Deployment!

Did I Really Type That?

Verifying Deployment

A Workflow for Changing in Prod

Merging a PR for Deployment

That's It! What's Next?

HTTPS Setup with Kubernetes

HTTPS Setup Overview

Domain Purchase

Domain Name Setup

Fix for Cert Manager Breaking Changes

Cert Manager Install

How to Wire Up Cert Manager

Issuer Config File

Certificate Config File

Deploying Changes

Verifying the Certificate

Ingress Config for HTTPS

It Worked!

Google Cloud Cleanup

Local Environment Cleanup

Local Development with Skaffold

Awkward Local Development

Installing Skaffold

The Skaffold Config File

Live Sync Changes

Automatic Shutdown

Testing Live Sync with the API Server




Jonatan9 October 2020

The Docker webpage and the application is not named the same, neither is the design intact. Maybe you should take an hour of work and update the videos showing the download and the program, using the newer versions

Sakshi6 October 2020

The docker concepts have been explained in a very easy way for beginners. It's difficult cramming all the commands without proper explanation as given by Stephen.

Anurag5 October 2020

Stephen is really great at explaining things! Love the draw.io diagrams. This course would definitely give you a very good understanding of docker & kubernetes ecosystem. Most importantly, it features an active QnA section and the Stephen tries really hard to keep the contents updated so that all the instructions continue to work! Definitely recommended!

H.5 October 2020

Leuke cursus. Alles wordt duidelijk verteld en uitgelegd. En je wordt ook gestimuleerd om de documentatie van de verschillende onderdelen te lezen. En aan het eind van de cursus heb je een werkend project. Alleen heb ik het idee dat de cursus al wat ouder is. En dat een aantal technieken ondertussen vernieuwd zijn.

Gary2 October 2020

Excellent course as always from Mr Grider. My only grumble is that some of the content was repetitive and certain sections could have been speeded up by using copy/paste/modify...which, I suggest, is what most devs would do.

Yasin2 October 2020

It's great to learn how to setup production-grade pipelines and see different technologies working in sync.

Mirza27 February 2020

Best Docker tutorial so far. Worth the money, for sure. Explains everything in detail, even the basics of the basics. Well done, mate.

Katie20 February 2020

Very detailed without being laborious. Speed of progress is good, and the comparisons used to demonstrate and explain technical concepts were well executed, and super helpful!

Alexander20 February 2020

Pace is good. Regular breaks means it's not overwhelming, and the shorter videos mean if I already know a topic I'm comfortable skipping the video without missing key information on a topic I don't know!

Marcell18 February 2020

Great course! Maybe a little too much detail on AWS related stuff, but that is also explained with good diagrams.

Francis15 February 2020

I absorbed the lessons far better with mistakes were intentionally made first then debugging it after. It is a refreshing take on video lessons compared with other videos. Please don't change your style.

Michael15 February 2020

This course is about Docker, not about React, Express or other Javascript frameworks. A lot of time was wasted on developing applications which most people in the audience would have no idea whether or not they are going to actually work. In fact, the author himself made mistakes and omissions and made up for them (or didn't) in other sections. It was a pretty frustrating experience. I am a busy professional and I have limited time for doing personal training so my time is at a premium. I need to learn Docker and Kubernetes and not Javascript. I think the Docker and Kubernetes content is really well done but there's too much noise with developing applications in other languages. In addition, people who are new are going to think that just throwing together a bunch of code without testing incremental pieces first before moving on is the right way to develop applications, which it isn't.

Amir15 February 2020

The Instructor is Doing Great Job, However So Many Errors Due to Old Dated Materials which Makes the Course Really Challenging to Successfully Follow Up.

Ashwin14 February 2020

Very nice explained. One of the best instructors on Udemy. Would have loved if you could have covered a bit more of the topic and gone in depth.

Chris14 February 2020

This was an exceptional course on Docker and Kubernetes, with some TravisCI, AWS, and Google Cloud included as well. I highly recommend it!


Expired7/22/202090% OFF
Expired7/29/202087% OFF
Expired11/19/202090% OFF
Expired1/1/202187% OFF
Expired1/15/202190% OFF


Udemy ID


Course created date


Course Indexed date
Course Submitted by

Android PlayStore
Apple Appstore