Table of contents : Cover Page Title Page Copyright Page Dedication Page About the Author Technical Review Partner Acknowledgements Preface Errata Table of Contents 1. Introduction to Docker Introduction Structure History of Docker Pre-Docker Era Birth of Docker Docker v1.0 Understanding Containerization Introduction to Docker Benefits of Docker Docker vs Competitors Distinguishing Features of Docker Docker’s Best Selling Point: Portability The World Needs Microservices: Docker’s Contributions Limitations of Docker Learning Curve Docker and Software Development Lifecycle Docker Affects Different Roles Software Engineer DevOps Engineer Docker’s Security Considerations Examples of Docker in the Real World Conclusion References 2. Docker Architecture and Components Introduction Structure Architecture Significance Architecture Components Installation of Docker Docker Daemon Primary Role of Docker Daemon Docker Daemon Delegation of Responsibility Overview and Background Namespaces and Chroot Performance Impact of the Docker Daemon Resource Utilization Container Isolation The Overhead of Containerization Scaling and Resource Allocation System Tuning and Optimization Docker Clients Docker Command-Line Interface (CLI) Docker Remote HTTP API Docker SDKs and Client Libraries Third-Party Tools and Utilities Docker Desktop Docker Images: Structure and Composition Docker Image Structure Building a Docker Image Hello World in Docker Docker Containers Running a Docker Container Inner Working of a Docker Container Docker Registry: Facilitating Image Storage and Distribution Image Storage and Distribution Private and Public Registries CI/CD Pipelines Setting Up a Private Docker Registry: An Example Server Setup Generate SSL Certificates Configure Registry (Optional) Start Registry Container Push and Pull Images Conclusion References 3. Building and Managing Docker Images Introduction Structure Docker Image Basics Understanding the Anatomy of a Docker Image A Practical Example Exploring the Different Layers and Their Significance Leveraging the Docker Image Cache for Faster Builds Optimizing Image Size and Reducing Complexity Creating Docker Images Building Docker Images Using Dockerfiles Difference Between ENTRYPOINT and CMD Defining the Application Environment and Dependencies Incorporating Best Practices for Image Creation Understanding Docker Context Practical Example Automating the Build Process with Build Hooks and ARGs Build Hooks ARGs (Build-Time Variables) ONBUILD Instruction Image Management and Distribution Saving and Loading Docker Images for Offline Use Pushing and Pulling Images to and from Docker Registries Tagging and Versioning Docker Images Effectively Managing Image Repositories and Repository Automation Advanced Techniques Utilizing Multi-Stage Docker Builds for Optimized Images Designing and Implementing Multi-Container Applications Microservices Architecture Container Orchestration Networking and Communication Service Dependencies and Discovery Environment Configuration Understanding Image Vulnerabilities and Security Considerations Image Scanning and Vulnerability Assessment Base Image Security Secure Configuration and Runtime Isolation Secrets and Sensitive Data Management Access Control and Least Privilege Principle Image Integrity and Authentication Best Practices for Image Update and Maintenance Automated Image Builds Version Control for Dockerfiles Regular Security Scanning and Updates Immutable Image Tags Retire and Remove Unused Images Practical Example Conclusion References Useful Links 4. Docker Networking Introduction Structure Understanding Docker Networking Fundamentals Docker Default Networking Network Namespaces Bridge Networking Mode Host Networking Mode Overlay Networking Mode MACVLAN Networking Mode ipvlan Networking Mode Null Networking Mode Third-party Network Drivers Docker DNS and Service Discovery Docker’s Approach to DNS Resolution Customizing DNS Configuration Service Discovery with Docker’s Embedded DNS Server Using External Service Discovery Solutions Container-to-Container Communication Communicating Between Linked Containers Utilizing Container Aliases Connecting Containers with User-defined Networks Interacting Across Different Network Types Managing Network Security Docker’s Built-in Security Features Implementing Network Policies and Firewall Rules Security Best Practices for Docker Networking Advanced Network Configuration Multi-host Networking with Docker Swarm Creating a Docker Swarm Using IPv6 in Docker Networks Custom Bridge Networks and Subnet Configuration Network Scopes and External Connectivity Conclusion References Useful Links 5. Persistent Data Management with Docker Introduction Structure Importance and Benefits of Docker Volumes Importance of Docker Volumes Importance of Docker Volumes in Containerization Types of Docker Volumes Named Volumes Host Bind Mounts Anonymous Volumes Comparing Different Volume Types Docker Storage Drivers Role and Importance of Storage Drivers Handling Data in Containers with Storage Drivers Overlay2 Storage Driver AUFS Storage Driver Device Mapper Storage Driver Btrfs Storage Driver ZFS Storage Driver VFS Storage Driver Data Management Strategies Backup Restore Real-World Example Managing Volume Data Lifecycle Versioning Data Archiving Old Volumes Ensuring Data Integrity Across Container Updates Advanced Consideration Volume Plugins and Extensibility Examples of Docker Volume Plugins Docker Volume Driver for Amazon EBS Rex-Ray Portworx NetApp Trident Advantages and Disadvantages Security and Considerations User and Group, Permissions Encryption and Data Protection Securing Data with Third-Party Tools Docker Volume Crypt HashiCorp Vault SOPS (Secrets OPerationS) Bitnami’s Sealed Secrets Docker Secrets Management Tools Conclusion References Useful Links 6. Docker Compose for Simplified Application Deployment Introduction Structure Understanding Docker Compose Essentials Streamlining Services with Docker Compose Syntax and Definition of Docker Compose Example 1: Web App and Database Example 2: Background Worker and Message Broker Example 3: Load Balancer with HAProxy Example 4: Batch Jobs Advanced Tips and Techniques Environment Variables Volumes Working with Multiple Compose File Compose Profiles Scaling Applications Live Update Conclusion Test Your Knowledge Multiple Choice Questions Answers References 7. Scaling Applications with Docker Swarm Introduction Structure Introducing Docker Swarm Importance of Scaling Docker Swarm in the Scaling Landscape Docker Swarm vs Kubernetes Definitions and Terminologies Cluster Manager Worker Service Task Overlay Network Stack Global Service Setting Up Docker Swarm Docker Nodes Common Attributes Docker Swarm Common Attributes Bootstrapper Creating and Running Services Run a Simple Web Server Running WordPress Stack CLI Reference docker swarm docker config and docker secret docker node docker service docker stack Load Balancing and Service Discovery Service Discovery in Docker Swarm Practical Example Docker Swarm Network Overlay Load Balancer Algorithm Conclusion References 8. Securing Docker Deployments Introduction Structure Best Practices to Secure Docker Official Images Defining Official Images Verifying Official Status Integrating Official Images into Your Workflow Regularly Update Images Reasons for Updating Docker Images Best Practices for Updating Docker Images Least Privilege Principle Use Non-Root Users Limit Capabilities Isolate Containers Securing the Docker Daemon Enforce Docker Daemon TLS Authentication Restricting Docker Daemon Access Using Firewalls The Role of Firewalls Implementing Firewall Rules Necessity of Firewall Access Control for Docker Resources Role-based access control (RBAC) for Docker Auditing and Monitoring Docker Resource Access Image Security and Vulnerability Scanning Image Security Vulnerability Scanning Continuous Vulnerability Scanning in CI/CD Pipelines Integration with CI/CD Key Practices Benefits Hardening Docker Hosts Host OS Security Best Practices Isolating Containers from the Host Kernel Hardening and Security Patches Kernel Hardening Security Patch Management Conclusion References Docker Official Documentation Linux Kernel Hardening SELinux and AppArmor Container Orchestration Platforms Linux Kernel Patch Management Container Security Scanning This Book’s Codes and Lab Exercises Miscellaneous 9. Docker in Continuous Integration and Deployment Introduction Structure Understanding CI/CD Fundamentals Importance of CI/CD Advantages of CI/CD Creating Your First CI/CD Pipeline GitHub Actions GitLab CI Docker CI/CD Integration Best Practices Multi-Platform Builds Necessity of Multi-Platform Builds Multi-Platform Build in Action Docker Compose in CI/CD Security and Docker in CI/CD Security Considerations Image Scanning and Vulnerability Management Best Practices Image Scanning in CI Monitoring Tooling Available for Monitoring CI/CD Log Management Container Observability Observability Tools Best Practices Conclusion References and Useful Links 10. Docker on Cloud Platforms Introduction Structure Understanding Cloud-Native Docker Key Characteristics of Cloud-Native Docker Benefits of Cloud-Native Docker Cloud Service Providers Amazon Web Services (AWS) Amazon Elastic Container Service (ECS) Amazon Elastic Kubernetes Service (EKS) AWS Fargate Amazon Beanstalk Microsoft Azure Azure Container Instances (ACI) Azure Kubernetes Service (AKS) Azure Service Fabric Google Cloud Platform (GCP) Google Kubernetes Engine (GKE) Google Compute Engine (GCE) Cloud Run Other Cloud Providers IBM Cloud Kubernetes Service DigitalOcean Kubernetes (DOKS) Alibaba Cloud Container Service for Kubernetes (ACK) Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) Red Hat OpenShift Interweaving Docker and Cloud Providers Container Orchestration Kubernetes Docker Swarm Red Hat OpenShift Nomad by HashiCorp Deployment Strategy Blue-Green Deployments Canary Releases Rolling Updates A/B testing Feature flags Networking and Security Virtual Private Clouds (VPCs) Security Groups Network Isolation and Segmentation Encryption and Identity Management Monitoring and Logging Cloud Provider Monitoring Services Third-Party Monitoring Tools Container Orchestration Tool Integration Cost Optimization Rightsizing Resources Reserved Instances and Savings Plans Auto-Scaling and Elasticity Spot Instances and Preemptible VMs Cost Allocation and Tagging Hybrid and Multi-Cloud Deployments Hybrid Deployments Multi-Cloud Deployments Benefits of Hybrid and Multi-Cloud Deployments Complexities and Considerations Best Practices for Hybrid and Multi-Cloud Deployments Practical Examples Deploying a Containerized App in AWS Case Studies Ikea Retail uses Docker in production on AWS Things Ikea Did Right Things They Learned Ikea Overall Experience Netflix Usage of Docker in Production Things Netflix Did Right Things They Learned Netflix Overall Experience Use Cases and Best Practices Best Practices Future Trends Solutions and offerings Conclusion References and Useful Links Books Online Resources Training and Courses Articles and Blogs Forums and Community Platforms Additional Resources 11. Introduction to Kubernetes Introduction Structure Origins and Evolution of Kubernetes Key Characteristics Importance of Kubernetes Real-world Examples Kubernetes Architectures Control Plane Worker nodes Current vs Desired State Kubernetes Concepts Control Plane Self-Managed Control Plane Cloud-Managed Control Plane Nodes Pods Deployments Statefulsets Services Creating Your First Kubernetes Cluster Creating Your First Kubernetes Application Creating Your First Statefulset Exposing the Service Creating Your First ConfigMap and Secret Kubernetes Wrap up Conclusion References Books Online courses Official documentation Community Resources 12. Exploring Advanced Docker Concepts Introduction Structure Docker in Docker Rootless versus Root Mode Dev Environments WASM Docker Extensions Docker Content Trust (DCT) Docker Stats Daemon Configuration Live Restore Remote Access TLS Docker Alternative Runtimes Buildkit Custom Dockerfile Syntax Linked Copy Mount in Run Docker Buildx Conclusion 13. Future Trends in Containerization Introduction Structure The Rise of Multi-Cloud and Hybrid Cloud Environments Benefits of Multi-Cloud and Hybrid Cloud Environments Real-World Example Increased Rate of Kubernetes Adoption Kubernetes’ Comprehensive Capabilities Widespread Adoption of Kubernetes Strong Community Support Serverless Computing: A Paradigm Shift in Application Development Critical Characteristics of Serverless Computing Advantages of Serverless Computing Edge Computing: Bringing Computation Closer to the Edge Traction of Edge Computing in the Future AI and ML in Containerization: A Convergence of Technologies Current Applications of AI and ML in Containerization Future Trends in AI and ML for Containerization Observability and Monitoring The Importance of Observability and Monitoring in Containerization Examples of Successful Observability and Monitoring Products Widely Adopted Solutions for Observability and Monitoring Container Security: Shielding Applications in the Containerized World The Necessity of Container Security Evolution of Container Security Future of Container Security GitOps and Continuous Delivery: A Paradigm Shift in Container Management Adoption of GitOps and CD Historical Solutions and their Limitations Future Trends of GitOps and CD Microservices Architecture: A Journey from Monoliths to Loosely Coupled Microservices The Rise of Microservices Critical Principles of Microservices Architecture Benefits of Microservices Architecture Microservices and Containerization Future Trends of Microservices Architecture Cloud-native Development Cloud-native Development Necessity Cloud-native Development Minimum Requirement Cloud-native Development Aspects Future Trends of Cloud-native Development Service Mesh and Container Networking Service Mesh: The Enabler of Resilient and Secure Microservices Communications Container Networking: The Foundation for Seamless Microservice Connectivity Future Trends of Service Mesh and Container Networking Be Prepared and Sharpen Your Axe Conclusion Final Word Appendix A: All-in-One Cheatsheet Docker Setup on CentOS Docker Host-Related Commands Docker - List Containers Docker - Manipulate Containers Docker - Images Docker – Networks and Volumes Docker – Sample Dockerfile Index