Difference between Docker Desktop and Docker Engine

Hi,

Good day!

Docker newbie here, I just want to ask what is the 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 phisycal 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.

2 Likes

Also a newbie, wondering if this is why PyCharm can’t see the images and containers I made in Docker Desktop. Because it’s siloed away in a VM? Thank for any help!

Not likely. It is more likely that you need to fix your configuration. Pycharm or other Docker clients don’t care where Docker stores its data. It will use the TCP socket or unix socket to communicate. IN case of PyCharm, you need to click on “Services” at the bottom of the IDE, then right-click on the whale (Docker logo), and choose Edit configuration. Then you can select Docker for Mac (if you are on Mac) or probably Docker for Windows in case of Windows. If you for example tried with an SSH connection or TCP connection or something that Windows has and Mac doesn’t, just correct the configuration and it should work.

Thank you! That’s helpful. I’m on Linux, and indeed I’d configured PyCharm correctly as far as I can tell. However, I’ve also had some IP address conflicts and was trying both Engine and Desktop, so I’ll see if my fixes solve both issues.

Well, I had to uninstall Docker Desktop on my linux, because it changed my configuration and somehow broke the authentication and I also had some version problem about a month ago or something like that. So I can’t try it on Linux, but if it is not that you have Docker Desktop and the engine on your Linux at the same time, then it is a bug. PyCharm should be able to see your images.

1 Like