Now that we have the real-talk parts done with, let us say that we are truly ready to tackle containers and Docker for an imaginary service. We covered bits and pieces of this earlier in the chapter, but we will here concretely define what our ideal requirements would look like if we had ample time to work on them:
- Developers should be able to deploy a new service without any need for ops resources
- The system can auto-discover new instances of services running
- The system is flexibly scalable both up and down
- On desired code commits, the new code will automatically get deployed without Dev or Ops intervention
- You can seamlessly handle degraded nodes and services without interruption
- You are capable of using the full extent of the resources available on hosts (RAM, CPUs, and so on)
- Nodes should almost never need to be accessed individually by developers
If these are the requirements, you will be happy to know that almost all of them are feasible to a large extent and that we will cover almost all of them in detail in this book. For many of them, we will need to get into Docker way deeper and beyond most of the materials you will find elsewhere, but there is no point in teaching you deployments that you cannot take to the field that only print out "Hello World"s.
As we explore each topic in the following chapters, we will be sure to cover any pitfalls as there are many such complex system interactions. Some will be obvious to you, but many probably will not (for example, the PID1 issue), as the tooling in this space is relatively young and many tools critical for the Docker ecosystem are not even version 1.0 or have reached version 1.0 only recently.
Thus, you should consider this technology space to still be in its early stages of development so be realistic, don't expect miracles, and expect a healthy dose of little "gotchas". Keep also in mind that some of the biggest tech giants have been using Docker for a long time now (Red Hat, Microsoft, Google, IBM, and so on), so don't get scared either.
To get started and really begin our journey, we need to first reconsider the way we think about services.