For Docker
- A general idea of virtualization or container software
- Familiarity with Linux and the command line, but not mandatory
- A general understanding of software installation, packaging, dependencies, etc.
For Kubernetes
- Experience with Docker containers
- Familiarity with the Linux command line
- An understanding of networking concepts
- A general understanding of "continuous integration" (CI) / "continuous deliver" (CD) concepts
This course is for following professionals:
- Software Professionals (Developers & Operations)
- Testing Professionals
- Software Architects and Designers
- DevOps Engineers
- Managers who are technical subject matter experts, leading software development projects
Docker is an open-source platform that automates the building, shipping and running of software applications inside containers. Multi-container Docker applications can be further defined using Compose. Swarm is a tool that controls a cluster of Docker hosts and exposes them as a single "virtual" host. By pooling together numerous Docker engines, Swarm allows IT operations teams to transparently scale up their software deployment to many hosts. You will also learn how to use Kubernetes to automate deployment, scaling, and management of containerized applications at scale in a clustered environment. Finally, on how to streamline the process of installing and managing Kubernetes applications with Helm.
By the end of this course, participants will be able to:
- Set up and run a Docker container.
- Deploy containerized server and web application.
- Build and manage Docker images.
- Set up a Docker Swarm and Kubernetes cluster.
- Deploy Docker hosts across multiple machines using Compose and Swarm.
- Manage a Swarm cluster in a live lab environment.
- Secure and troubleshoot Docker hosts within their Swarm cluster.
- Use Kubernetes to deploy and manage different environments under the same cluster.
- Secure, scale and monitor a Kubernetes cluster.
- Share applications as Helm charts.
Each topic features a variety of exercises & assignments for learners to practice and meet the learning objectives of this course.
[Day 01]
Containerization Fundamentals – Ecosystem and Architecture
Docker Overview -The Moby project & Docker products (Docker CE & Docker EE)
Docker Containers Usage
- Anatomy of containers (Architecture, Namespaces, cgroups, UnionFS, runc, Containerd)
- Running and Inspecting a container
- Starting, stopping, and removing containers
- Exec into a running container
- Attaching to a running container
- Retrieving container logs
Docker Images Usage
- The layered filesystem, the writable container layer
- Inspect Images
- Tagging an image
- Utilize a registry to store an image
- Layers
- Push/Pull Images to/from registry
- Delete Images
Using Dockerfile to create a Docker image
- Dockerfile Instructions (add, copy, volumes, expose, entrypoint, etc
- Writing complex Dockerfile
- Building an image
- Multistep builds
- Best Practices
Docker Storage and Volumes
- Modifying the container layer
- Creating, Mounting and Removing Volumes
- Sharing data between containers
- Using host volumes
- Defining volumes in images
Docker Networking
- Bridge network, Host network and null network
- Port Publishing
- The container network model
- Network firewalling
- Deploy a service on a Docker overlay network
Docker Compose
- Declarative versus Imperative
- Running a multi-service app
- Scaling a service
- Building and pushing an application
[Day 02]
Orchestrators Overview
Docker Swarm Mode
- Architecture
- Swarm nodes (Swarm managers & Swarm workers)
- Stacks, Services, and Tasks
- Multi-host networking
- Creating a Docker Swarm (local single node swarm, local swarm in VirtualBox or Hyper-V, PWD, Docker Swarm in the cloud)
Deploying an application
- Creating a service
- Inspecting the service and its tasks
- Logs of a service
- Reconciling the desired state
- Deleting a service or a stack
- Deploying a multi-service stack
Kubernetes Cluster
- Installing Kubernetes on a Public Cloud Provider (Google, Amazon, Azure)
- Installing Kubernetes locally Using minikube
- Overview of Kubernetes architecture
- The Kubernetes Client
- Cluster Components (Kubernetes Proxy, Kubernetes DNS, Kubernetes UI)
- Common kubectl Commands
Pods
- Creating a Pod & Pod Manifest
- Running Pods - Listing Pods, Pod Details, Deleting a Pod
- Accessing Pod - Port Forwarding, Logs, Exec, Copying Files
- Health Checks - Liveness Probe, Readiness Probe
- Resource Management – Requests, Limits
- Persisting Data with Volumes
- Different Ways of Using Volumes with Pods
Labels and Annotations
- Applying Labels, Modifying Labels, Label Selectors
Service Discovery
- Service Object & Service DNS
- Endpoints, Manual Service Discovery, kube-proxy and Cluster Ips, Cluster IP Environment Variables
Replicasets
- Designing with ReplicaSets - Reconciliation Loops
- Creating, Inspecting & Deleting a ReplicaSet
- Scaling ReplicaSets - Imperatively, Declaratively & Autoscaling
DaemonSets
- Creating, Updating & Deleting a DaemonSets
- DaemonSet Scheduler, Limiting DaemonSets to Specific Nodes
[Day 03]
Jobs (One Shot, Parallelism, Work Queues, Cron)
Creating & Using a ConfigMaps
Creating & Consuming Secrets
Deployments
- Creating, Managing and Deleting a Deployments
- Updating Deployments - Scaling, Updating a Container Image, Rollout History
- Deployment Strategies - Recreate, Rolling Update, Slowing Rollouts
StatefulSets
- Importing External Services
- Running a MySQL Singleton
- Dynamic Volume Provisioning
- Automating MongoDB Cluster Creation
- Persistent Volumes and StatefulSets
Using Kubernetes Namespaces to manage different environments
- Managing test, staging, and production environments within the same cluster
- Kubernetes Namespaces best practices
Resource Quota
- Compute Resource
- Storage Resource
- Object Count
Kubernetes security
- Authentication – Normal Users, Service Accounts
- Authorization – ABAC, Webhook, RBAC, etc
- Admission Controller
Monitoring Kubernetes
- Cluster logging with Elasticsearch and fluentd
- Container level monitoring (cAdvisor UI, Influxdb, Prometheus)
Helm Introduction
- Helm package manager as a Continuous Integration (CI) / Continuous Deployment (CD) tool.