Table of contents : Table of Contents About the Author About the Technical Reviewer Chapter 1: Virtualization Basics History of Virtualization What Is Virtualization? VM-Based Virtualization Container-Based Virtualization Hypervisors Virtual Machine Monitor Device Model Memory Virtualization Shadow Page Tables Nested Page Tables with Hardware Support CPU Virtualization Binary Translation in the Case of Full Virtualization Paravirtualization in the Case of XEN with Hypercalls IO Virtualization Full Virtualization Paravirtualization Summary Chapter 2: Hypervisors The Intel Vt-x Instruction Set The Quick Emulator Creating a VM Using the KVM Module Vhost-Based Data Communication What Is an eventfd? Alternative Virtualization Mechanisms Unikernels Project Dune novm Summary of Alternative Virtualization Approaches Summary Chapter 3: Namespaces Namespace Types UTS PID Mount Network IPC Cgroup Time Data Structures for Linux Namespaces Adding a Device to a Namespace Summary Chapter 4: Cgroups Creating a Sample Cgroup Cgroup Types CPU Cgroup Block I/O Cgroups Understanding Fairness Understanding Throttling Summary Chapter 5: Layered File Systems A File System Primer Brief Overview of Pseudo File Systems Understanding layered File Systems The Union File System OverlayFS Summary Chapter 6: Creating a Simple Container Framework The UTS Namespace Golang Installation Building a Container with a Namespace Adding More Namespaces Launching a Shell Program Within the Container Providing the Root File System The Mount Proc File System Enabling the Network for the Container Virtual Networking: A Brief Primer Enabling Cgroups for the Container Summary Chapter 7: Why Choose Rust Introduction Rust Installation Variables Data Types Primitive Data Types Compound Data Types Structs Enums Unions Functions Defining Functions Calling Functions Function Arguments Function Return Values Function Scope and Lifetime Function Overloading Generics Conditional Logic If/Else Statements Loops Match Expressions Exception Handling Rust Security Features Ownership System Lifetimes Pattern Matching Closures Traits Summary Chapter 8: Containers in Rust Refreshing Linux Namespaces? Creating a PID Namespace Creating a Network Namespace Creating a Mount Namespace Writing Complete Container Code Summary Index