What you will learn in Bootstrapping Microservices, Second Edition: With Docker, Kubernetes, GitHub Actions, and Terraform
With Docker, Kubernetes, GitHub Actions, and Terraform
Chapter by chapter
Concepts explained in this book
- microservice architectureAn architectural style that structures an application as a collection of small, independently deployable services with distinct boundaries.
- Docker ComposeA Docker Compose file is a declarative configuration file that defines the services, containers, images, and related settings for a multi-container application.
- deployment pipelineA CI/CD pipeline is an automated workflow that validates and delivers software changes through continuous integration and continuous delivery or deployment stages.
- testA documented sequence of actions and conditions that demonstrates or evaluates a specified software behavior.
- KubernetesAn open-source platform for orchestrating containerized workloads and services across a cluster of computers.
- video-storage microserviceThe book's storage-facing microservice abstraction through which video content is retrieved independently of its storage provider.
- container registryA container registry is a service that stores, manages, and distributes container images, with access controls such as private repositories.
- video streaming microserviceA named FlixTube microservice responsible for the application's video-streaming capability.
- code reloadingA development technique that detects source-code changes and automatically restarts or reloads a running application.
- monolithic architectureAn application whose functionality is implemented in a single large service rather than multiple independently deployable services.
- Node.jsNode.js is an open-source JavaScript runtime built on Chrome's V8 engine for executing JavaScript outside a web browser.
- kubectlkubectl is the Kubernetes command-line tool for communicating with a Kubernetes cluster and managing its resources and workloads.
- end-to-end testingEnd-to-end testing evaluates an application through its user-facing interfaces across the components needed to deliver a user-visible behavior.
- test fixtureA database fixture is a predefined set of data organized for loading into a database to support testing or demonstrations.
- shell scriptA shell script is a text file containing commands interpreted and executed by a command-line shell.
- test environmentA test environment is a deployment environment used to evaluate software changes separately from production.
- debuggingDebugging is the process of locating, diagnosing, and correcting defects in software or operational workflows.
- environment variableAn environment variable is a named value supplied by the execution environment to configure a program without changing its source code.
- indirect messagingIndirect messaging is a communication pattern in which a sender and receiver exchange information through an intermediary or event channel rather than direct calls.
- package.jsonpackage.json is a JSON-formatted project manifest that declares package metadata, dependencies, and related configuration for a Node.js project.
- distributed systemAn application architecture in which components execute as separate processes or services that communicate across a network.
- history microserviceA history microservice is a microservice that records and retrieves historical events or activity data for an application.
- integration testIntegration testing evaluates how multiple software components work together through their real interfaces and interactions.
- scalabilityThe ability of an application or its data-management components to accommodate increasing workload or size by expanding resources or capacity.
- image tagA Docker image tag is a human-readable label that identifies a particular image reference or version, optionally including a registry location.
- podA Kubernetes Pod is the smallest deployable unit in Kubernetes, consisting of one or more co-located containers that share network and storage resources.
- GitHub ActionsGitHub Actions is a workflow automation platform for building, testing, and deploying software from repositories hosted on GitHub.
- infrastructure as codeThe practice of defining, provisioning, and managing infrastructure through machine-readable code.
- Kubernetes DeploymentA Kubernetes Deployment is a controller that manages replicated application pods and replaces failed instances to maintain the declared state.
- databaseA database is a system that stores and manages persistent structured data for retrieval and modification.
- Azure StorageAn Azure Storage account is a Microsoft Azure resource that provides access to cloud storage services and their stored data.
- docker rundocker run is a Docker command that creates and starts a container from a specified image.
- development dependencyA development dependency is a software package required for developing, testing, or building an application but not necessarily for running it in production.
- complexityThe difficulty of understanding, changing, operating, scaling, and coordinating the components and interactions of a software system.
- automationThe execution of operational or development tasks by software with reduced manual intervention.
- GitHub Actions secretA GitHub secret is an encrypted repository or organization value that GitHub Actions workflows can access without exposing its underlying credential or configuration value.
- database serverA database server is a server process or computer that provides database storage and data-management services to applications.
- Azure resource groupAn Azure resource group is a management container that organizes related cloud resources.
- MongoDBMongoDB is a document-oriented NoSQL database management system.
- npmThe default package manager for Node.js that installs packages and manages project metadata and dependencies.
- containerA container is an isolated execution environment that packages an application with its dependencies while sharing the host operating system kernel.
- single repository structureA monorepo is a single source-code repository that contains multiple services, applications, or related projects managed together.
- production-like environmentA production-like environment is a nonproduction environment configured to approximate the operational conditions of production.
- DockerA Docker container is an isolated runtime instance of a container image with its own filesystem, processes, and resource context.
- docker pushdocker push is a Docker CLI command that uploads a tagged Docker image to a container registry.
- mockingMocking is the replacement of a software dependency with a controlled substitute that provides compatible behavior for development or testing.
- serviceA Kubernetes abstraction that exposes a set of pods through a stable network endpoint and service-discovery identity.
- PlaywrightPlaywright is a browser automation and end-to-end testing framework.
- JavaScriptJavaScript is a high-level programming language standardized as ECMAScript and commonly used for web and server-side development.
- triageThe practice of prioritizing problems according to their severity or urgency so that the most serious are addressed first.
- root causeThe underlying condition or defect that produces an observed software problem.
- npm scriptAn npm script is a named command configuration in a project's package.json file that can be invoked through npm.
- port forwardingPort forwarding is the redirection of network traffic arriving at one port to a designated port on another network endpoint.
- JestJest is a JavaScript testing framework for running automated tests.
- Terraform state fileA Terraform state file is a local or remote file that records the state of infrastructure managed by Terraform, including associated resource values.
- DockerfileA Dockerfile is a script containing instructions for building a Docker image and specifying its included code and assets.
- RabbitMQRabbitMQ is a message broker that routes messages between producers and consumers.
- Azure PortalThe Azure portal is Microsoft's web interface for creating, configuring, monitoring, and managing Azure resources.
- container imageA Docker image is an immutable package containing the code, dependencies, assets, and resources needed to instantiate a containerized application or service.
- ExpressExpress is a Node.js web application framework for building HTTP servers and request-handling routes.
- queueA RabbitMQ queue is a buffer that stores messages until consumers retrieve them.
- direct messagingDirect messaging is synchronous communication in which one microservice sends a message directly to a specifically addressed other microservice and receives an immediate handling result.
- dependencyA software dependency is an external component, package, or service required by a project or application to build or operate correctly.
- evidenceInformation that helps identify the location and cause of a software defect.
- problem isolationThe systematic reduction of the components and scope involved in a software defect until its source is identified.
- workaroundA temporary approach that restores or preserves functionality without correcting the underlying defect.
- database-per-microserviceAn architectural pattern in which each microservice has its own separately managed database.
- terraform applyterraform apply is the Terraform command that compares configuration with recorded state and applies the required infrastructure changes.
- Azure Storage APIThe Azure Storage API is the programmatic interface for authenticating with and accessing data in Azure Storage.
- @azure/storage-blob@azure/storage-blob is the npm package that provides JavaScript and Node.js access to Azure Blob Storage.
- storage accountA storage account is an Azure resource that provides an access boundary and configuration for stored data.
- blob containerA storage container is a logical Azure Storage location that organizes stored files or blobs.
- Azure CLIAzure CLI is Microsoft's cross-platform command-line interface for creating, configuring, and managing Azure resources.
- logLogging is the practice of recording runtime events, messages, and diagnostic information generated by software.
- microservices-first approachAn application-development approach in which an application is designed and built as microservices from its inception rather than converted from a monolith.
- productionA production environment is a deployment environment that hosts an application for access by real customers or users.
- fault toleranceFault tolerance is the ability of a system to continue providing acceptable service when some components fail.
- development modeDevelopment mode is an application execution mode configured for rapid iteration, feedback, and development-oriented tooling.
- video viewed messageA video viewed message is an application message indicating that a user has started watching or viewed a video.
- docker builddocker build is a Docker CLI command that constructs a Docker image from a build context and instructions.
- meta-repositoryA meta-repository is an aggregate repository that coordinates content from multiple separate code repositories as a cohesive whole.
- deployment automationThe practice of releasing application software through automated, repeatable tooling rather than manual operations.
- video identifierA video identifier is a stable identifier used to refer to a video independently of its physical storage location.
- API gatewayAn architectural component that serves as an entry point between clients and backend services.
- continuous improvementA development cycle consisting of a small code change followed by evaluation and possible correction.
- configurationA set of values and settings that determine how a software component operates.
- docker compose updocker compose up is a Docker Compose command that creates and starts the services defined by an application configuration.
- file systemFile storage is a persistent storage mechanism that organizes data as files.
- private registryA private container registry is a container registry whose stored images are restricted to authorized users or systems.
- serverAn HTTP server is software that listens for HTTP requests and returns HTTP responses.
- nodemonnodemon is a command-line development tool that monitors files and automatically restarts a Node.js application when changes are detected.
- request messageAn HTTP POST request is an HTTP request that submits data to a server for processing or resource creation.
- manual deploymentManual deployment is the practice of releasing software through steps executed directly by a person rather than by an automated workflow.
- refactoringContinuous refactoring is the repeated restructuring of software during development without changing its externally observable behavior.
- metadata microserviceA FlixTube service responsible for managing video metadata and its associated storage information.
- envsubstenvsubst is a command-line utility that substitutes references to environment variables in input text with their corresponding values.
- docker compose up --builddocker compose up --build is a Docker Compose command invocation that rebuilds service images before creating and starting the services.
- development DockerfileA development Dockerfile is a Dockerfile used to build a container image with a configuration optimized for software development.
- Docker volumeA Docker volume is persistent storage managed separately from a container's writable filesystem and lifecycle.
- error handlingAn error-handling strategy is a systematic approach for detecting, responding to, and recovering from software errors.
- docker logindocker login is a Docker CLI command that authenticates a client to a container registry.
- AxiosAxios is a JavaScript library for making HTTP requests, including requests through promise-based asynchronous APIs.
- video streamingStreaming video is audiovisual content delivered incrementally over a network for near-immediate playback.
- cloud storageCloud storage is remotely managed storage accessed over a network and provided as an infrastructure service.
- health checkA health check is an automated assessment of whether a running service or workload is functioning and available according to defined criteria.
- fault isolationFault isolation is the containment of a failure within one component so that it has minimal effect on other components or users.
- npxA Node.js command-line utility for executing packages installed in a project's local dependencies.
- docker tagdocker tag is a Docker command that creates or updates a tag referring to a container image.
- exchangeA RabbitMQ exchange is a message-routing component that receives published messages and directs them to queues according to bindings and routing rules.
- repositoryA code repository is a storage location that contains a software project's source code and related development history.
- handlerAn HTTP route handler is a server-side function that processes requests matching a specified HTTP route and produces a response.
- npm start commandnpm start is the conventional npm command for launching a Node.js application through its configured start script.
- replicaA replica is an additional running instance that duplicates the functionality of another service or component.
- single-process systemAn application whose complete execution occurs within one operating-system process.
- authorizationAuthorization is the process of determining which actions or resources an authenticated participant is permitted to access.
- production dependencyA production dependency is a software package required when running an application in production but not for development.
- load balancerA load balancer is a network component that distributes incoming traffic across multiple service instances or endpoints.
- sensitive informationA sensitive value is configuration or state data whose disclosure could compromise security and is therefore specially protected in displayed or stored form.
- collectionA MongoDB collection is a group of related documents within a database.
- storage serverA storage provider is a service or system that supplies persistent data-storage capabilities to an application.
- redundancyRedundancy is the use of multiple equivalent instances or components so operation can continue when one fails.
- amqplibamqplib is a Node.js client library for connecting to and communicating with AMQP message brokers such as RabbitMQ.
- kubectl applykubectl apply is a Kubernetes command that creates or updates cluster resources from declarative configuration files or manifests.
- greenfield environmentA new application developed without needing to preserve or integrate with an existing application implementation.
- docker image lsdocker image list is a Docker CLI command that displays Docker images available locally and their tags.
- circuit breaker patternA circuit breaker is a resilience pattern that stops requests to a failing upstream service and resumes them after checking that the service has recovered.
- work queue patternA job queue is a processing pattern that records and schedules heavyweight tasks for asynchronous execution and retry after failure.
- retryA technique that repeats a failed operation a specified number of times, optionally pausing between attempts.
- timeoutA timeout is a limit on how long a software operation waits for a response or completion before it is treated as failed.
- AzureMicrosoft Azure is Microsoft's public cloud computing platform for deploying and operating applications, infrastructure, and managed services.
- horizontal scalingHorizontal scaling is the technique of increasing capacity by running multiple instances of a component and distributing its workload among them.
- testing pyramidThe testing pyramid is a model that organizes tests into layers, with broader and generally slower tests placed above narrower and generally faster tests.
- database fixture REST APIA database fixture REST API is an HTTP API that loads and unloads predefined test data in a database.
- kubectl get servicesA kubectl command that displays information about Kubernetes Services, including their assigned external addresses.
- hybrid approachThe hybrid approach is an application architecture that retains a monolith for most functionality while surrounding it with microservices where their flexibility or scalability is beneficial.
- docker psdocker ps is a Docker command that lists containers on the Docker host.
- node portA Kubernetes Service type that exposes a service on a port of each cluster node for access from outside the cluster.
- YAMLYAML is a human-readable data serialization and configuration format designed for structured machine-readable documents.
- streamingNode.js streaming is the incremental processing and transfer of data through Node.js stream objects rather than loading the complete data set at once.
- messageA message is a discrete piece of data transmitted between software components to communicate an event, command, or information.
- Terraform providerA Terraform provider is a plugin that enables Terraform to interact with a specific infrastructure platform or service through its API.
- docker compose downdocker compose down is a Docker Compose command that stops and removes application services and their associated containers and networks.
- domain-driven designDomain-driven design is a software design approach that models software around the concepts and boundaries of its problem domain.
- kubectl configurationA Kubernetes configuration is connection and authentication data that enables kubectl to access a Kubernetes cluster.
- continuous deploymentContinuous deployment is a software delivery practice that automatically deploys changes to a target environment after they pass the required validation.
- multiple-recipient messageA multiple-recipient message is a message distributed independently to multiple recipients across an application.
- autoscalingElastic scaling is the automatic expansion and contraction of a service's running capacity in response to changing workload.
- observabilityObservability is the practice of exposing and analyzing detailed telemetry to understand a system's internal behavior from its external outputs.
- parameterizationParameterization is the practice of representing changeable configuration values as parameters or placeholders rather than embedding them directly in code or configuration.
- rolling updateA rolling update is a deployment technique that incrementally replaces running application instances with a new version while keeping other instances available.
- locatorA Playwright locator is an API object that identifies elements in a web page for inspection or interaction.
- pageA Playwright page is an API object representing a browser page and exposing navigation and interaction operations.
- abort and restartAbort and restart is an error-handling strategy that terminates a failing process and starts it again.
- exceptionAn exception is a runtime object or control-flow event representing an abnormal condition that can interrupt normal program execution.
- failureAn error is an abnormal condition or event that causes software to produce incorrect behavior or prevents it from completing an operation.
- resumeResume operation is an error-handling strategy that allows a process to continue after an unexpected error.
- global error handlerThe uncaughtException event is a Node.js process event emitted when an exception reaches the event loop without being caught.
- manual testingThe evaluation of software behavior by a person executing test steps rather than by an automated test program.
- service communicationThe network interaction through which independently deployed microservices exchange information and coordinate behavior.
- liveness checkA liveness probe is a Kubernetes health-check configuration that determines whether a container or pod is still functioning and should continue running.
- readiness checkA Kubernetes readiness probe is a health check that indicates whether a container or application instance is ready to receive traffic.
- riskDeployment risk is the possibility that releasing a software change will cause failures or disruption in an application.
- technology stackA technology stack is the combination of tools, software, frameworks, and other technologies used to build an application or service.
- couplingCoupling is the degree of dependency between software components or services.
- securityData protection is the set of practices for preventing data from being damaged, lost, overwritten, or deleted.
- driftConfiguration drift is the divergence between the recorded or declared configuration of infrastructure and its actual state.
- npm testnpm test is the conventional npm command for running a project's automated tests.
- blue-green deploymentBlue-green deployment is a release technique that runs old and new application versions in parallel and switches traffic between them.
- gitGit is a distributed version control system for tracking changes to files and coordinating software development.
- anonymous queueA RabbitMQ queue created without a specified name so the broker generates a unique queue name for one consumer.
- HTTPHTTP is the application-layer protocol used to exchange requests and responses across networks.
- kubectl logskubectl logs is a kubectl command that retrieves container logs from a Kubernetes pod.
- Kubernetes DashboardThe Kubernetes dashboard is a web-based user interface for viewing and managing Kubernetes cluster resources and workloads.
- SternStern is a command-line tool for retrieving and following logs from multiple Kubernetes pods using name or label patterns.
These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.
