Installing Docker, without Docker Desktop?
Straight from the documentation:
Docker Compose is a tool for running multi-container applications on Docker defined using the Compose file format. A Compose file is used to define how the one or more containers that make up your application are configured.
Version 2 of Docker Compose also uses a different syntax (
docker compose ... rather than
docker-compose ...), and the installation process for v2 also differs from that of v1. This guide is intended for developers wanting to install Docker Compose v2 and a quick start guide on using it effectively.
You will get Docker Compose by installing Docker Desktop and this is most likely how many Linux users would go about it. However, on some distributions, including Ubuntu, Docker Desktop will require user to have the latest LTS (long term support) version of its distro — no small feat when this isn’t always an option, such as in the case of a production machine.
Pulling from the documentation:
To install Docker Desktop successfully on Ubuntu, you must:
- Meet the system requirements
- Have a 64-bit version of either Ubuntu Jammy Jellyfish 22.04 (LTS) or Ubuntu Impish Indri 21.10. Docker Desktop is supported on x86_64 (or amd64) archi
On more than one of my machines, I’m using an older LTS — which means I’m out of luck with Docker Desktop. This is the motivation of writing this guide on installing Docker and Docker Compose on Linux without the Docker Desktop bundle.
Installing Docker and Docker Compose on Linux
Docker Compose requires the use of Docker so a quick installation guide will be handy reference here.
First, set up Docker’s repository and install them with
cURL is the recommended approach and this is done with the following lines of code:
$ sudo apt update $ sudo apt install ca-certificates curl gnupg lsb-release
Add Docker’s official GPG key and set up the repository
$ sudo mkdir -p /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Use the following command to set up the repository: $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Finally, install Docker Engine and Docker Compose:
$ sudo apt update $ sudo apt install docker-ce docker-ce-cli docker-compose-plugin
Verify the installation:
$ docker version Client: Docker Engine - Community Version: 20.10.17 API version: 1.41 Go version: go1.17.11 Git commit: 100c701 Built: Mon Jun 6 23:02:57 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.17 API version: 1.41 (minimum version 1.12) Go version: go1.17.11 Git commit: a89b842 Built: Mon Jun 6 23:01:03 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.6 GitCommit: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1 runc: Version: 1.1.2 GitCommit: v1.1.2-0-ga916309 docker-init: Version: 0.19.0 GitCommit: de40ad0
Installing Docker Compose from binaries
If you are restricted from updating to the latest versions of your Linux distro to meet the requirement of Docker Desktop, and would like to install from the provided binaries, read on!
Hop over to the release page and find the relevant binary for your OS. Firing up your terminal and using the
unamecommand will help:
$ echo "$(uname -s) $(uname -m)" Linux x86_64
Replace the following command with the latest version from the aforementioned release page and the appropriate kernel name. The following command uses
cUrlto download that and store it to
/usr/local/lib/docker/cli-plugins, making it available system-wide:
$ sudo curl -L sudo curl -L "https://github.com/docker/compose/releases/download/2.11.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/lib/docker/cli-plugins
Rename it to
$ mv docker-compose-linux-x86_64 docker-compose
Skip to (3)!
(Alternative) You can also download the right binary for your distribution manually, rename it to
docker-composepost-download and then copy it to
mv(for ‘move’) command.
- Create that directory if it doesn’t yet exist before copying it over
Make the file executable with
$ sudo chmod +x /home/your_username/.docker/cli-plugins/docker-compose
Verify that the installation was successful:
$ docker compose version Docker Compose version v2.11.0
Transitioning away from
docker-compose (version 1)
Docker Compose V2 is a major version bump release of Docker Compose. It has been completely rewritten from scratch in Golang (V1 was in Python).
If you already have a pre-existing version of
docker-compose (version 1), the installation of version 2 doesn’t remove that legacy version:
$ docker-compose --version docker-compose version 1.28.2, build 67630359
If you want to transition from that legacy docker-compose 1.xx to Compose V2, consider installing compose-switch to translate
docker-compose ... commands into Compose V2’s
docker compose .... Post-transition, you can remove the legacy version and use Compose V2 exclusively.
If you have a local Compose file, you should now run
docker compose up (instead of
docker-compose up). For completeness sake, an example Compose file looks like the following:
services: web: build: . ports: - "5000:5000" volumes: - .:/code redis: image: redis
Further learning resources on Docker
If you make it this far, a good "next step" is Stane’s write-up on Docker and the official documentation: