How to Install Docker in Linux Ubuntu 18.04 Bionic Beaver

Posted on

Introduction on Docker

This article is mainly introducing on how to install docker. The installation process of docker is done in Linux Ubuntu 18.04 Bionic Beaver. Before moving on forward, the introduction of docker is an important thing for specific description. According to several references, one of them has a detail description in this link.

Quoting the definition of docker from that link, Docker is a tool designed to make it easier to create, deploy, and run applications by using containers. Furthermore, containers allow a developer to package up an application with all of the parts it needs, such as libraries and other dependencies, and ship it all out as one package. By doing so, thanks to the container, the developer can rest assured that the application will run on any other Linux machine regardless of any customized settings that machine might have that could differ from the machine used for writing and testing the code.

Still according to the information on the link, Docker is a bit like a virtual machine. But unlike a virtual machine, rather than creating a whole virtual operating system, Docker allows applications to use the same Linux kernel as the system that they’re running on and only requires applications be shipped with things not already running on the host computer. This gives a significant performance boost and reduces the size of the application.

And importantly, Docker is open source. This means that anyone can contribute to Docker and extend it to meet their own needs if they need additional features that aren’t available out of the box.


Steps on Installing Docker in Linux Ubuntu 18.04 Bionic Beaver

Without further description on the docker tool, the following are steps for installing Docker in Linux Ubuntu 18.04 Bionic Beaver. The steps consist of several parts. The first part is the pre-installation part. The next one is the installation part :


Pre-Installation Part of Docker

For the pre-installation part, there are several steps to do. The following are those steps :

1. Switch to root account for docker installation :

user@hostname:~$ sudo su - 
[sudo] password for user: 

2. Install several packages where those packages are the pre-requirement for further installation of docker :

root@hostname:~# sudo apt install apt-transport-https ca-certificates curl software-properties-common
Reading package lists... Done
Building dependency tree       
Reading state information... Done
ca-certificates is already the newest version (20180409).
curl is already the newest version (7.58.0-2ubuntu3.5).
software-properties-common is already the newest version (
apt-transport-https is already the newest version (1.6.6).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

3. Add the gpg key for installing docker. This step is important to make the source of the docker installer package is a trust site. Just execute the following command :

root@hostname:~# curl -fsSL | sudo apt-key add -


4. The following is the step for adding the site containing docker installer to the Ubuntu repository for further installation :

root@hostname:~# sudo add-apt-repository "deb [arch=amd64] bionic stable"
Ign:1 stable InRelease
Hit:2 stable Release                                                                                                                       
Get:3 bionic InRelease [64,4 kB]                                                                                                                    
Get:5 bionic-security InRelease [83,2 kB]                                                                                                                              
Hit:6 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic InRelease                                                      
Get:7 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates InRelease [88,7 kB]                                                                         
Hit:8 bionic InRelease                                                                     
Get:9 bionic-security/main amd64 DEP-11 Metadata [204 B]              
Get:10 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-backports InRelease [74,6 kB]                                                        
Get:11 bionic-security/universe amd64 DEP-11 Metadata [9.400 B]                   
Get:12 bionic-security/universe DEP-11 64x64 Icons [16,3 kB]                
Get:13 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/main i386 Packages [393 kB]                                                    
Get:14 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/main amd64 Packages [443 kB]
Get:15 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/main amd64 DEP-11 Metadata [233 kB]
Get:16 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/main DEP-11 48x48 Icons [52,2 kB]
Get:17 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/main DEP-11 64x64 Icons [99,0 kB]  
Get:18 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/universe i386 Packages [573 kB]
Get:19 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/universe amd64 Packages [577 kB]
Get:20 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [194 kB]
Get:21 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/universe DEP-11 48x48 Icons [176 kB]
Get:22 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/universe DEP-11 64x64 Icons [299 kB]
Get:23 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2.468 B]
Get:24 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [5.104 B]
Ign:25 binary/ InRelease                                 
Hit:26 binary/ Release
Hit:28 bionic InRelease                                                                                                                                
Fetched 3.383 kB in 13s (266 kB/s)                                                                                                                                                                         
Reading package lists... Done

5. After adding the docker repository, don’t forget to execute the following command to update the repository :

root@hostname:~# sudo apt update
Ign:1 stable InRelease
Hit:2 stable Release                                                                                                                                                 
Hit:3 bionic InRelease                                                                                                                                            
Hit:5 bionic-security InRelease                                                                                                                                          
Hit:6 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic InRelease                                                                                                                                   
Hit:7 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-updates InRelease                                                                                                     
Hit:8 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic-backports InRelease                                                                                                  
Hit:9 bionic InRelease                                                                
Ign:10 binary/ InRelease                         
Hit:11 binary/ Release
Hit:13 bionic InRelease
Reading package lists... Done 
Building dependency tree       
Reading state information... Done
All packages are up to date.

6. The following is another step for installing docker. This is to check whether the package ‘docker-ce’ has the possibility for further installation or not. It is another way to check whether the package is installed or not. According to the manual page of the apt_preferences, if the target release has not been specified then APT simply assigns priority 100 to all installed package versions and priority 500 to all uninstalled package versions. The command for checking the docker package as follows :

root@hostname:~# apt-cache policy docker-ce
  Installed: (none)
  Candidate: 5:18.09.0~3-0~ubuntu-bionic
  Version table:
     5:18.09.0~3-0~ubuntu-bionic 500
        500 bionic/stable amd64 Packages
     18.06.1~ce~3-0~ubuntu 500
        500 bionic/stable amd64 Packages
     18.06.0~ce~3-0~ubuntu 500
        500 bionic/stable amd64 Packages
     18.03.1~ce~3-0~ubuntu 500
        500 bionic/stable amd64 Packages

According to the output of the above command, the priority number is 500. It means, the package is not installed. Continue on to the next step for the installation part.


Docker Installation Part

The next part is the installation part. After finishing the above steps for the pre-installation, just execute the following steps.

1. So, the next part is the actual installation process of docker. The following is the command execution :

root@hostname:~# apt install docker-ce
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  aufs-tools cgroupfs-mount docker-ce-cli pigz
The following NEW packages will be installed:
  aufs-tools cgroupfs-mount docker-ce docker-ce-cli pigz
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 50,6 MB of archives.
After this operation, 243 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic/universe amd64 pigz amd64 2.4-1 [57,4 kB]
Get:2 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic/universe amd64 aufs-tools amd64 1:4.9+20170918-1ubuntu1 [104 kB]
Get:3 http://xxxxxxxxxxxxxxxxxxxxx/ubuntu bionic/universe amd64 cgroupfs-mount all 1.4 [6.320 B]
Get:4 bionic/stable amd64 amd64 1.2.0-1 [19,9 MB]                                                                                                   
Get:5 bionic/stable amd64 docker-ce-cli amd64 5:18.09.0~3-0~ubuntu-bionic [13,1 MB]                                                                               
Get:6 bionic/stable amd64 docker-ce amd64 5:18.09.0~3-0~ubuntu-bionic [17,4 MB]                                                                                   
Fetched 50,6 MB in 47s (1.073 kB/s)                                                                                                                                                                        
Selecting previously unselected package pigz.
(Reading database ... 278613 files and directories currently installed.)
Preparing to unpack .../0-pigz_2.4-1_amd64.deb ...
Unpacking pigz (2.4-1) ...
Selecting previously unselected package aufs-tools.
Preparing to unpack .../1-aufs-tools_1%3a4.9+20170918-1ubuntu1_amd64.deb ...
Unpacking aufs-tools (1:4.9+20170918-1ubuntu1) ...
Selecting previously unselected package cgroupfs-mount.
Preparing to unpack .../2-cgroupfs-mount_1.4_all.deb ...
Unpacking cgroupfs-mount (1.4) ...
Selecting previously unselected package
Preparing to unpack .../3-containerd.io_1.2.0-1_amd64.deb ...
Unpacking (1.2.0-1) ...
Selecting previously unselected package docker-ce-cli.
Preparing to unpack .../4-docker-ce-cli_5%3a18.09.0~3-0~ubuntu-bionic_amd64.deb ...
Unpacking docker-ce-cli (5:18.09.0~3-0~ubuntu-bionic) ...
Selecting previously unselected package docker-ce.
Preparing to unpack .../5-docker-ce_5%3a18.09.0~3-0~ubuntu-bionic_amd64.deb ...
Unpacking docker-ce (5:18.09.0~3-0~ubuntu-bionic) ...
Setting up aufs-tools (1:4.9+20170918-1ubuntu1) ...
Setting up (1.2.0-1) ...
Created symlink /etc/systemd/system/ → /lib/systemd/system/containerd.service.
Processing triggers for ureadahead (0.100.0-20) ...
Setting up cgroupfs-mount (1.4) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for systemd (237-3ubuntu10.9) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Setting up docker-ce-cli (5:18.09.0~3-0~ubuntu-bionic) ...
Setting up pigz (2.4-1) ...
Setting up docker-ce (5:18.09.0~3-0~ubuntu-bionic) ...
update-alternatives: using /usr/bin/dockerd-ce to provide /usr/bin/dockerd (dockerd) in auto mode
Created symlink /etc/systemd/system/ → /lib/systemd/system/docker.service.
Processing triggers for ureadahead (0.100.0-20) ...

2. After the installation is actually finished, the following is an additional step for checking the service status :

root@hostname:~# sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2018-11-23 16:41:23; 32s ago
 Main PID: 24877 (dockerd)
    Tasks: 13
   CGroup: /system.slice/docker.service
           └─24877 /usr/bin/dockerd -H unix://

Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.168761810+07:00" level=warning msg="Your kernel does not support swap memory limit"
Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.168824696+07:00" level=warning msg="Your kernel does not support cgroup rt period"
Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.168841525+07:00" level=warning msg="Your kernel does not support cgroup rt runtime"
Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.169568752+07:00" level=info msg="Loading containers: start."
Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.329848625+07:00" level=info msg="Default bridge (docker0) is assigned with an IP address Daemon option --bip can be used
Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.418470270+07:00" level=info msg="Loading containers: done."
Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.538387261+07:00" level=info msg="Docker daemon" commit=4d60db4 graphdriver(s)=overlay2 version=18.09.0
Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.538608965+07:00" level=info msg="Daemon has completed initialization"
Nov 23 16:41:23 hostname systemd[1]: Started Docker Application Container Engine.
Nov 23 16:41:23 hostname dockerd[24877]: time="2018-11-23T16:41:23.593324090+07:00" level=info msg="API listen on /var/run/docker.sock"

3. The next step, it is to modify the user for further docker administration task. It is for adding the specific user executing docker to the ‘docker’ group. Just execute the following command :

root@hostname:~# usermod -aG docker user
root@hostname:~# id -nG 
root@hostname:~# id -nG user
user adm cdrom sudo dip plugdev lpadmin sambashare libvirt docker

4. The last step, just execute the following command to start using docker :

user@hostname:~$ docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

      --config string      Location of client config files (default "/home/user/.docker")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/home/user/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/home/user/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/home/user/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  deploy      Deploy a new stack or update an existing stack
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

Leave a Reply