Book Profile
Bootstrapping Microservices, Second Edition (MEAP) With Docker, Kubernetes, GitHub Actions, and Terraform
Ashley Davis
A hands-on, practical guide that takes developers from zero to a fully deployed, continuously delivered microservices application using Docker, Kubernetes, and Terraform—cutting through the steep learning curve by building a real video-streaming platform step by step.
Get the book →Bootstrapping Microservices, Second Edition demolishes the myth that microservices are too complex for individuals or small teams to adopt from the start. Author Ashley Davis guides readers through building FlixTube, a real video-streaming application, starting with a single Node.js microservice and progressively adding Docker packaging, Docker Compose for local development, cloud file storage, databases, inter-service messaging with HTTP and RabbitMQ, Kubernetes production deployment, Terraform infrastructure-as-code, GitHub Actions continuous deployment pipelines, and automated testing with Jest and Playwright. Every concept is introduced at the moment it is needed, and every tool is demonstrated with working code you can run yourself. By the end, readers possess a transferable, language-agnostic recipe for shipping any microservices application with confidence.
What it argues
A causal model describing how architectural design choices, tooling adoption decisions, and engineering practices (design levers and contextual conditions) shape the psychological and behavioral states of development teams, which in turn determine application-level and business-level outcomes such as deployment frequency, system reliability, scalability, and developer productivity.
Key ideas it contributes
- Microservice Granularity — The architectural choice of how finely to decompose application functionality into separate, independently deployable processes, ranging from a single monolithic process (zero granularity) to many small services each owning one bounded context (high granularity).
- Inter-Service Loose Coupling — The degree to which microservices are designed to minimize direct dependencies on each other's internal implementations, using well-defined API boundaries, avoiding shared databases, and preferring indirect messaging where possible.
- Single Responsibility Adherence — The extent to which each microservice is designed and maintained to address only one conceptual area of business domain responsibility, consistent with the single responsibility principle from software design and the bounded context concept from domain-driven design.
- Containerization Adoption (Docker) — The extent to which every microservice is packaged as an immutable Docker image with a production and development Dockerfile, published to a private container registry, and deployed as containers consistently across local development, testing, and production environments.
- Infrastructure-as-Code Adoption (Terraform) — The degree to which cloud infrastructure resources (container registries, Kubernetes clusters, networking, role assignments, storage accounts) are defined in version-controlled declarative Terraform HCL code and created by executing that code, rather than being provisioned manually through GUIs or ad-hoc CLI commands.
- Continuous Deployment Pipeline Maturity — The sophistication, reliability, and completeness of automated pipelines that detect code changes (via GitHub Actions triggers), build and test service Docker images, publish them to a container registry, and deploy them to production Kubernetes clusters without manual intervention.
- Automated Test Coverage and Layering — The breadth and depth of automated tests applied to the microservices application across all three tiers of the testing pyramid: unit tests testing isolated functions with mocks (Jest), integration tests exercising whole microservices against real dependencies (Jest + real database), and end-to-end tests exercising the full application through the browser UI (Playwright + Docker Compose).
- Local Development Environment Quality — The degree to which the local development setup enables fast, low-friction iterative coding cycles with minimal rebuild latency, production environment parity, and easy project switching, achieved through Docker Compose multi-service orchestration, nodemon live reload, shared Docker volumes for code synchronization, and separate dev/prod Dockerfiles.