Course Highlights
  • 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!
Curriculum

11 Topics
Finished Code and Diagrams
Join Our Community!
Why Use Docker?
What is Docker?
Docker for Mac/Windows
Installing Docker on macOS
Installing Docker with WSL on Windows 10/11
Installing Docker on Linux
Using the Docker Client
But Really...What's a Container?
How's Docker Running on Your Computer?

14 Topics
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

11 Topics
Creating Docker Images
Buildkit for Docker Desktop
Building a Dockerfile
Dockerfile Teardown
What's a Base Image?
The Build Process in Detail
A Brief Recap
Rebuilds with Cache
Tagging an Image
Quick Note for Windows Users
Manual Image Generation with Docker Commit

11 Topics
Project Outline
Node Server Setup
Reminder on Buildkit
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

11 Topics
App Overview
App Server Starter 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

23 Topics
Development Workflow
Flow Specifics
Docker's Purpose
Project Generation
More on Project Generation
Necessary Commands
Creating the Dev Dockerfile
Duplicating Dependencies
Starting the Container
Docker Volumes
WSL and Windows Users Must Read Before Next Lecture
Bookmarking Volumes
Shorthand with Docker Compose
Overriding Dockerfile Selection
Do We Need Copy?
Executing Tests
Live Updating Tests
Docker Compose for Running Tests
Shortcomings on Testing
Need for Nginx
Multi-Step Docker Builds
Implementing Multi-Step Builds
Running Nginx

20 Topics
Services Overview
Github Setup
Important Info About Travis and Account Registration
Travis CI Setup
Travis YML File Configuration
A Touch More Travis Setup
Automatic Build Creation
AWS Elastic Beanstalk
Elastic Beanstalk Setup and Configuration
More on Elastic Beanstalk
Travis Config for Deployment
Required Update for IAM User and Keys
Automated Deployments
Exposing Ports Through the Dockerfile
Workflow With Github
Redeploy on Pull Request Merge
Deployment Wrapup
Environment Cleanup
AWS Configuration Cheat Sheet
Finished Project Code with Updates Applied

14 Topics
Single Container Deployment Issues
Application Overview
A Quick Note
Application Architecture
Worker Process Setup
Express API Setup
Important Update for pgClient and Table Query
Connecting to Postgres
More Express API Setup
Generating the React App
Fetching Data in the React App
Rendering Logic in the App
Exporting the Fib Class
Routing in the React App

19 Topics
Checkpoint Files
Checkpoint Catchup
Expected Output for Latest Create React App Versions
Dockerizing a React App - Again!
Dockerizing Generic Node Apps
Postgres Database Required Fixes and Updates
Adding Postgres as a Service
Docker-compose Config
Environment Variables with Docker Compose
Required Worker Environment Variables
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
Troubleshooting Startup Bugs
WebSocket connection to 'ws://localhost:3000/ws' failed
Opening Websocket Connections

11 Topics
Production Multi-Container Deployments
Production Dockerfiles
Multiple Nginx Instances
Nginx fix for React Router
Altering Nginx's Listen Port
Cleaning Up Tests
Travis Configuration Setup
Fix for Failing Travis Builds
Github and Travis CI Setup
Pushing Images to Docker Hub
Successful Image Building

24 Topics
Multi-Container Definition Files
Finding Docs on Container Definitions
Adding Container Definitions to DockerRun
More Container Definitions
Forming Container Links
Creating the Elastic Beanstalk Environment
AWS Configuration Cheat Sheet - Updated for new UI
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 Keys Update
Travis Deploy Script
Container Memory Allocations
Verifying Deployment
A Quick App Change
Making Changes
Cleaning Up AWS Resources
AWS Configuration Cheat Sheet
Finished Project Code with Updates Applied

17 Topics
The Why's and What's of Kubernetes
Kubernetes in Development and Production
Docker Desktop's Kubernetes Setup and Installation - macOS
Docker Desktop's Kubernetes Setup and Installation - Windows
Updated Minikube Install and Setup Info - macOS
Minikube Setup on MacOS
Minikube Setup on Windows
Minikube Setup on Linux
Mapping Existing Knowledge
Quick Note to Prevent an Error
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

18 Topics
Updating Existing Objects
Declarative Updates in Action
Limitations in Config Updates
Running Containers with Deployments
Quick Note to Prevent an Error
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
Reminder for Docker Desktop's Kubernetes Users
Multiple Docker Installations
Reconfiguring Docker CLI
Why Mess with Docker in the Node?

30 Topics
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
Important Note about Expected Postgres Error
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
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

14 Topics
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
Docker Driver and Ingress - IMPORTANT
Important - DO NOT SKIP - Ingress Nginx Installation Info
Setting up Ingress Locally with Minikube
Ingress v1 API Update + "this.state.seenIndexes.map..." + 404 errors
Creating the Ingress Configuration
Testing Ingress Locally
The Minikube Dashboard
Docker Desktop's Kubernetes Dashboard

40 Topics
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
Updated GKE creation steps for new Google Cloud UI
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
Updated Service Account steps for new GCP UI
Generating a Service Account
Ruby Version Fix
Running Travis CLI in a Container
Travis Login Issues "iv undefined" or "repository not known"
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 Setup
Important - Updated Ingress Installation with Helm
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?
Completed Code For Google Cloud Deployment

18 Topics
HTTPS Setup Overview
Domain Purchase
Domain Name Setup
Required Updates for Cert Manager Install
Cert Manager Install
How to Wire Up Cert Manager
Required Update for Issuer
Issuer Config File
Required Update for the Certificate
Certificate Config File
Deploying Changes
No Resources Found?
Verifying the Certificate
Required Update for the HTTPS Ingress
Ingress Config for HTTPS
It Worked!
Google Cloud Cleanup
Local Environment Cleanup

7 Topics
Awkward Local Development
Installing Skaffold
The Skaffold Config File
Skaffold Sync Update and Example Source Code
Live Sync Changes
Automatic Shutdown
Testing Live Sync with the API Server

1 Topic
Bonus!

  Write a Review

Docker and Kubernetes: The Complete Guide

Go to Paid Course