1.1.3. Containers are not virtualization
1.2. What problems does Docker solve?
1.4. Where and when to use Docker
1.5. Docker in the larger ecosystem
1. Process isolation and environment-independent computing
Chapter 2. Running software in containers
2.1. Controlling containers: Building a website monitor
2.1.1. Creating and starting a new container
2.1.2. Running interactive containers
2.1.3. Listing, stopping, restarting, and viewing output of containers
2.2. Solved problems and the PID namespace
2.3. Eliminating metaconflicts: Building a website farm
2.4. Building environment-agnostic systems
2.5. Building durable containers
Chapter 3. Software installation simplified
3.2. Finding and installing software
3.2.1. Working with Docker registries from the command line
3.2.2. Using alternative registries
3.2.3. Working with images as files
3.3. Installation files and isolation
3.3.3. Container filesystem abstraction and isolation
Chapter 4. Working with storage and volumes
4.1. File trees and mount points
4.4.1. Volumes provide container-independent data management
4.5. Shared mount points and sharing files
Chapter 5. Single-host networking
5.1. Networking background (for beginners)
5.2. Docker container networking
5.2.1. Creating a user-defined bridge network
5.3. Special container networks: host and none
5.4. Handling inbound traffic with NodePort publishing
5.5. Container networking caveats and customizations
5.5.1. No firewalls or network policies
Chapter 6. Limiting risk with resource controls
6.1. Setting resource allowances
6.3.1. Working with the run-as user
6.3.3. Introduction to the Linux user namespace and UID remapping
6.4. Adjusting OS feature access with capabilities
6.5. Running a container with full privileges
6.6. Strengthening containers with enhanced tools
6.7. Building use-case-appropriate containers
2. Packaging software for distribution
Chapter 7. Packaging software in images
7.1. Building Docker images from a container
7.1.1. Packaging “Hello, World”
7.1.2. Preparing packaging for Git
7.2. Going deep on Docker images and layers
7.2.1. Exploring union filesystems
7.3. Exporting and importing flat filesystems
Chapter 8. Building images automatically with Dockerfiles
8.1. Packaging Git with a Dockerfile
8.3. Injecting downstream build-time behavior
8.4. Creating maintainable Dockerfiles
8.5. Using startup scripts and multiprocess containers
8.5.1. Environmental preconditions validation
8.6. Building hardened application images
Chapter 9. Public and private software distribution
9.1. Choosing a distribution method
9.2. Publishing with hosted registries
9.2.1. Publishing with public repositories: “Hello World!” via Docker Hub
9.3. Introducing private registries
9.4. Manual image publishing and distribution
9.5. Image source-distribution workflows
10.1. Goals of an image build pipeline
10.2. Patterns for building images
10.3. Record metadata at image build time
10.4. Testing images in a build pipeline
10.5. Patterns for tagging images
10.5.2. Continuous delivery with unique tags
3. Higher-level abstractions and orchestration
Chapter 11. Services with Docker and Compose
11.1. A service “Hello World!”
11.2. Declarative service environments with Compose V3
11.3. Stateful services and preserving data
11.4. Load balancing, service discovery, and networks with Compose
Chapter 12. First-class configuration abstractions
12.1. Configuration distribution and management
12.2. Separating application and configuration
12.2.1. Working with the config resource
12.3. Secrets—A special kind of configuration
Chapter 13. Orchestrating services on a cluster of Docker hosts with Swarm
13.1. Clustering with Docker Swarm
13.2. Deploying an application to a Swarm cluster
13.2.1. Introducing Docker Swarm cluster resource types
13.2.2. Defining an application and its dependencies by using Docker services
13.3. Communicating with services running on a Swarm cluster
13.3.1. Routing client requests to services by using the Swarm routing mesh
13.3.2. Working with overlay networks
13.3.3. Discovering services on an overlay network
13.3.4. Isolating service-to-service communication with overlay networks
13.4. Placing service tasks on the cluster
13.4.2. Constraining where tasks run