Preface xvAcknowledgments xxiAbout the Author xxiii Part I: Getting Going with Containers 1 Chapter 1: Containerizing Applications with Docker 3 Understanding Pros and Cons of Containerizing Applications 4 .An Application Running Directly on a Host Computer 4 .An Application Running Directly within a Virtual Machine 5 Understanding the Upside of Containers 5 Understanding Challenges of Containerizing Applications 7Understanding What Makes Up Docker 8 The Docker Project 8 The Docker Hub Registry 9 Docker Images and Containers 10 The docker Command 11Approaching Containers 13Summary 14 Chapter 2: Setting Up a Container Run-Time Environment 17 Configuring a Standard Linux System for Docker 18 Configuring Ubuntu for Docker 18 Configuring Fedora for Docker 21 Configuring Red Hat Enterprise Linux for Docker 25 Configuring Other Operating Systems for Docker 27Configuring a Container-Style Linux System for Docker 29 Configuring an Atomic Host for Docker 29 Configuring CoreOS for Docker 32Summary 34 Chapter 3: Setting Up a Private Docker Registry 35 Getting and Starting a Private Docker Registry 36 Setting Up a Docker Registry in Fedora 37 Setting Up a Docker Registry in Ubuntu 40Configuring a Private Docker Registry 43 Configuring the docker-registry Package 43 Configuring the registry Container 46Understanding the Docker Image Namespace 46Summary 48 Part II: Working with Individual Containers 49 Chapter 4: Running Container Images 51 Running Container Images Interactively 54 Starting an Interactive Bash Shell 54 Playing Some Character-Based Games 56 Running Administrative Commands Inside a Container 57Running Containerized Services 59 Running a Containerized Web Server 59 Limiting Resources When Running Services in Containers 62Running Privileged Containers 63Summary 64 Chapter 5: Finding, Pulling, Saving, and Loading Container Images 65 Searching for Images 66 Searching for Images with the docker Command 66 Searching for Images on Docker Hub 69 Searching Other Repositories for Images 70Pulling Images from Registries 73Saving and Loading Images 76Summary 77 Chapter 6: Tagging Images 79 Assigning Names to Images 80Assigning Tags to Images 81Assigning Repository Names to Images 83 Attaching a User Name to an Image 83 Attaching a Repository Name to an Image 85Summary 86 Chapter 7: Investigating Containers 87 Inspecting Images and Containers 88Inspecting an Image 88 Inspecting Base Images with docker inspect 89 Inspecting Application Images with docker inspect 90 Looking at the History of an Image 92Inspecting Running Containers 92 Start a Container to Inspect 93 Inspect an Entire Container Configuration 94 Inspect Individual Container Attributes 99Finding More Ways to Look into Containers 103 Using docker top to See Container Processes 103 Using docker attach to Interact with a Service Inside a Container 104 Using docker exec to Start a New Process in a Running Container 105 Using docker logs to See Container Process Output 106 Using docker diff to See How a Container Has Changed 106 Using docker cp to Copy Files from a Container 107Summary 107 Chapter 8: Starting, Stopping, and Restarting Containers 109 Stopping and Starting a Container 109 Stopping and Starting a Detached Container 110 Starting and Stopping an Interactive Container 112Restarting a Container 113Sending Signals to a Container 114Pausing and Unpausing Containers 115Waiting for a Container''s Exit Code 116Renaming a Container 117Creating a Container 117Summary 118 Chapter 9: Configuring Container Storage 121 Managing Storage for a Container 122 Using Volumes from the Host 122 Data Volume Container 123 Write-Protecting a Bind Mount 124 Mounting Devices 125 Mounting Sockets 125Storage Strategies for the Docker Host 127 Attaching External Storage to a Docker Host 128Summary 130 Chapter 10: Configuring Container Networking 133 Expose Ports to Other Containers 134Map Ports Outside the Host 136 Map a Port from Linked Containers 136 Connect Containers on Different Hosts 138Alternatives to the docker0 Bridge 139 Changing Network Mode for a Container 140 Examining Network Options 140Changing the Docker Network Bridge 142Summary 143 Chapter 11: Cleaning Up Containers 145 Making Space for Images and Containers 146Removing Images 146 Removing Individual Images 147 Removing Multiple Images 148Removing Containers 150 Removing Individual Containers 150 Removing Multiple Containers 152Cleaning Up and Saving Containers 153 Cleaning Up and Saving an Ubuntu Container 153 Cleaning Up and Saving a Fedora Container 154Summary 154 Chapter 12: Building Docker Images 157 Doing a Simple docker build 158Setting a Command to Execute from a Dockerfile 161 Using the CMD Instruction 161 Using the ENTRYPOINT Instruction 162 Using the RUN Instruction 163 Adding Files to an Image from a Dockerfile 164Exposing Ports from an Image within a Dockerfile 165Assigning Environment Variables in a Dockerfile 166Assigning Labels in a Dockerfile 167Using Other docker build Command Options 168Tips for Building Containers 169 Clean Up the Image 169 Keep Build Directory Small 169 Keep Containers Simple 170 Manage How Caching Is Done 170Summary 171 Part III: Running Containers in Cloud Environments 173 Chapter 13: Using Super Privileged Containers 175 Using Super Privileged Containers in Atomic Host 176Understanding Super Privileged Containers 176 Opening Privileges to the Host 177 Accessing the Host Process Table 177 Accessing Host Network Interfaces 178 Accessing Host Inter-Process Communications 179 Accessing Host File Systems 179Preparing to Use Super Privileged Containers 180Using the atomic Command 180 Installing an SPC Image with atomic 182 Getting Information about an SPC Image with atomic 182 Running an SPC Image with atomic 183 Stopping and Restarting an SPC with atomic 184 Updating an SPC Image 184 Uninstalling an SPC Image 185Trying Some SPCs 185 Running the RHEL Tools SPC 186 Running the Logging (rsyslog) SPC 187 Running the System Monitor (sadc) SPC 189Summary 191 Chapter 14: Managing Containers in the Cloud with Cockpit 193 Understanding Cockpit 194Starting with Cockpit 198Adding Servers into Cockpit 199Working with Containers from Cockpit 201 Adding Container Images to Cockpit 201 Running Images from Cockpit 201Working with Network Interfaces from Cockpit 204Configuring Storage from Cockpit 207Doing Other Administrative Tasks in Cockpit 208 Managing Administrator Accounts in Cockpit 208 Open a Terminal in Cockpit 209Summary 210 Part IV: Managing Multiple Containers 211 Chapter 15: Orchestrating Containers with Kubernetes 213 Understanding Kubernetes 214Starting with Kubernetes 216Setting Up an All-in-One Kubernetes Configuration 218 Installing and Starting Up Kubernetes 218 Starting Up a Pod in Kubernetes 220 Working with Kubernetes 223Summary 224 Chapter 16: Creating a Kubernetes Cluster 225 Understanding Advanced Kubernetes Features 226Setting Up a Kubernetes Cluster 226 Step 1: Install Linux 227 Step 2: Set Up Kubernetes Master 227 Step 3: Set Up Kubernetes Nodes 230 Step 4: Set Up Networking with Flannel 231Starting Up Pods in a Kubernetes Cluster 233Deleting Replication Controllers, Services, and Pods 237Summary 238 Part V: Developing Containers 239 Chapter 17: Developing Docker Containers 241 Setting Up for Container Development 241 Choosing a Container Development Environment for Red Hat Systems 242 Container Development Environments from Docker 246Using Good Development Practices 247 Gathering or Excluding Files for a Build 248 Taking Advantage of Layers 249 Managing Software Packages in a Build 250 Learning More about Building Containers 251Summary 252 Chapter 18: Exploring Sample Dockerfile Files 253 Examining Dockerfiles for Official Docker Images 254 Viewing a CentOS Dockerfile 254 Viewing a Busybox Dockerfile 257Examining Dockerfiles from Open Source Projects 258 Viewing a WordPress Dockerfile 258 Viewing the MySQL Dockerfile 260Examining Dockerfiles for Desktop and Personal Use 263 Viewing a Chrome Dockerfile 263 Viewing a Firefox Dockerfile 267Summary 270 Index 273.
Docker Containers : Build and Deploy with Kubernetes, Flannel, Cockpit, and Atomic