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
S$66.99
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
S$36.99 S$52.99
Paperback
S$66.99
Subscription
Free Trial
Arrow left icon
Profile Icon Cochrane Profile Icon K Khare Profile Icon Jeeva S. Chelladhurai
Arrow right icon
S$66.99
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
S$36.99 S$52.99
Paperback
S$66.99
Subscription
Free Trial
eBook
S$36.99 S$52.99
Paperback
S$66.99
Subscription
Free Trial

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Product feature icon AI Assistant (beta) to help accelerate your learning
OR
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
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
Estimated delivery fee Deliver to Singapore

Standard delivery 10 - 13 business days

S$11.95

Premium delivery 5 - 8 business days

S$54.95
(Includes tracking information)

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 Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Product feature icon AI Assistant (beta) to help accelerate your learning
OR
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Estimated delivery fee Deliver to Singapore

Standard delivery 10 - 13 business days

S$11.95

Premium delivery 5 - 8 business days

S$54.95
(Includes tracking information)

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
$19.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
$199.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 S$6 each
Feature tick icon Exclusive print discounts
$279.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 S$6 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total S$ 186.97
Mastering Docker
S$74.99
Docker Cookbook
S$66.99
Docker Quick Start Guide
S$44.99
Total S$ 186.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 the delivery time and cost of print book? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela
What is custom duty/charge? Chevron down icon Chevron up icon

Customs duty are charges levied on goods when they cross international borders. It is a tax that is imposed on imported goods. These duties are charged by special authorities and bodies created by local governments and are meant to protect local industries, economies, and businesses.

Do I have to pay customs charges for the print book order? Chevron down icon Chevron up icon

The orders shipped to the countries that are listed under EU27 will not bear custom charges. They are paid by Packt as part of the order.

List of EU27 countries: www.gov.uk/eu-eea:

A custom duty or localized taxes may be applicable on the shipment and would be charged by the recipient country outside of the EU27 which should be paid by the customer and these duties are not included in the shipping charges been charged on the order.

How do I know my custom duty charges? Chevron down icon Chevron up icon

The amount of duty payable varies greatly depending on the imported goods, the country of origin and several other factors like the total invoice amount or dimensions like weight, and other such criteria applicable in your country.

For example:

  • If you live in Mexico, and the declared value of your ordered items is over $ 50, for you to receive a package, you will have to pay additional import tax of 19% which will be $ 9.50 to the courier service.
  • Whereas if you live in Turkey, and the declared value of your ordered items is over € 22, for you to receive a package, you will have to pay additional import tax of 18% which will be € 3.96 to the courier service.
How can I cancel my order? Chevron down icon Chevron up icon

Cancellation Policy for Published Printed Books:

You can cancel any order within 1 hour of placing the order. Simply contact [email protected] with your order details or payment transaction id. If your order has already started the shipment process, we will do our best to stop it. However, if it is already on the way to you then when you receive it, you can contact us at [email protected] using the returns and refund process.

Please understand that Packt Publishing cannot provide refunds or cancel any order except for the cases described in our Return Policy (i.e. Packt Publishing agrees to replace your printed book because it arrives damaged or material defect in book), Packt Publishing will not accept returns.

What is your returns and refunds policy? Chevron down icon Chevron up icon

Return Policy:

We want you to be happy with your purchase from Packtpub.com. We will not hassle you with returning print books to us. If the print book you receive from us is incorrect, damaged, doesn't work or is unacceptably late, please contact Customer Relations Team on [email protected] with the order number and issue details as explained below:

  1. If you ordered (eBook, Video or Print Book) incorrectly or accidentally, please contact Customer Relations Team on [email protected] within one hour of placing the order and we will replace/refund you the item cost.
  2. Sadly, if your eBook or Video file is faulty or a fault occurs during the eBook or Video being made available to you, i.e. during download then you should contact Customer Relations Team within 14 days of purchase on [email protected] who will be able to resolve this issue for you.
  3. You will have a choice of replacement or refund of the problem items.(damaged, defective or incorrect)
  4. Once Customer Care Team confirms that you will be refunded, you should receive the refund within 10 to 12 working days.
  5. If you are only requesting a refund of one book from a multiple order, then we will refund you the appropriate single item.
  6. Where the items were shipped under a free shipping offer, there will be no shipping costs to refund.

On the off chance your printed book arrives damaged, with book material defect, contact our Customer Relation Team on [email protected] within 14 days of receipt of the book with appropriate evidence of damage and we will work with you to secure a replacement copy, if necessary. Please note that each printed book you order from us is individually made by Packt's professional book-printing partner which is on a print-on-demand basis.

What tax is charged? Chevron down icon Chevron up icon

Currently, no tax is charged on the purchase of any print book (subject to change based on the laws and regulations). A localized VAT fee is charged only to our European and UK customers on eBooks, Video and subscriptions that they buy. GST is charged to Indian customers for eBooks and video purchases.

What payment methods can I use? Chevron down icon Chevron up icon

You can pay with the following card types:

  1. Visa Debit
  2. Visa Credit
  3. MasterCard
  4. PayPal
What is the delivery time and cost of print books? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela