Introduction
- What this book is not
- Prerequisites
- How to read this book
- Tools you need
- Source code
1.Why Docker?
- 1.1A DevOps enabler tool
- 1.2It solves dependency conflicts
- 1.3It allows for easy scaling up
- 1.4It allows for seamless upgrades
- 1.5International commerce already uses containers
2.Why Kubernetes?
- 2.1The need for container orchestration
- 2.2What’s K8s?
3.Get Docker up and running
- 3.1Various products for various needs
- 3.2Community on a developer or CI machine
- 3.3Enterprise on a Server
4.Basic concepts
5.Use Docker images
- 5.1Do-it-yourself: run a container
- 5.2Container management commands
- 5.3Do-it-yourself: post-mortem inspection
- 5.4More about docker run
- 5.5Running a server container
- 5.6Exercise - Run a server container
- 5.7Exercise solution
- 5.8Using volumes
- 5.9Where do images come from?
6.Create Docker images
- 6.1Creating a simple image
- 6.2Creating an image including files
- 6.3Images are created locally
- 6.4Exercise - Build an image and run it
- 6.5Exercise solution
- 6.6Tags matter
- 6.7Parameters as environment variables
- 6.8Exercise - Enable an image to be parameterized
- 6.9Exercise solution
- 6.10Storage
- 6.11Networking
- 6.12Learning more
7.Publish Docker images
- 7.1Rationale for publishing
- 7.2Registries
- 7.3Publishing an image
- 7.4Docker Hub
- 7.5Run an image on another machine
- 7.6Exercise - Publish an image and run a container on another machine
- 7.7Exercise solution
- 7.8Private registries
- 7.9Size matters
8.Forget SDK installs
- 8.1One tool to rule them all
- 8.2Building rationally: easy CI
- 8.3Multi-stage dockerfiles
9.Docker with common development profiles
- 9.1.NET Core
- 9.2Java
- 9.3Node.JS
- 9.4PHP
- 9.5Python
10.Kubernetes cluster
- 10.1Parts of a Kubernetes cluster
- 10.2Creating a cluster
- 10.3Exercise - Set up your development cluster
- 10.4Exercise solution
- 10.5Connecting to a cluster
11.Tooling
- 11.1Kubernetes Dashboard
- 11.2Visual Studio Code
- 11.3Helm
12.Running pods
- 12.1Deployments and ReplicaSets
- 12.2Imperative commands
- 12.3Exercise - Use imperative commands
- 12.4Exercise solution
- 12.5Exercise - Observe Kubernetes handle a failing pod
- 12.6Exercise solution
- 12.7Declarative commands
- 12.8Exercise - Create resources using declarative commands
- 12.9Exercise solution
- 12.10Exercise - Update a Pod created declaratively
- 12.11Exercise solution
- 12.12Debugging
- 12.13Exercise - Debugging failing Pods
- 12.14Exercise solution
- 12.15Exercise - Delete created objects
- 12.16Exercise solution
- 12.17Resources management
13.Exposing services
- 13.1The need for services
- 13.2Services
- 13.3Exercise - Expose a web application to the internet
- 13.4Exercise solution
- 13.5Exercise - Expose an API inside the cluster
- 13.6Exercise solution
- 13.7Ingress
14.Volumes
- 14.1The need for volumes
- 14.2Short-lived storage with Volumes
- 14.3Exercise - Create and use a Volume
- 14.4Exercise solution
- 14.5Persistent storage with PersistentVolumeClaims
- 14.6Exercise - Create and use a PersistentVolume
- 14.7Exercise solution
- I need you, super-hero!
15.Configuration
- 15.1Similar but different
- 15.2ConfigMap
- 15.3Exercise - Create and use a ConfigMap
- 15.4Exercise solution
- 15.5Secret
- 15.6Exercise - Create and use a Secret
- 15.7Exercise solution
16.Updating and scaling
- 16.1Horizontal scaling
- 16.2Automatic horizontal scaling
- 16.3Update strategies
17.Sharing a cluster
- 17.1Namespaces
- 17.2RBAC
18.Helm
- 18.1Using Helm
- 18.2Creating Helm packages (charts)