How to Install Docker and Run Docker Containers in Ubuntu

Docker is an open source and popular operating system-level virtualization (commonly known as “containerization”) technology that primarily runs on Linux and Windows. Docker makes it easier to create, deploy, and run applications by using containers.

With containers, developers (and system administrators) can package up an application with everything needed to run the application – the code, a run-time, libraries, environment variables, and configuration files, and ship it all out as one package. Yes, it’s that great!

In this article, we will show you how to install Docker CE (Community Edition), create and run Docker containers on Ubuntu distribution.

Installing Docker CE (Community Edition) in Ubuntu

1. To install Docker CE, first you need to remove older versions of Docker were called docker, , or docker-engine from the system using following command.

$ sudo apt-get remove docker docker-engine containerd runc

2. Next, you need set up the Docker repository to install and update Docker from the repository using following commands.

$ sudo apt-get update
$ curl -fsSL | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] $(lsb_release -cs) stable"

3. Update the apt package index and install the latest version of Docker CE using following commands.

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli

Installing Docker CE in Ubuntu

Reading package lists... Done
Building dependency tree Reading state information... Done
The following additional packages will be installed: aufs-tools cgroupfs-mount 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 167 not upgraded.
Need to get 50.7 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 bionic/universe amd64 pigz amd64 2.4-1 [57.4 kB]
Get:2 bionic/stable amd64 amd64 1.2.4-1 [19.9 MB]
Get:3 bionic/universe amd64 aufs-tools amd64 1:4.9+20170918-1ubuntu1 [104 kB]
Get:4 bionic/universe amd64 cgroupfs-mount all 1.4 [6,320 B]
Get:5 bionic/stable amd64 docker-ce-cli amd64 5:18.09.3~3-0~ubuntu-bionic [13.1 MB]
Get:6 bionic/stable amd64 docker-ce amd64 5:18.09.3~3-0~ubuntu-bionic [17.4 MB]
Fetched 50.7 MB in 7s (7,779 kB/s) ...

4. After successfully installing the Docker CE package, the service should be auto-started and auto-enabled to start at system boot, you can check its status using following command.

$ sudo systemctl status docker 

Checking Docker CE Status

? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2019-03-06 08:06:42 UTC; 2min 18s ago Docs: Main PID: 5274 (dockerd) Tasks: 8 CGroup: /system.slice/docker.service ??5274 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Mar 06 08:06:41 tecmint dockerd[5274]: time="2019-03-06T08:06:41.562587408Z" level=warning msg="Your kernel does not support cgroup rt runtime"
Mar 06 08:06:41 tecmint dockerd[5274]: time="2019-03-06T08:06:41.562767803Z" level=warning msg="Your kernel does not support cgroup blkio weight"
Mar 06 08:06:41 tecmint dockerd[5274]: time="2019-03-06T08:06:41.562966844Z" level=warning msg="Your kernel does not support cgroup blkio weight_device"
Mar 06 08:06:41 tecmint dockerd[5274]: time="2019-03-06T08:06:41.565298457Z" level=info msg="Loading containers: start."
Mar 06 08:06:41 tecmint dockerd[5274]: time="2019-03-06T08:06:41.950942467Z" level=info msg="Default bridge (docker0) is assigned with an IP address Daemon option --bip can be used to set a prefer
Mar 06 08:06:42 tecmint dockerd[5274]: time="2019-03-06T08:06:42.036964493Z" level=info msg="Loading containers: done."
Mar 06 08:06:42 tecmint dockerd[5274]: time="2019-03-06T08:06:42.156279378Z" level=info msg="Docker daemon" commit=774a1f4 graphdriver(s)=overlay2 version=18.09.3
Mar 06 08:06:42 tecmint dockerd[5274]: time="2019-03-06T08:06:42.157145045Z" level=info msg="Daemon has completed initialization"
Mar 06 08:06:42 tecmint systemd[1]: Started Docker Application Container Engine.
Mar 06 08:06:42 tecmint dockerd[5274]: time="2019-03-06T08:06:42.224229999Z" level=info msg="API listen on /var/run/docker.sock"

5. Finally, verify that Docker CE is installed properly by running the hello-world image.

$ sudo docker run hello-world

Verify Docker CE Installation

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: For more examples and ideas, visit:

Learn Basic Docker Commands in Ubuntu

6. To get a information about Docker, run the following command.

$ sudo docker info Kernel Version: 5.0.0-050000-generic
Operating System: Ubuntu 18.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.452GiB
Name: tecmint
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Experimental: false
Insecure Registries:
Live Restore Enabled: false
Product License: Community Engine

7. To get a information about Docker version, run the following command.

$ sudo docker version Client: Version: 18.09.3 API version: 1.39 Go version: go1.10.8 Git commit: 774a1f4 Built: Thu Feb 28 06:53:11 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.3 API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: 774a1f4 Built: Thu Feb 28 05:59:55 2019 OS/Arch: linux/amd64 Experimental: false

8. To get a list of all available Docker commands run docker on your terminal.

$ docker Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/home/tecmint/.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/tecmint/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/home/tecmint/.docker/cert.pem") --tlskey string Path to TLS key file (default "/home/tecmint/.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

Download a Docker Image in Ubuntu

9. To run a Docker container, first you need to download an image from Docker Hub – provides free images from its repositories.

For example, to download a Docker image called CentOS 7, issue the following command.

centos The official build of CentOS. 5227 [OK] ansible/centos7-ansible Ansible on Centos7 120 [OK]
jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86… 107 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 81 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 50 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 47 tutum/centos Simple CentOS docker image with SSH access 43 gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glust… 40 [OK]
openshift/base-centos7 A Centos7 derived base image for Source-To-I… 39 centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 37 centos/python-35-centos7 Platform for building and running Python 3.5… 33 kinogmt/centos-ssh CentOS with SSH 26 [OK]
openshift/jenkins-2-centos7 A Centos7 based Jenkins v2.x image for use w… 20 centos/php-56-centos7 Platform for building and running PHP 5.6 ap… 19 pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 10 openshift/wildfly-101-centos7 A Centos7 based WildFly v10.1 image for use … 6 openshift/jenkins-1-centos7 DEPRECATED: A Centos7 based Jenkins v1.x ima… 4 darksheer/centos Base Centos Image -- Updated hourly 3 [OK]
pivotaldata/centos Base centos, freshened up a little with a Do… 2 pivotaldata/centos-mingw Using the mingw toolchain to cross-compile t… 2 pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated wi… 1 openshift/wildfly-81-centos7 A Centos7 based WildFly v8.1 image for use w… 1 blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK]
smartentry/centos centos with smartentry 0 [OK]
jameseckersall/sonarr-centos Sonarr on CentOS 7 0 [OK]

10. After you determined on what image you want to run based on your requirements, download it locally by running the below command (in this case an CentOS image is downloaded and used).

$ docker pull centos Using default tag: latest
latest: Pulling from library/centos
a02a4930cb5d: Pull complete Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for centos:latest

11. To list all the available Docker images on your host run the following command.

hello-world latest fce289e99eb9 2 months ago 1.84kB
centos latest 1e1148e4cc2c 3 months ago 202MB

12. If you don’t want a Docker image anymore and you can remove it using the following command.

$ sudo docker rmi centos Untagged: centos:latest
Untagged: [email protected]:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Deleted: sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb
Deleted: sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956

Run a Docker Container in Ubuntu

13. In order to create and run a Docker container, first you need to run a command into a downloaded CentOS image, so a basic command would be to check the distribution version file inside the container using cat command, as shown.

$ docker run centos cat /etc/issue

14. To run the containers again, first you need to get the Container ID or Name by running the following command, which will displays a list of the running and stopped containers:

0ddfa81c5779 centos "cat /etc/issue" About a minute ago Exited (0) About a minute ago elastic_shirley

15. Once the Container ID or Name has been acquired, you can start the container using the following command:

$ sudo docker start 0ddfa81c5779
$ sudo docker start elastic_shirley

Here, the string 0ddfa81c5779 represents the container ID and elastic_shirley represents the container Name.

16. To stop the running container run docker stop command by specifying the Container ID or Name.

$ sudo docker stop 0ddfa81c5779
$ sudo docker stop elastic_shirley

17. A more better way, so that you don’t have to remember the container ID would be to define a unique name for each container you create by using the --name option as shown.

$ docker run --name myname centos cat /etc/issue

18. In order to connect and run Linux commands into a container issue the following command.

$ docker run -it centos bash [[email protected] /]# uname -a
Linux 6213ec547863 5.0.0-050000-generic #201903032031 SMP Mon Mar 4 01:33:18 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[[email protected] /]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 

19. To quit and back to host from the running container session you must type exit command as shown.

$ exit

That’s all for basic container manipulation. If you have any questions, or comments about this article, use the feedback form below to reach us.

Spread the love

Posted by News Monkey