Join Our Learning Community
Virtual Machines vs Docker Containers
Docker Setup - Docker Toolbox for Older Systems
An Overview of the Docker Tools
Installing & Configuring an IDE
How To Get The Most Out Of This Course
Images & Containers: What and Why?
Using & Running External (Pre-Built) Images
Building our own Image with a Dockerfile
Running a Container based on our own Image
EXPOSE & A Little Utility Functionality
Understanding Image Layers
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
Understanding Data Categories / Different Kinds of Data
Building & Understanding the Demo App
Understanding the Problem
Named Volumes To The Rescue!
Removing Anonymous Volumes
Getting Started With Bind Mounts (Code Sharing)
Combining & Merging Different Volumes
A NodeJS-specific Adjustment: Using Nodemon in a Container
Volumes & Bind Mounts: Summary
A Look at Read-Only 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)
Case 1: Container to WWW Communication
Case 2: Container to Local Host Machine Communication
Case 3: Container to Container Communication
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
Dockerizing the MongoDB Service
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)
Docker-Compose: What & Why?
Diving into the Compose File Configuration
Installing Docker Compose on Linux
Working with Multiple Containers
Building Images & Understanding Container Names
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
Utility Containers Permissions & Linux
Adding a Nginx (Web Server) 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
From Development To Production
Deployment Process & Providers
Getting Started With An Example
Bind Mounts In Production
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
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
Databases & Containers: An Important Consideration
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
More Problems with Manual Deployment
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 does NOT manage your Infrastructure
Kubernetes: Required Setup & Installation Steps
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
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
A Closer Look at the Configuration Options
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
Volumes vs Persistent Volumes
Using Environment Variables
Environment Variables & ConfigMaps
Starting Project & Our Goal
Creating a First Deployment
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!
Adding a Containerized Frontend
Deploying the Frontend with Kubernetes
Using a Reverse Proxy for the Frontend
Deployment Options & Steps
Preparing the Starting Project
A Note on AWS EKS Pricing
Creating & Configuring the Kubernetes Cluster with EKS
Applying Our Kubernetes Config
Getting Started with Volumes
Adding EFS as a Volume (with the CSI Volume Type)
Creating a Persistent Volume for EFS