—Course Overview
1m 42s
Why Multiple Container Hosts?
- 42m 0s
—The Magic of Docker Should Work on Multiple Machines Too
3m 51s
—What Are Some of the Concerns When Moving to Multiple Machines?
6m 33s
—What You Should Already Know
1m 53s
—What if a Single Container Isn't Enough?
3m 14s
—Scaling Capacity by Scaling Containers
2m 56s
—What About Balancing Load Across Containers on Different Nodes?
0m 31s
—What Happens When a Container Fails?
2m 21s
—What Happens When a Node Fails?
1m 59s
—What About Internal Communication?
3m 23s
—User Defined Networks to Connect Containers on a Single Node
7m 45s
—docker-compose Simplifies Complex Containers and Networking
4m 22s
—What About Scaling Internal Application Dependencies?
3m 12s
Creating a Swarm and Running a Service
- 42m 47s
—Preparing a Single Node to Follow Along
3m 8s
—Enabling Experimental Features
1m 50s
—Enabling Swarm Mode by Initializing a New Swarm
2m 55s
—Listing and Inspecting Nodes
2m 42s
—Creating an NGINX Service
3m 9s
—A Service Is a Definition of an Application
2m 12s
—Services Lead to Tasks
4m 38s
—Removing a Service
1m 58s
—Updating a Service to Scale the Number of Containers
2m 46s
—Swarm Managers Ensure the Desired State Is Maintained
6m 14s
—The Scheduling Process
2m 30s
—Creating a Second Service for Our Customer API
3m 15s
—The Swarm Mode Routing Mesh
2m 13s
—Testing Throughput on a Scaled Service
3m 17s
—Moving to Multiple Nodes
0m 50s
—Destroying the Single Node Swarm
2m 32s
—Creating and Managing VMs with Docker Machine
4m 48s
—Accessing my Lab Setup Vagrantfile
2m 13s
—Launching 3 VMs with vagrant up
1m 7s
—Accessing the Docker Engine Inside the Vagrant VMs
2m 59s
—docker swarm init --advertise-addr
3m 5s
—Joining Worker Nodes to the Swarm
5m 1s
—Creating a Service to Visualize Our Cluster State
5m 23s
—What Happens When a Node Is Shut Down
3m 19s
—Creating and Scaling a Second Service
2m 30s
—The Spread Strategy and Testing Throughput of the Scaled Service
3m 51s
—Inspecting Nodes and Clustering Gotchas
3m 49s
—Listing Tasks per Node
1m 10s
—Promoting a Worker to a Manager and Demoting Too
1m 6s
—Draining a Node to Perform Maintenance
4m 18s
—One Container per Node with Global Services
3m 36s
—Swarm Mode Is Incredibly Easy to Setup
2m 49s
Ingress Routing and Publishing Ports
- 21m 16s
—Routing External Traffic to Cluster Services
0m 38s
—Published Ports Provide External Access to Services
3m 38s
—The Ingress Overlay Network
4m 11s
—Options for Routing External Traffic to Nodes
2m 23s
—Host Publishing Mode Instead of Ingress Mode
1m 51s
—Ingress Publish Mode Routes to a Random Container
1m 37s
—Removing a Published Port on an Existing Service
1m 3s
—Adding a Host Mode Published Port
3m 4s
—Publishing a Random Port
2m 51s
Reconciling a Desired State
- 22m 34s
—Reconciling a Desired State
1m 10s
—Quiz - What Happens When We Add a Node to the Swarm?
2m 47s
—Creating a Pending Service and Inspecting Task Status
4m 32s
—Joining a New Node to Fulfill a Pending Service
3m 37s
—What Happens to a Service When We Lose the Only Compatible Node?
2m 38s
—Cleaning up Nodes That Have Failed
2m 21s
—Remove Vestigial Services
0m 34s
—If Your App Fails Then the Corresponding Task Will Be Shutdown
3m 1s
—Scale a Service to Zero to Stop It Without Removing It
0m 42s
—Desired State Reconciliation Affords SRP
1m 12s
Rolling Updates
- 52m 12s
—How Do We Update an Application?
0m 24s
—Updates Seem to Happen All at Once
2m 21s
—Updates Are Incremental
2m 9s
—Running a Docker Command on Every Node in the Cluster
3m 33s
—Specifying an Image Tag When Creating a Service
2m 8s
—Adding Delay Between Task Updates
4m 37s
—Updating Multiple Tasks Concurrently with --update-parallelism
2m 12s
—Cleaning up Task History When Learning
0m 50s
—Quiz Recap on Update Delay and Parallelism
0m 43s
—Using watch to Visualize Updates in a Terminal
5m 4s
—Slowing Down the Update Process to Visualize Updates
5m 40s
—RollOut Mode and Other Update Settings Are WIP
1m 37s
—Inspecting the UpdateConfig Policy per Service
2m 29s
—Watching the UpdateConfig Policy as It Is Updated
4m 27s
—Inspecting Task Errors
1m 44s
—Rolling Back to the Previous Service Definition
2m 53s
—Configuring Rollback Policies
0m 45s
—Use --force to Test Changes to Update Policies
1m 37s
—Watching UpdateStatus During a Service Update
1m 36s
—Simulating and Monitoring an Update Failure
2m 46s
—Resuming a Paused Update
2m 37s
Container to Container Networking
- 36m 59s
—Internal Container to Container Scenario
2m 13s
—Ingress Network Is Special Purpose for Publishing Ports
2m 4s
—Our New Network Topology
1m 5s
—Creating an Overlay Network
2m 1s
—Inspecting Overlay Networks
0m 59s
—Attaching a New Service to Our Overlay Network
1m 41s
—Adding a Second Service to Our Overlay Network
1m 3s
—Viewing Service Logs
3m 10s
—Adding an Environment Variable to an Existing Service
2m 40s
—docker exec to Check Service Discovery on the Overlay Network
1m 36s
—Spelunking Service Discovery as We Scale Services
6m 8s
—Using Curl to Validate Internal Load Balancing
3m 24s
—Validating External Load Balancing via the Ingress Network
1m 41s
—docker service inspect for Finding the Virtual IPs for a Service
1m 35s
—Use DNS Round Robin Instead of a Virtual IP
2m 14s
—Networks Are Lazily Extended to Worker Nodes
2m 8s
—A Few Last Things
1m 17s
Deploying with Stacks
- 25m 30s
—Enough with All the Flags Already
0m 54s
—Remove All Services
1m 6s
—The New Compose Version 3 Format
1m 58s
—Creating a Compose File for Our Viz Service
3m 38s
—Deploying a Stack with a Compose File
4m 15s
—Updating a Service with a Stack Is as Easy as Creating It
2m 14s
—Removing a Stack
0m 38s
—Creating and Deploying a Multi Service Stack
4m 40s
—Specifying Replicas in Compose File
1m 14s
—Quiz and Key Course Takeaway
2m 6s
—The Trifecta Services - Networks and Volumes
2m 47s
Health Checking
- 45m 21s
—A Running Process Is Not Necessarily Ready for Traffic
1m 0s
—Deploying a Cowsay Stack
1m 30s
—What Happens if We Break a Container?
3m 13s
—Automatic Service Recovery with Health Checks
3m 39s
—Manually Forcing a Corrupted Service to Restart
3m 46s
—Options for Adding Health Checks
3m 6s
—Adding a Health Check to a Stack Compose File
5m 52s
—Configuring Interval and Timeout and Retries
2m 4s
—Deploying Health Checks and Inspecting Container Health
3m 35s
—Monitoring When Testing Health Checks
2m 10s
—Monitoring Service Auto Recovery from Health Check Failure
3m 20s
—Adjust the Health Check Interval When Learning
1m 12s
—Health Checks Prevent Traffic to a Container That Is Starting
3m 18s
—Health Checks Prevent Traffic to Unhealthy Containers
1m 14s
—Health Checking with docker run
4m 3s
—Adding a Health Check to a Dockerfile
1m 38s
—Disable Health Checking
0m 41s
Protecting Secrets
- 25m 26s
—Environment Variables Can Leak Passwords
2m 20s
—Creating a Secret for a MySQL Password
1m 9s
—Granting a Service Access to a Secret
2m 2s
—Troubleshooting a Failing Service
1m 12s
—Accessing Secrets in a Container via the Filesystem
1m 46s
—Using a Secret to Provide a MySQL Root Password
3m 22s
—Steps to Use Secrets
4m 27s
—_FILE Image Secrets Convention
1m 25s
—Removing Secrets
1m 9s
—A Convention for Updating a Secret
4m 44s
—The End
1m 50s