Trying to take in Docker from ground 0 can be overwhelming. This article explains the purpose of 10 different Docker tools and services.

I remember when I first got into Docker back in 2014 half of these tools didn’t even exist, but it was still difficult to put everything together.

By the time you finish this article you’ll be able to identify all major components of Docker and know how they all fit together.

Docker Daemon

The Docker Daemon runs on your host operating system. This is typically your main computer or a server on the cloud. It currently only runs on Linux but there are ways to run Docker on MacOS and Windows too.

You can think of this as a service that runs in the background. It is the brains of the operation when it comes to managing Docker containers.

Use case: Provides core Docker functionality. It must be running on every host you plan to run Docker on.

Docker CLI

The Docker CLI is one way to interact with the Docker Daemon. The Docker Daemon exposes an API and the Docker CLI is one tool you can use to consume that API.

It’s imperative that you understand how to use the Docker CLI, but in your day to day activities you’ll likely use another tool called Docker Compose, but that requires knowing how the Docker CLI works.

Use case: When you want to CRUD (create, read, update, destroy) various components of Docker, such as your Docker images, containers, networks and volumes.

Docker Compose

Docker Compose is a quality of life improvement tool over the Docker CLI but still uses the Docker CLI under the hood. It lets you declare Docker CLI commands in the form of YAML and has its own CLI which lets you easily manage 1 or more Docker containers.

Use case: It lets you quickly spin up and destroy 1 or many containers. It is what you’ll use in your day to day in development, CI and in some cases even production.

I say “some cases” for production because while Docker Compose is excellent for single server deploys, it’s not really meant for multi-host deploys, however the tool that is aimed at multi-host deploys uses a compatible version of Docker Compose’s YAML file.

If you want to learn how to use the Docker CLI and Docker Compose by example then check out the Dive Into Docker course . It will take you from ground 0 all the way to comfortably using Docker on your own projects.

Docker for Mac / Windows

The defacto standard way of installing Docker on MacOS or Windows as long as your computer is capable of running it. They are both tools that let you install Docker using your OS’ native hypervisor. That is HyperKit on MacOS and Hyper-V on Windows.

Use case: Allows you to run Docker on non-Linux platforms while offering the closest experience possible to running Docker natively on Linux.

There are still performance issues but the project is constantly improving.

Docker Toolbox

The “legacy” way of installing Docker on MacOS and Windows. Despite it being legacy, it is still maintained and absolutely necessary to use in cases where you cannot install things like Hyper-V (Home editions of Windows).

Docker Machine

A command line tool that helps you create servers and then install Docker on them.

These servers could be VirtualBox driven VMs (in fact, this is what the Docker Toolbox does), or they could be servers on the cloud. There are adapters for DigitalOcean, AWS and Azure at the moment.

Use case: Used to quickly spin up new servers that are ready to go with Docker. It is not an end-all-be-all solution since you’ll often want to modify those new servers with additional configuration outside the scope of Docker but at the end of the day it works.

Docker Hub / Store

The Docker Hub and Docker Store are websites you can visit to find Docker images and even store your own (both publicly and privately). The Docker Store offers a bit more than just Docker images too, such as plugins, various Docker installation binaries and lists any paid services you subscribe to.

Use case: If you’re looking for nginx, PostgreSQL or hundreds of other Dockerized services, then the Docker Hub is where you’ll want to start.

You can also push and pull your own Docker images, and sync up builds to GitHub / BitBucket so it works great for helping you distribute your custom Docker images to your servers.

Docker Swarm

Docker Swarm lets you manage a cluster of servers which can house 1 or more services. You’ll get nifty features such as load balancing, service discovery and rolling updates out of the box.

Use case: When you want to scale beyond 1 host and need the features it offers. You can initialize Swarm on any cloud provider capable of running Docker.

Docker Cloud

Docker Cloud is a paid solution offered by Docker. Its goal is to help you deploy your apps to production without getting bogged down by the details of setting up your own continuous integration pipeline and managing your own Docker Swarm clusters at the server level.

Use case: When you want to manage your application’s infrastructure with a web UI instead of rolling your own scripts and worrying about servers. You still need to bring your own servers but Docker Cloud will manage them for you.

Docker Data Center

Docker Data Center and Docker Enterprise Edition (Docker EE) go hand in hand, because Docker Data Center is now a part of Docker EE. It is another paid offering by Docker.

In a similar fashion to Docker Cloud, it lets you manage your infrastructure through a web UI but unlike Docker Cloud you have the option of running everything on-premises.

It also adds more security features and options for managing your containers vs. Docker Cloud. Not only that but you get Enterprise level support as part of your subscription and even certified infrastructure, containers and plugins.

Use case: When you have a serious business application and really need the features provided by DDC.

Let me know if you’re using any of these tools in the comments below.

Free Intro to Docker Email Course

Email Address

Over 5 days you'll get 1 email per day that includes video and text from the premium Dive Into Docker course. By the end of the 5 days you'll have hands on experience using Docker to serve a website.