Ubuntu – Why is docker not in official Ubuntu repos

dockerofficial-repositoriesrepositorysoftware installation

I am aware of the more generic version of this question, found here:

Why is some software not in the official Ubuntu repositories?

However, I would like to ask about Docker in particular. It seems to have become quite a significant part of a lot of Linux architecture. I personally have some misgivings about Docker, and wonder if these misgivings are shared by Canonical, that would cause them to not host it on their own repos. I also wonder if the stuff I am hearing about Docker is more marketing than truth, as is often the case.

Is there any word from Canonical? Or perhaps Docker isn't as ubiquitous as I have been told?

Best Answer

Docker is in the official Ubuntu repos. The docker.io package provides it. See also the Launchpad page.

The version of the docker.io package in recent Ubuntu releases provides recent versions of Docker. There's a common misconception that docker.io provides a very old version of Docker. This is mostly false today, though it was once the case. Although the docker.io package is in the official repositories--actually, because it's in the official repositories--you won't always get updates for the very latest versions of Docker with the newest features. This is not specific to Docker. In general, official packages within the same Ubuntu release are updated only for security and serious stability bugs, not new feature versions. (Actually, Docker is updated somewhat more often than most other packages, though you can see that Ubuntu 18.04 LTS does not have the very latest version.)

The docker.io package is in the universe repository, which means it is maintained by the community rather than by Canonical employees. But that is still an official Ubuntu repository. Although many of the most important packages are in the main or restricted repositories and maintained by Canonical, the vast majority of software in Ubuntu's official repositories is community-maintained rather than maintained by Canonical. If you wish to install Docker through the docker.io package but cannot do so, you might not have the universe repository enabled. In that case, you can enable it.

I don't know what your misgivings are about Docker or what you're hearing about it, so I can't really address that directly. However, as touched on in Why is some software not in the official Ubuntu repositories?, Ubuntu is a derivative of Debian and most software in Ubuntu comes from Debian. There are some exceptions, but for the most part, when potentially useful software is absent in Ubuntu's official APT repositories, it is because no one has packaged and maintained it in Debian, and when it is present in those repositories, it's because someone has done that. (Snap packages are another story, as they're not imported from Debian.)

When Canonical maintains a package in Ubuntu--that is, when it is in the main or restricted repository--this sometimes does reflect a choice on their part. (Other times, it just reflects that you can't really reasonably run the system without that package. Ubuntu is supposed to work even if you don't install any software from the universe or multiverse repositories.) But being community-maintained rather than Canonical-maintained is the most common status for official Ubuntu packages, and does not usually reflect any misgivings on the part of Canonical or anyone else. docker.io is one of the many packages that is in Ubuntu because it is in Debian.

Note that the docker.io package in Debian and Ubuntu packages Docker in a way that differs considerably from the way it is packaged in the upstream Docker package docker-ce (which you would install by enabling the upstream Docker repositories, which seems to be how most people choose to install Docker). Basically, the docker.io package depends extensively on other packages, while the upstream docker-ce package contains most of its own dependencies. As Lutz Prechelt explains in What is docker.io in relation to docker-ce and docker-ee?:

docker-ce is provided by docker.com, docker.io is provided by Debian.

On the surface, this means you can install docker.io rightaway, while for docker-ce you have to attach an external repository from docker.com beforehands.

More importantly, however, although both packages provide properly released versions of Docker, they have a very different internal structure:

  • docker.io does it the Debian (or Ubuntu) way: Each external dependency is a separate package that can and will be updated independently.
  • docker-ce does it the Golang way: All dependencies are pulled into the source tree before the build and the whole thing forms one single package afterwards. So you always update docker with all its dependencies at once.

That answer goes on to argue in favor of the approach taken in docker.io. It's worth a read.

See How do I install Docker on Ubuntu 16.04 LTS? and Docker-CE or docker.io package for more information, including information on installing the upstream docker-ce package.