Docker is arguably the fastest-growing software project ever. Open-sourced in March 2013, by 2018 it had gained nearly 50,000 GitHub stars and over 14,000 forks. It has accepted significant numbers of pull requests from the likes of Red Hat, IBM, Microsoft, Google, Cisco, and VMWare.
Docker has hit this critical mass by responding to a vital need for many software organizations: the ability to build software in an open and flexible way and then deploy it reliably and consistently in different contexts. You don’t need to learn a new programming language, buy expensive hardware, or do much in the way of installation or configuration to build, ship, and run applications portably with Docker.
Docker in Practice, second edition, takes you through real-world examples of Docker usage using techniques we’ve employed in various contexts. Where possible, we’ve tried to elucidate these techniques without requiring knowledge of other technologies before reading. We’ve assumed readers have an understanding of basic development techniques and concepts, such as the ability to develop some structured code, and some awareness of software development and deployment processes. In addition, we’ve assumed a knowledge of core source-control ideas, and a basic understanding of network fundamentals such as TCP/IP, HTTP, and ports. Anything less mainstream will be explained as we go.
Starting with a rundown of Docker fundamentals in part 1, in part 2 we focus on using Docker in development on a single machine. In part 3 we move on to Docker use within a DevOps pipeline, covering continuous integration, continuous delivery, and testing.
Part 4 looks at how to run Docker containers in a scalable way with orchestration. The last part covers running Docker in production, focusing on the options for standard production operations, as well as what can go wrong and how to deal with it.
Docker is such a broad, flexible, and dynamic tool that keeping up with its fast evolving landscape is not for the faint-hearted. We’ve endeavored to give you an understanding of critical concepts through real-world applications and examples, with the aim of giving you the power to critically evaluate future tools and technologies within the Docker ecosystem with confidence. We’ve tried to make the book an enjoyable tour of the many ways we’ve seen Docker make our lives easier and even fun. Immersing ourselves in Docker has introduced us to many interesting software techniques spanning the entire software lifecycle in a stimulating way, and we hope that this is an experience you’ll share.