Difference between Docker Desktop and Docker Engine

Interesting. Recently I wanted to talk about it, because I feel it is not communicated well enough.
Basically Docker Desktop is a virtual machine + Graphical user interface with some extra features like the new extensions and running a single-node Kubernetes “cluster” easily. Inside the virtual machine there is Docker CE (Docker Community Edition) daemon. The Docker documentation says:

Docker Engine is an open source containerization technology for building and containerizing your applications. Docker Engine acts as a client-server application with:

  • A server with a long-running daemon process dockerd .
  • APIs which specify interfaces that programs can use to talk to and instruct the Docker daemon.
  • A command line interface (CLI) client docker .

So the client, the API and the deamon is also part of Docker Engine. In case of Docker Desktop, the daemon is inside the virtual machine, but the client is on your host machine.

Keep it in mind when you try to access container IP addresses directly, because the Docker network exists only inside the virtual machine, not on your host. This is also true for local volumes too. The other very important difference is related to the network is that even if you use the host network mode (docker run --net host) it will be the host network of the virtual machine, not your actual physical host.

I could continue but you really need to remember only one thing. Docker containers are running inside the virtual machine. Everything else is a consequence. Docker Desktop just tries to hide that fact from you so you don’t need to setup a virtual machine and the client-server connection.

Having a virtual machine is required on Windows and MacOS if you want to run Linux containers. On Linux, virtual machine is not necessary, but Docker wants to give you the same experience with the same Linux kernel on each platform. So if you install Docker Desktop for Linux, you will have a virtual machine there too.

9 Likes