The docker run command is used to launch Docker containers from images.
In this article, I’ll show you how to launch a container from an image using the example of the last official Ubuntu official Docker image.
I will show how to install apache2 inside a container with Ubuntu and how to save this container as a new image.
And in the end I will show how to start containers from this new image in the interactive and background modes.
Launching a Container from an Image in Docker
Do Not Confuse:
Docker image itself cannot be “launched”. The docker run command takes the Docker image as a template and creates a container from it that launches.
Find the required image on the Docker Hub:
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian... 6759 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openss... 141 [OK]
rastasheep/ubuntu-sshd Dockerized SSH ser... 114 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS w... 88 [OK]
ubuntu-upstart Upstart is an even... 80 [OK]
Download the Docker image from the repository using the docker pull command:
$ docker pull ubuntu
Launch the container from the Docker image:
$ docker run -it ubuntu /bin/bash
root@e485d06f2182:/#
When you run docker run IMAGE, the Docker engine takes IMAGE, adds a writable top layer and initializes various parameters (network ports, container name, identifier and resource limits).
Install apache2 web server inside the container, and then exit it
root@e485d06f2182:/# apt update
root@e485d06f2182:/# apt install apache2 -y
root@e485d06f2182:/# exit
From the stopped container in which you installed apache2, create a new image and name it apache_snapshot:
$ docker commit e485d06f2182 apache_snapshot
To view all the images on the Docker host, do:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache_snapshot latest 13037686eac3 22 seconds ago 249MB
ubuntu latest 00fd29ccc6f1 3 weeks ago 111MB
Now, from the new Docker image, you can run containers interactively:
$ docker run -it apache_snapshot /bin/bash
Or, from this Docker image, you can run the container in the background with the port: 80 inside the Docker container forwarded to port: 8080 of the Docker host:
$ docker run -d -p 8080:80 apache_snapshot /usr/sbin/apache2ctl -D FOREGROUND
In this case, to make sure that apache2 inside the container is running, just open http://localhost:8080/ and you will see the start page: “Apache2 Ubuntu Default Page”.