Docker is a wonderful tool that abstracts away all kinds of details about configuring and maintaining Linux Containers. The power to simply type "docker run image-name" and have a bunch of complexity automatically handled is great. However Docker is one of those tools with lots of moving parts behind the scenes, and some training is needed to use it well.
Written by a certified expert on Docker, a Docker Captain, and an experienced Pluralsight teacher, this book is very informative and well written. This book does a great job of breaking down the terminology, use cases, and elements that make up a Docker installation. A useful feature is this book covers all Docker Certified Associate exam objectives, making it a useful resource to prepare for that exam. The author is constantly updating this book, which is critical since the Docker environment is moving so quickly. Each chapter has a TLDR section with the essential points, a deep dive section with all the details, and a reference section describing the commands.
Docker and the ecosystem directly supported by the Docker team includes Docker Swarm, Docker Hub, the Docker Image Registry, Docker Machine, Docker Compose, Docker Cloud, Portainer and Rancher. This book focuses on each of those products, with one product per chapter. The chapters build in an organic fashion so that each new product builds on the learning in previous chapters.
This book is designed for software developers looking to replace virtual machine environments with leaner systems, like Docker containerization. That means it covers not only Docker but how to best make Docker work with your application. That means focusing on using the 12 Factor App model, which is an excellent framework for lean agile software development practices that fits Docker like a hand in a glove.
Deploying Docker-based containers at scale means using an orchestration system. Kubernetes is one of the leading Docker orchestration systems, and was built using best practices developed at Google. This book lays a solid foundation, first spending several chapters teaching the art of containerizing a Java application. Only then does the book get down to business with Kubernetes. The reader is shown setting up a Kubernetes instance on his/her laptop, and is then shown deployment to a cloud service, including using the Kubernetes API.
Kubernetes, as one of the leading Docker orchestration systems, is an incredibly important piece of technology to learn. This book starts with an introduction to Kubernetes, and then step-by-step you learn about load balancers, gradual rollouts, autoscaling, deployments, jobs, persistent storage, continuous integration/delivery using Jenkins, monitoring, cluster federation, container security, and the requirements for production deployment.
DevOps, the field of delivering software to operations, is a key target of the Docker ecosystem. If the goal is implementing software infrastructure as "code", Docker and Kubernetes is an excellent choice. This book starts with the basics, introducing the Container concept to DevOps, and from there introduces Kubernetes, implementing persistent data storage with Kubernetes volume management, networked communication between containers in Kubernetes, administering Kubernetes clusters, and deploying Kubernetes infrastructure to AWS and Google Cloud Platform.
This book describes the Kubernetes cluster orchestrator and how its tools and APIs can be used to improve the development, delivery, and maintenance of distributed applications. In chapter 3 you are instructed in setting up a Kubernetes cluster on Google, Amazon or Microsoft infrastructure, or on a Raspberry Pi if that's what floats your boat. From there the book goes stepwise, covering Pods, Labels, Annotations, Service Discovery, ReplicaSets, DaemonSets, Jobs, ConfigMaps, before getting to Deployment and Storage solutions. This means the reader gets a comprehensive introduction to Kubernetes. Unfortunately, while this book is a good overview of operations on the Kubernetes platform and what it takes to run Kubernetes, it does not go into great depth on any topic.
Starting from zero, the reader learns about Docker container basics, service decomposition, scaling container deployment with Kubernetes or Swarm, data persistence outside containers, and advanced deployment techniques. The last portion of the book concentrates on large-scale deployment on the AWS platform.
Modern software teams should be using continuous integration systems. The purpose is to routinely build and test software on every commit to source repositories. The book demonstrates using the Jenkins continuous integration system for a full range of continuous integration tasks. This includes acceptance testing, automated infrastructure setup using Ansible, and other test approaches like load testing, security testing, stress testing, and endurance testing. The book ends with advnaced deployment techniques such as Docker Swarm, as well as database deployment.