Course Highlights
  • Learn what Docker and Kubernetes are and why you might want to use them
  • Learn how to install and use Docker on any system (macOS, Windows, Linux)
  • Learn how to create and use Images & Containers with Docker
  • Understand complex topics like managing and persisting data with Volumes
  • Learn about Container Networking with Docker Networks and DNS Service Discovery
  • Learn how to deploy Docker applications - manually, with managed services or with Kubernetes
Curriculum

16 Topics
Welcome to the Course
What Is Docker?
Why Docker & Containers?
Join Our Learning Community
Virtual Machines vs Docker Containers
Docker Setup - Overview
Docker Setup - macOS
Docker Setup - Windows
Docker Setup - Docker Toolbox for Older Systems
Docker Playground
An Overview of the Docker Tools
Installing & Configuring an IDE
Getting Our Hands Dirty!
Course Outline
How To Get The Most Out Of This Course
Course Resources

28 Topics
Module Introduction
Images & Containers: What and Why?
Using & Running External (Pre-Built) Images
Our Goal: A NodeJS App
Building our own Image with a Dockerfile
Running a Container based on our own Image
EXPOSE & A Little Utility Functionality
Images are Read-Only!
Understanding Image Layers
A First Summary
Images & Containers
Managing Images & Containers
Stopping & Restarting Containers
Understanding Attached & Detached Containers
Attaching to an already-running Container
Entering Interactive Mode
Deleting Images & Containers
Removing Stopped Containers Automatically
A Look Behind the Scenes: Inspecting Images
Copying Files Into & From A Container
Naming & Tagging Containers and Images
Time to Practice: Images & Containers
Sharing Images - Overview
Pushing Images to DockerHub
Pulling & Using Shared Images
Managing Images & Containers
Module Summary
Module Resources

25 Topics
Module Introduction
Understanding Data Categories / Different Kinds of Data
Analyzing a Real App
Building & Understanding the Demo App
Understanding the Problem
Introducing Volumes
A First Unsuccessful Try
Named Volumes To The Rescue!
Removing Anonymous Volumes
Getting Started With Bind Mounts (Code Sharing)
Bind Mounts - Shortcuts
Combining & Merging Different Volumes
A NodeJS-specific Adjustment: Using Nodemon in a Container
Volumes & Bind Mounts: Summary
Volumes & Bind Mounts
A Look at Read-Only Volumes
Managing Docker Volumes
Using "COPY" vs Bind Mounts
Don't COPY Everything: Using "dockerignore" Files
Adding more to the .dockerignore File
Working with Environment Variables & ".env" Files
Environment Variables & Security
Using Build Arguments (ARG)
Module Summary
Module Resources

14 Topics
Module Introduction
Case 1: Container to WWW Communication
Case 2: Container to Local Host Machine Communication
Case 3: Container to Container Communication
Analyzing the Demo App
Creating a Container & Communicating to the Web (WWW)
Making Container to Host Communication Work
Container to Container Communication: A Basic Solution
Introducing Docker Networks: Elegant Container to Container Communication
How Docker Resolves IP Addresses
Docker Container Communication & Networks
Docker Network Drivers
Module Summary
Module Resources

12 Topics
Module Introduction
Our Target App & Setup
Dockerizing the MongoDB Service
Dockerizing the Node App
Moving the React SPA into a Container
Adding Docker Networks for Efficient Cross-Container Communication
Fixing MongoDB Authentication Errors (relevant for next lecture)
Adding Data Persistence to MongoDB with Volumes
Volumes Bind Mounts & Polishing for the NodeJS Container
Live Source Code Updates for the React Container (with Bind Mounts)
Module Summary
Module Resources

12 Topics
Module Introduction
Docker-Compose: What & Why?
Creating a Compose File
Diving into the Compose File Configuration
Installing Docker Compose on Linux
Docker Compose Up & Down
Working with Multiple Containers
Adding Another Container
Building Images & Understanding Container Names
Docker Compose
Module Summary
Module Resources

9 Topics
Module Introduction & What are "Utility Containers"?
Utility Containers: Why would you use them?
Different Ways of Running Commands in Containers
Building a First Utility Container
Utilizing ENTRYPOINT
Using Docker Compose
Utility Containers Permissions & Linux
Module Summary
Module Resources

13 Topics
Module Introduction
The Target Setup
Adding a Nginx (Web Server) Container
Adding a PHP Container
Adding a MySQL Container
Adding a Composer Utility Container
Creating a Laravel App via the Composer Utility Container
Fixing Errors With The Next Lecture
Launching Only Some Docker Compose Services
Adding More Utility Containers
Docker Compose with and without Dockerfiles
Bind Mounts and COPY: When To Use What
Module Resources

39 Topics
Module Introduction
From Development To Production
Deployment Process & Providers
Getting Started With An Example
Bind Mounts In Production
Introducing AWS & EC2
Connecting to an EC2 Instance
Important: Installing Docker on a Virtual Machine
Installing Docker on a Virtual Machine
Installing Docker on Linux in General
Pushing our local Image to the Cloud
Running & Publishing the App (on EC2)
Managing & Updating the Container / Image
Disadvantages of our Current Approach
From Manual Deployment to Managed Services
Important: AWS Pricing and ECS
Deploying with AWS ECS: A Managed Docker Container Service
More on AWS
Updating Managed Containers
Preparing a Multi-Container App
Configuring the NodeJS Backend Container
Deploying a Second Container & A Load Balancer
Using a Load Balancer for a Stable Domain
Using EFS Volumes with ECS
Our Current Architecture
Databases & Containers: An Important Consideration
Moving to MongoDB Atlas
Using MongoDB Atlas in Production
Our Updated & Target Architecture
Understanding a Common Problem
Creating a "build-only" Container
Introducing Multi-Stage Builds
Building a Multi-Stage Image
Deploying a Standalone Frontend App
Development vs Production: Differences
Understanding Multi-Stage Build Targets
Beyond AWS
Module Summary
Module Resources

8 Topics
Module Introduction
Images & Containers
Key Commands
Data Volumes & Networking
Docker Compose
Local vs Remote
Deployment
Module Resources

11 Topics
Module Introduction
More Problems with Manual Deployment
Why Kubernetes?
What Is Kubernetes Exactly?
Kubernetes: Architecture & Core Concepts
Kubernetes will NOT manage your Infrastructure!
A Closer Look at the Worker Nodes
A Closer Look at the Master Node
Important Terms & Concepts
Kubernetes Core Concepts
Module Resources

27 Topics
Module Introduction
Kubernetes does NOT manage your Infrastructure
Kubernetes: Required Setup & Installation Steps
macOS Setup
Windows Setup
Understanding Kubernetes Objects (Resources)
The "Deployment" Object (Resource)
A First Deployment - Using the Imperative Approach
kubectl: Behind The Scenes
The "Service" Object (Resource)
Exposing a Deployment with a Service
Restarting Containers
Scaling in Action
Updating Deployments
Deployment Rollbacks & History
The Imperative vs The Declarative Approach
Creating a Deployment Configuration File (Declarative Approach)
Adding Pod and Container Specs
Working with Labels & Selectors
Creating a Service Declaratively
Updating & Deleting Resources
Multiple vs Single Config Files
More on Labels & Selectors
Liveness Probes
A Closer Look at the Configuration Options
Summary
Module Resources

18 Topics
Module Introduction
Starting Project & What We Know Already
Kubernetes & Volumes - More Than Docker Volumes
Kubernetes Volumes: Theory & Docker Comparison
Creating a New Deployment & Service
Getting Started with Kubernetes Volumes
A First Volume: The "emptyDir" Type
A Second Volume: The "hostPath" Type
Understanding the "CSI" Volume Type
From Volumes to Persistent Volumes
Defining a Persistent Volume
Creating a Persistent Volume Claim
Using a Claim in a Pod
Volumes vs Persistent Volumes
Using Environment Variables
Environment Variables & ConfigMaps
Module Summary
Module Resources

16 Topics
Module Introduction
Starting Project & Our Goal
Creating a First Deployment
Another Look at Services
Multiple Containers in One Pod
Pod-internal Communication
Creating Multiple Deployments
Pod-to-Pod Communication with IP Addresses & Environment Variables
Using DNS for Pod-to-Pod Communication
Which Approach Is Best? And a Challenge!
Challenge Solution
Adding a Containerized Frontend
Deploying the Frontend with Kubernetes
Using a Reverse Proxy for the Frontend
Module Summary
Module Resources

16 Topics
Module Introduction
Deployment Options & Steps
AWS EKS vs AWS ECS
Preparing the Starting Project
A Note on AWS EKS Pricing
Diving Into AWS
Creating & Configuring the Kubernetes Cluster with EKS
Adding Worker Nodes
Applying Our Kubernetes Config
Getting Started with Volumes
Adding EFS as a Volume (with the CSI Volume Type)
Creating a Persistent Volume for EFS
Using the EFS Volume
A Challenge!
Challenge Solution
Module Resources

5 Topics
You Learned A Lot!
Related Topics You Could Explore
Next Steps!
Course Roundup
Bonus!

  Write a Review

Docker & Kubernetes: The Practical Guide [2024 Edition]

Go to Paid Course