Managing the state of an application is one of the key aspects when architecting any software solution, regardless of whether it is a monolith desktop application or a complex, distributed system hosted in a cloud environment. Even if most of your services in the system are stateless, some part of your system will be stateful, for example, a cloud-hosted NoSQL database or a dedicated service you have implemented yourself. And if you are aiming at good scalability for your design, you have to ensure that the storage for your stateful services scales appropriately. In these terms, services or applications hosted in Docker containers are no different – you need to manage the state, especially if you want the data to be persisted on container restarts or failures.
In this chapter, we will provide you with a better understanding of how state can...