How To Install Docker on Debian 9
Docker is a containerization software that helps to create, deploy, and run applications in a container. It allows the developers to built an application with all required components it needs in a container and then pack it as one package.
The containers are like virtual machines, but lighter than virtual machines and consume fewer resources, easy to manage and can run almost anywhere regardless of operating environment it is running in.
Docker uses Linux kernel’s features such as cgroups and kernel namespace to allow the independent containers to run within a single Linux machine.
This guide will help you install Docker on Debian 9.
Docker Editions
Docker is available in two editions, namely.
- Community Edition (CE)
- Enterprise Edition (EE)
Here, we will install Docker CE from the Docker repository.
Prerequisites
Remove Older Version
As a recommended action, you would need to uninstall older versions of Docker called docker
or docker-engine
along with associated dependencies.
You can skip the below step if your machine does not have a Docker package.
sudo apt -y remove docker docker-engine docker.io containerd runc
Contents such as Docker volumes, images, and networks under /var/lib/docker/
directory are preserved.
Set up Docker Repository
Install the https support packages for apt
.
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
Add the public GPG key for Docker repository on to your system.
curl -fsSL https://download.docker.com/linux/debian/gpg -o gpg
sudo apt-key add gpg
Add the Docker’s repository to your system by running the command in the terminal.
echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
Install Docker
Update the apt repository index.
sudo apt update
The package name for Docker community edition is docker-ce
. Install Docker using the apt
command.
sudo apt install -y docker-ce docker-ce-cli containerd.io
To check the status of Docker service, please run:
sudo systemctl status docker
Output:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-03-19 23:46:21 EDT; 9s ago
Docs: https://docs.docker.com
Main PID: 15309 (dockerd)
CGroup: /system.slice/docker.service
└─15309 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Mar 19 23:46:18 server dockerd[15309]: time="2019-03-19T23:46:18.141238415-04:00" level=warning msg="Your kernel does not support swap memory limit"
Mar 19 23:46:18 server dockerd[15309]: time="2019-03-19T23:46:18.142299710-04:00" level=warning msg="Your kernel does not support cgroup rt period"
Mar 19 23:46:18 server dockerd[15309]: time="2019-03-19T23:46:18.143213951-04:00" level=warning msg="Your kernel does not support cgroup rt runtime"
Mar 19 23:46:18 server dockerd[15309]: time="2019-03-19T23:46:18.145378260-04:00" level=info msg="Loading containers: start."
Mar 19 23:46:18 server dockerd[15309]: time="2019-03-19T23:46:18.719326772-04:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip
Mar 19 23:46:19 server dockerd[15309]: time="2019-03-19T23:46:19.774761864-04:00" level=info msg="Loading containers: done."
Mar 19 23:46:21 server dockerd[15309]: time="2019-03-19T23:46:21.097531598-04:00" level=info msg="Docker daemon" commit=774a1f4 graphdriver(s)=overlay2 version=18.09.3
Mar 19 23:46:21 server dockerd[15309]: time="2019-03-19T23:46:21.101107317-04:00" level=info msg="Daemon has completed initialization"
Mar 19 23:46:21 server systemd[1]: Started Docker Application Container Engine.
Mar 19 23:46:21 server dockerd[15309]: time="2019-03-19T23:46:21.518199513-04:00" level=info msg="API listen on /var/run/docker.sock"
Test Docker Installation
We will now run a hello-world
container to test our Docker installation.
sudo docker run hello-world
Output:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
The above output confirms that we have correctly installed Docker on Debian OS.
Allow Non-root user to run Docker
By default, regular users do not have privileges to run Docker commands and have to prefix sudo for every docker commands. To avoid prefixing the sudo and allow non-root users like developers to run Docker containers, follow the below steps.
Create the docker group, if it does not exist.
sudo groupadd docker
Add a regular user to docker group. Replace linuxbees
with your username.
sudo useradd linuxbees -s /bin/bash -m -d /home/linuxbees
Add the user to docker group.
sudo usermod -aG docker linuxbees
Regual user (linuxbees) should now be able to run Docker commands without prefixing sudo.
docker run hello-world
Conclusion
You have successfully installed Docker on Debian 9. As a next step, you can visit command-line reference for important Docker commands and learn how to create Docker containers.