How to install Docker on Debian Stretch

Install docker on Debian Stretch to take advantage of the lightweight virtualization.

Debian version.

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 9.3 (stretch)
Release:	9.3
Codename:	stretch

Kernel version.

$ uname -a
Linux debian 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u5 (2017-09-19) x86_64 GNU/Linux

Install apt-transport-https package to enable HTTPS protocol for apt.

$ sudo apt-get install apt-transport-https
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  apt-transport-https
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 171 kB of archives.
After this operation, 243 kB of additional disk space will be used.
Get:1 http://ftp.task.gda.pl/debian stretch/main amd64 apt-transport-https amd64 1.4.8 [171 kB]
Fetched 171 kB in 0s (531 kB/s)         
Selecting previously unselected package apt-transport-https.
(Reading database ... 26565 files and directories currently installed.)
Preparing to unpack .../apt-transport-https_1.4.8_amd64.deb ...
Unpacking apt-transport-https (1.4.8) ...
Setting up apt-transport-https (1.4.8) ...

Configure Docker repository.

$ echo "deb https://download.docker.com/linux/debian stretch stable" | sudo tee /etc/apt/sources.list.d/docker.list
deb https://download.docker.com/linux/debian stretch stable

Download and import public key used to sign this repository.

$ wget --quiet --output-document - https://download.docker.com/linux/debian/gpg  | sudo apt-key add -
OK

Update package index.

$ sudo apt-get update
Hit:1 http://security.debian.org/debian-security stretch/updates InRelease
Ign:2 http://ftp.task.gda.pl/debian stretch InRelease                         
Hit:3 http://ftp.task.gda.pl/debian stretch-updates InRelease                 
Hit:4 http://ftp.task.gda.pl/debian stretch Release
Get:5 https://download.docker.com/linux/debian stretch InRelease [39.1 kB]
Get:7 https://download.docker.com/linux/debian stretch/stable amd64 Packages [3,109 B]
Fetched 42.2 kB in 1s (39.2 kB/s)
Reading package lists... Done

Install Docker CE.

$ sudo apt-get install docker-ce
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  aufs-dkms aufs-tools binutils cgroupfs-mount cpp cpp-6 dkms fakeroot gcc gcc-6 git git-man libasan3 libatomic1
  libc-dev-bin libc6-dev libcc1-0 libcilkrts5 liberror-perl libfakeroot libgcc-6-dev libgomp1 libisl15 libitm1
  liblsan0 libltdl7 libmpc3 libmpfr4 libmpx2 libquadmath0 libtsan0 libubsan0 linux-compiler-gcc-6-x86
  linux-headers-4.9.0-5-amd64 linux-headers-4.9.0-5-common linux-headers-amd64 linux-kbuild-4.9 linux-libc-dev
  make manpages-dev patch rsync
Suggested packages:
  aufs-dev binutils-doc cpp-doc gcc-6-locales python3-apport menu gcc-multilib autoconf automake libtool flex
  bison gdb gcc-doc gcc-6-multilib gcc-6-doc libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan3-dbg
  liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx2-dbg libquadmath0-dbg git-daemon-run
  | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn
  glibc-doc make-doc ed diffutils-doc
The following NEW packages will be installed:
  aufs-dkms aufs-tools binutils cgroupfs-mount cpp cpp-6 dkms docker-ce fakeroot gcc gcc-6 git git-man libasan3
  libatomic1 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 liberror-perl libfakeroot libgcc-6-dev libgomp1 libisl15
  libitm1 liblsan0 libltdl7 libmpc3 libmpfr4 libmpx2 libquadmath0 libtsan0 libubsan0 linux-compiler-gcc-6-x86
  linux-headers-4.9.0-5-amd64 linux-headers-4.9.0-5-common linux-headers-amd64 linux-kbuild-4.9 linux-libc-dev
  make manpages-dev patch rsync
0 upgraded, 43 newly installed, 0 to remove and 1 not upgraded.
Need to get 74.2 MB of archives.
After this operation, 353 MB of additional disk space will be used.
Do you want to continue? [Y/n]
[...]

Add current user to the docker group.

$ sudo usermod -aG docker $(whoami)

Re-login and run hello-world image to verify that application container engine is correctly installed.

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete 
Digest: sha256:66ef312bbac49c39a89aa9bcc3cb4f3c9e7de3788c944158df3ee0176d32b751
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://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

It works.

About Milosz Galazka

Milosz is a Linux Foundation Certified Engineer working for a successful Polish company as a system administrator and a long time supporter of Free Software Foundation and Debian operating system.