Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Free Learning
Arrow right icon
Docker Cookbook
Docker Cookbook

Docker Cookbook: Over 100 practical and insightful recipes to build distributed applications with Docker , Second Edition

Arrow left icon
Profile Icon Cochrane Profile Icon K Khare Profile Icon Jeeva S. Chelladhurai
Arrow right icon
€18.99 per month
Full star icon Full star icon Full star icon Half star icon Empty star icon 3.5 (2 Ratings)
Paperback Aug 2018 352 pages 2nd Edition
eBook
€20.98 €29.99
Paperback
€36.99
Subscription
Free Trial
Renews at €18.99p/m
Arrow left icon
Profile Icon Cochrane Profile Icon K Khare Profile Icon Jeeva S. Chelladhurai
Arrow right icon
€18.99 per month
Full star icon Full star icon Full star icon Half star icon Empty star icon 3.5 (2 Ratings)
Paperback Aug 2018 352 pages 2nd Edition
eBook
€20.98 €29.99
Paperback
€36.99
Subscription
Free Trial
Renews at €18.99p/m
eBook
€20.98 €29.99
Paperback
€36.99
Subscription
Free Trial
Renews at €18.99p/m

What do you get with a Packt Subscription?

Free for first 7 days. $19.99 p/m after that. Cancel any time!
Product feature icon Unlimited ad-free access to the largest independent learning library in tech. Access this title and thousands more!
Product feature icon 50+ new titles added per month, including many first-to-market concepts and exclusive early access to books as they are being written.
Product feature icon Innovative learning tools, including AI book assistants, code context explainers, and text-to-speech.
Product feature icon Thousands of reference materials covering every tech concept you need to stay up to date.
Subscribe now
View plans & pricing
Table of content icon View table of contents Preview book icon Preview Book

Docker Cookbook

Working with Docker Containers

In this chapter, we will cover the following recipes:

  • Listing/searching for an image
  • Pulling an image
  • Listing images
  • Starting a container
  • Listing containers
  • Looking at the container logs
  • Stopping a container
  • Removing a container
  • Removing all stopped containers
  • Setting the restart policy on a container
  • Getting privileged access inside a container
  • Accessing the host device inside a container
  • Injecting a new process into a running container
  • Reading a container's metadata
  • Labeling and filtering containers
  • Reaping a zombie inside a container

Introduction

In the previous chapter, after installing Docker, we pulled an image and created a container from it. Docker's primary objective is running containers. In this chapter, we'll see the different operations we can perform with containers, such as starting, stopping, listing, deleting, and so on. This will help us use Docker for different use cases, such as testing, CI/CD, setting up PaaS, and so on, which we'll cover in later chapters. Before we start, let's verify the Docker installation by running the following command:

    $ docker version  

This will give the Docker client and server version, as well as other details.

I am using Ubuntu 18.04 as my primary environment in which to run these recipes. They should also work with the other environments.

Listing/searching for an image

We need an image to get the container started. Let's see how images are searched for on the Docker registry. As we have seen in Chapter 1, Introduction and Installation, a registry holds the Docker images, which can be both public and private. By default, the search happens on the default public registry, which is the Docker Hub and is located at https://hub.docker.com/.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client.

How to do it...

The docker search command lets you...

Pulling an image

After searching for the image, we can pull it to the system by running the Docker daemon. Let's see how we can do that.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client.

How to do it...

To pull an image from the Docker registry, you can either run the following:

    docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

Or the legacy command:

    docker pull [OPTIONS] NAME[:TAG|@DIGEST]

The following is an example of pulling the ubuntu image:

    $ docker image pull ubuntu
...

Listing images

We can list the images that are available on the system by running the Docker daemon. These images might have been pulled from the registry, imported through the docker image pull command, or created through a Dockerfile.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client.

How to do it...

Run either one of the following commands to list the images:

    $ docker image ls
    $ docker images

How it...

Starting a container

Once we have the images, we can use them to start containers. In this recipe, we will start a container with the ubuntu:latest image and see what happens behind the scenes.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client.

How to do it...

We can start a container using either of the following syntaxes:

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
The docker container run command is recommended over docker run because, in...

Listing containers

We can list both running and stopped containers.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client. You will also need a few running and/or stopped containers.

How to do it...

To list the containers, either run the following command:

    docker container ls [OPTIONS]

Or run the following legacy command:

    docker ps [OPTIONS]

How it works...

...

Looking at the container logs

If the container emits logs or output on STDOUT/STDERR, then we can get them without logging into the container.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client. You will also need a running container, that emits logs/output on STDOUT.

How to do it...

To get logs from the container, run the following command:

    docker container logs [OPTIONS] CONTAINER

Or run the following legacy command:

    docker logs [OPTIONS] CONTAINER

Let's take an example from the earlier section...

Stopping a container

We can stop one or more containers at once. In this recipe, we will first start a container and then stop it.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client. You will also need one or more running containers.

How to do it...

To stop a container, run the following command:

    docker container stop [OPTIONS] CONTAINER [CONTAINER...]

Or run the following legacy command:

    docker stop [OPTIONS] CONTAINER [CONTAINER...]

If you already have running containers, then you can go ahead and...

Removing a container

We can remove a container permanently, but before that, we have to stop the container or use the force option. In this recipe, we'll create and remove a container.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client. You will also need some containers in a stopped or running state to delete them.

How to do it...

Use the following command:

    $ docker container rm [OPTIONS] CONTAINER [CONTAINER]

Or run the following legacy command:

    $ docker rm [OPTIONS] CONTAINER [CONTAINER]

Let...

Removing all stopped containers

We can remove all stopped containers with a single command. In this recipe, we'll create a bunch of containers in a stopped state, and then delete all of them.

Getting ready

Ensure that Docker daemon 1.13 (and above) are running on the host and can be connected through the Docker client. You will also need some containers in a stopped or running state in order to delete them.

How to do it...

Use the following command:

    $ docker container prune [OPTIONS]

Let's first create a container, and then delete it using the following commands...

Setting the restart policy on a container

Before Docker 1.2, when a container exited for any reason or the Docker host was rebooted, the container had to be manually restarted using the restart command. With the release of Docker 1.2, a policy-based restart capability was added to the Docker engine to automate restarting containers. This feature is activated using the --restart option of the run command and it supports container restart at Docker host boot time, as well as when container failures occur.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client.

How to do...

Getting privileged access inside a container

Linux divides privileges that are traditionally associated with superusers into distinct units, known as capabilities (run man capabilities on a Linux-based system), which can be independently enabled and disabled. For example, the net_bind_service capability allows nonuser processes to bind the port below 1,024. By default, Docker starts containers with limited capabilities. With privileged access inside the container, we allocate more capabilities to perform operations that are normally done by the root user. In order to have a better understanding of privileged mode, let's first try a simple mount on an unprivileged container and observe the effect:

Getting ready

Ensure...

Accessing the host device inside a container

From Docker 1.2 onwards, we can give access of the host device to a container with the --device option, following the run command. Earlier, you had to bind-mount it with the -v option, and that had to be done with the --privileged option.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client. You will also need a device to pass the container to.

How to do it...

You can give access of a host device to the container using the following syntax:

    docker container run...

Injecting a new process into a running container

While doing development and debugging, we might want to look inside an already running container. There are a few utilities, such as nsenter (https://github.com/jpetazzo/nsenter), which allow us to enter the namespace of the container to inspect its state. With the exec option, which was added in Docker 1.3, we can inject a new process inside a running container.

Getting ready

Make sure that the Docker daemon is running on the host and that you can connect through the Docker client. You might also need a running container to inject a process into.

How to do it...

...

Reading a container's metadata

While doing debugging, automation, and so on, we will need the container's configuration details. Docker provides the container inspect command to get those easily.

Getting ready

Ensure that the Docker daemon is running on the host and can be connected through the Docker client.

How to do it...

To inspect a container, run the following command:

    $ docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

We'll start a container and then inspect it, like so:

    $ ID=$(docker container run -d -i ubuntu /bin/bash)
    $...

Labeling and filtering containers

With Docker 1.6, a feature has been added so that we can label containers and images through which we can attach arbitrary key-value pairs as metadata. You can think of them as environment variables, that are not available for applications running inside containers, but they are available to Docker clients that manage the images and containers. Labels attached to images also get applied to containers that are started using those images. We can also attach labels to containers while starting them. Having labeled an image or a container, the labels can later be used for filtering or selection purposes.

For this recipe, let's assume that we have an image with the label com.example.image=docker-cookbook. We will see how to assign a label to an image in the next chapter:

As you can see from the preceding screenshot, if we use filters with the...

Reaping a zombie inside a container

On Linux (and all Unix-like) operating systems, when a process exits, all the resources associated with that process are released with the exception of its entry in the process table. This entry in the process table is kept until the parent process reads the entry to learn about the exit status of its child. This transient state of a process is called a zombie. As soon as the parent process reads the entry, the zombie process is removed from the process table, and this is called reaping. If the parent process exits before the child process, the init process (PID 1) adopts the child process (PID 1) and it eventually reaps adopted child processes when they exit:

In the preceding screenshot, we snipped the process tree for Ubuntu 14.04 on the left-hand side and Ubuntu 18.04 on the right-hand side. As we can see, both process trees have the init...

Left arrow icon Right arrow icon

Key benefits

  • Learn to manage containers efficiently with the help of real-world examples
  • Integrate orchestration tools such as Kubernetes for controlled deployments
  • Implement best practices for improving container efficiency and security

Description

Docker is an open source tool used for creating, deploying, and running applications using containers. With more than 100 self-contained tutorials, this book examines common pain points and best practices for developers building distributed applications with Docker. Each recipe in this book addresses a specific problem and offers a proven, best practice solution with insights into how it works, so that you can modify the code and configuration files to suit your needs. The Docker Cookbook begins by guiding you in setting up Docker in different environments and explains how to work with its containers and images. You’ll understand Docker orchestration, networking, security, and hosting platforms for effective collaboration and efficient deployment. The book also covers tips and tricks and new Docker features that support a range of other cloud offerings. By the end of this book, you’ll be able to package and deploy end-to-end distributed applications with Docker and be well-versed with best practice solutions for common development problems.

Who is this book for?

If you’re a developer, system administrator, or DevOps engineer looking to learn effective ways to build and manage distributed applications with Docker, this book is for you. You’ll need a basic understanding of Linux/Unix to understand the recipes covered.

What you will learn

  • Uncover the latest features of Docker 18.xx
  • Work with Docker images and containers
  • Explore container networking and data sharing
  • Get to grips with Docker APIs and language bindings
  • Understand the different PaaS solutions for Docker
  • Implement container orchestration using Docker Swarm and Kubernetes
  • Explore a variety of methods to debug and secure your Docker container

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Aug 31, 2018
Length: 352 pages
Edition : 2nd
Language : English
ISBN-13 : 9781788626866
Vendor :
Docker
Tools :

What do you get with a Packt Subscription?

Free for first 7 days. $19.99 p/m after that. Cancel any time!
Product feature icon Unlimited ad-free access to the largest independent learning library in tech. Access this title and thousands more!
Product feature icon 50+ new titles added per month, including many first-to-market concepts and exclusive early access to books as they are being written.
Product feature icon Innovative learning tools, including AI book assistants, code context explainers, and text-to-speech.
Product feature icon Thousands of reference materials covering every tech concept you need to stay up to date.
Subscribe now
View plans & pricing

Product Details

Publication date : Aug 31, 2018
Length: 352 pages
Edition : 2nd
Language : English
ISBN-13 : 9781788626866
Vendor :
Docker
Tools :

Packt Subscriptions

See our plans and pricing
Modal Close icon
€18.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
€189.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts
€264.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total 103.97
Mastering Docker
€41.99
Docker Cookbook
€36.99
Docker Quick Start Guide
€24.99
Total 103.97 Stars icon
Banner background image

Table of Contents

12 Chapters
Introduction and Installation Chevron down icon Chevron up icon
Working with Docker Containers Chevron down icon Chevron up icon
Working with Docker Images Chevron down icon Chevron up icon
Network and Data Management for Containers Chevron down icon Chevron up icon
Docker Use Cases Chevron down icon Chevron up icon
Docker APIs and SDKs Chevron down icon Chevron up icon
Docker Performance Chevron down icon Chevron up icon
Docker Orchestration and Hosting a Platform Chevron down icon Chevron up icon
Docker Security Chevron down icon Chevron up icon
Getting Help and Tips and Tricks Chevron down icon Chevron up icon
Docker on the Cloud Chevron down icon Chevron up icon
Other Books You May Enjoy Chevron down icon Chevron up icon

Customer reviews

Rating distribution
Full star icon Full star icon Full star icon Half star icon Empty star icon 3.5
(2 Ratings)
5 star 50%
4 star 0%
3 star 0%
2 star 50%
1 star 0%
John Costa Feb 08, 2019
Full star icon Full star icon Full star icon Full star icon Full star icon 5
I found the approach of the book to be pragmatic and helpful. It walked through the concepts presented in the beginning of the book and tied them together in well defined examples later in the book. It was a bonus to see the CI/CD and Orchestration examples as well.While there's not much information on how Docker runs on Window's under the hood - I didn't find that too distracting as the point of a docker container is to be system agnostic.Overall, I'd recommend this book, especially to those within minimal or no exposure to Docker at all.
Amazon Verified review Amazon
Esa Oct 13, 2023
Full star icon Full star icon Empty star icon Empty star icon Empty star icon 2
I see you have no e-book download option for this "free" book. I was hoping I could read it on my e-reader. In this online web-based format I have no use for it.
Subscriber review Packt
Get free access to Packt library with over 7500+ books and video courses for 7 days!
Start Free Trial

FAQs

What is included in a Packt subscription? Chevron down icon Chevron up icon

A subscription provides you with full access to view all Packt and licnesed content online, this includes exclusive access to Early Access titles. Depending on the tier chosen you can also earn credits and discounts to use for owning content

How can I cancel my subscription? Chevron down icon Chevron up icon

To cancel your subscription with us simply go to the account page - found in the top right of the page or at https://subscription.packtpub.com/my-account/subscription - From here you will see the ‘cancel subscription’ button in the grey box with your subscription information in.

What are credits? Chevron down icon Chevron up icon

Credits can be earned from reading 40 section of any title within the payment cycle - a month starting from the day of subscription payment. You also earn a Credit every month if you subscribe to our annual or 18 month plans. Credits can be used to buy books DRM free, the same way that you would pay for a book. Your credits can be found in the subscription homepage - subscription.packtpub.com - clicking on ‘the my’ library dropdown and selecting ‘credits’.

What happens if an Early Access Course is cancelled? Chevron down icon Chevron up icon

Projects are rarely cancelled, but sometimes it's unavoidable. If an Early Access course is cancelled or excessively delayed, you can exchange your purchase for another course. For further details, please contact us here.

Where can I send feedback about an Early Access title? Chevron down icon Chevron up icon

If you have any feedback about the product you're reading, or Early Access in general, then please fill out a contact form here and we'll make sure the feedback gets to the right team. 

Can I download the code files for Early Access titles? Chevron down icon Chevron up icon

We try to ensure that all books in Early Access have code available to use, download, and fork on GitHub. This helps us be more agile in the development of the book, and helps keep the often changing code base of new versions and new technologies as up to date as possible. Unfortunately, however, there will be rare cases when it is not possible for us to have downloadable code samples available until publication.

When we publish the book, the code files will also be available to download from the Packt website.

How accurate is the publication date? Chevron down icon Chevron up icon

The publication date is as accurate as we can be at any point in the project. Unfortunately, delays can happen. Often those delays are out of our control, such as changes to the technology code base or delays in the tech release. We do our best to give you an accurate estimate of the publication date at any given time, and as more chapters are delivered, the more accurate the delivery date will become.

How will I know when new chapters are ready? Chevron down icon Chevron up icon

We'll let you know every time there has been an update to a course that you've bought in Early Access. You'll get an email to let you know there has been a new chapter, or a change to a previous chapter. The new chapters are automatically added to your account, so you can also check back there any time you're ready and download or read them online.

I am a Packt subscriber, do I get Early Access? Chevron down icon Chevron up icon

Yes, all Early Access content is fully available through your subscription. You will need to have a paid for or active trial subscription in order to access all titles.

How is Early Access delivered? Chevron down icon Chevron up icon

Early Access is currently only available as a PDF or through our online reader. As we make changes or add new chapters, the files in your Packt account will be updated so you can download them again or view them online immediately.

How do I buy Early Access content? Chevron down icon Chevron up icon

Early Access is a way of us getting our content to you quicker, but the method of buying the Early Access course is still the same. Just find the course you want to buy, go through the check-out steps, and you’ll get a confirmation email from us with information and a link to the relevant Early Access courses.

What is Early Access? Chevron down icon Chevron up icon

Keeping up to date with the latest technology is difficult; new versions, new frameworks, new techniques. This feature gives you a head-start to our content, as it's being created. With Early Access you'll receive each chapter as it's written, and get regular updates throughout the product's development, as well as the final course as soon as it's ready.We created Early Access as a means of giving you the information you need, as soon as it's available. As we go through the process of developing a course, 99% of it can be ready but we can't publish until that last 1% falls in to place. Early Access helps to unlock the potential of our content early, to help you start your learning when you need it most. You not only get access to every chapter as it's delivered, edited, and updated, but you'll also get the finalized, DRM-free product to download in any format you want when it's published. As a member of Packt, you'll also be eligible for our exclusive offers, including a free course every day, and discounts on new and popular titles.