Docker has matured over the years to offer a range of solutions for developers working with containers. This can lead to some confusion, though, as developers need to choose which version of Docker to install.
In this post, I look at which options are available for which operating systems and offer advice on what choice to make.
The many facets of Docker
Docker has been part of a large and ongoing movement focused on building, distributing, and running containerized software. While the term "Docker" is often synonymous with containerization, it's worth understanding the various tools and specifications working together to support containerized software.
The core technologies that power Docker are defined by the Open Container Initiative (OCI), which defines the format for distributable images with the Image Specification (image-spec) and how those images are run with the Runtime Specification (runtime-spec).
The OCI runtime-spec is implemented by a number of Container Runtimes, including runc, crun, and katacontainers. Container Runtimes perform the low level work required to execute containerized processes.
The interface between a developer and the software stack used to build, distribute, and run containerized software is technically the Container Engine, and in Docker's case the Container Engine is the
docker command-line tool.
The combination of a Container Runtime and the Docker Container Engine is referred to as the Docker Engine by the Docker website.
Now we're clearer about what we mean by "Docker", it's time to look at the options available to developers when working with containerized applications.
Linux users are spoilt for choice
Containerization technology was first developed in Linux, so it's no surprise that Linux users have choices when it comes to working with containerized applications.
Docker is not the only option available for Linux users. Podman provides a drop in replacement for Docker, to the point where the
podman CLI can be configured as an alias for the
docker CLI for most developers.
If you want to stick with Docker though, there are 2 options:
docker.ioon Debian/Ubuntu or
docker packages are maintained by their respective Linux distributions. They're available to be installed without adding any additional package repositories. They are free and open source.
docker-ce is a package provided by Docker. The package is available through a third-party package repository provided for major Linux distributions. Like the
docker-ce is free an open source.
There are many discussions on the underlying differences between
docker-ce. This question on StackOverflow, with close to 90 thousand views, lists some of the pros and cons of each package.
Personally, I install the
docker-ce package, as it's usually more up to date.
Docker desktop for everyone else
Docker Desktop is the only way to install the Docker Engine on Windows 10 or 11 and macOS operating systems. Docker Desktop is also available for Linux, although Linux users are free to install the Docker Engine separately.
Docker Desktop is a commercial application that requires payment for some teams.
Windows server support
Windows server 2016 and 2019 include built-in support for running Docker, but only support running Windows containers.
There's some advice for running Linux containers on Windows server operating systems. This post on Server Fault provides a summary and links to other resources. However, none of the information I've seen suggests that Linux containers on Windows server is a supported solution for production environments.
Developers working on containerized applications first need to install a tool like Docker. But, while the term "Docker" is synonymous with containers, there are many options to choose from, and some don't need any Docker-specific tools at all.
In this post, we looked at the various tools and specifications that support containerized applications, and noted the options available for developers working with containers.
Learn more using the Octopus Workflow Builder
If you want to build and deploy containerized applications to AWS platforms such as EKS and ECS, try the Octopus Workflow Builder. The Builder populates a GitHub repository with a sample application built with GitHub Actions workflows. It configures a hosted Octopus instance with sample deployment projects demonstrating best practices such as vulnerability scanning and Infrastructure as Code (IaC).