What Is Docker?
From the Docker website,
Docker is an open platform for developing, shipping, and running applications. Docker is designed to deliver your applications faster. With Docker you can separate your applications from your infrastructure and treat your infrastructure like a managed application. Docker helps you ship code faster, test faster, deploy faster, and shorten the cycle between writing code and running code.
Docker does this by combining a lightweight container virtualization platform with workflows and tooling that help you manage and deploy your applications.
At its core, Docker provides a way to run almost any application securely isolated in a container. The isolation and security allow you to run many containers simultaneously on your host. The lightweight nature of containers, which run without the extra load of a hypervisor, means you can get more out of your hardware.
Docker is lightweight and fast platform that provides a viable, cost-effective alternative to hypervisor-based virtual machines. This is perfectly suitable for development environments. The developers can write any code of their choice inside the containers, and then share them to the other developers later via Docker for testing. Once the testing is done, the codes or applications can be pushed to the production environment and you can start deploying and using the applications in real time.
You can run the Docker containers on any physical system, or Virtual machines, or in any Cloud platforms. Docker will run on almost all modern operating systems like GNU/Linux, Mac OS, and Windows etc. Moreover, Docker will run Cloud platforms like Amazon EC2, Rackspace Cloud, Google Cloud, and IBM softlayer etc.
You might want to check our previous articles about LXC and Vagrant.
This tutorial describes you how to install and use Docker on Ubuntu and CentOS like systems. This article was tested on Ubuntu 14.04 and CentOS 7 64bit Minimal servers.
Install Docker
On Ubuntu 14.04 systems:
curl -sSL https://get.docker.io/ubuntu/ | sudo sh
Note: The above script is deprecated now. Please head over to the Docker installation page for Ubuntu, and install it.
On CentOS 7 systems:
Docker is available on CentOS 7 default repositories. So, you can install it by just running the following command from your Terminal.
yum install docker
Enable and start Docker service:
systemctl enable docker systemctl start docker
For other distributions, check out the official installation instructions page.
Usage
1. Creating New Containers
Docker usage is as simple as LXC. First, let us download the Ubuntu image and create a Ubuntu container.
To do that, switch to root user and run the following command from the Terminal:
docker pull ubuntu
Sample Output:
Pulling repository ubuntu 75204fdb260b: Pulling image (utopic) from ubuntu, endpoint: https://cdn-registry-1.docker.io/v1/ 195eb90b5349: Pulling image (saucy) from ubuntu, endpoint: https://cdn-registry-1.docker.io/v1/ 3db9c44f4520: Pulling image (lucid) from ubuntu, endpoint: https://cdn-registry-1.docker.io/v1/ 463ff6be4238: Pulling image (13.04) from ubuntu, endpoint: https://cdn-registry-75204fdb260b: Pulling dependent layers 195eb90b5349: Pulling dependent layers 3db9c44f4520: Downloading 39.62 MB/63.51 MB 11m53s 463ff6be4238: Downloading 16.95 MB/18.11 MB 35s 463ff6be4238: Downloading 17.32 MB/18.11 MB 24s 463ff6be4238: Downloading 17.51 MB/18.11 MB 18s 822a01ae9a15: Pulling dependent layers 3db9c44f4520: Downloading 40.68 MB/63.51 MB 11m10s 463ff6be4238: Download complete c5881f11ded9: Pulling fs layer 3db9c44f4520: Downloading 42.26 MB/63.51 MB 10m6s c5881f11ded9: Download complete cc58e55aa5a5: Download complete f127542f0b61: Download complete 6cfa4d1f33fb: Download complete bac448df371d: Download complete 3af9d794ad07: Download complete af82eb377801: Download complete 93c381d2c255: Download complete b7c6da90134e: Download complete 47dd6d11a49f: Download complete a5208e800234: Download complete f33dbb8bc20e: Download complete 9fccf650672f: Download complete 1186c90e2e28: Download complete 92ac38e49c3e: Download complete dfaad36d8984: Download complete fae16849ebe2: Download complete aa822e26d727: Download complete f6a1afb93adb: Download complete 5796a7edb16b: Download complete 0f4aac48388f: Download complete 31db3b10873e: Download complete 209ea56fda6d: Download complete
The above command will first look for the ubuntu images from the localhost itself. If images are not available locally, then it pull the latest images from the Docker hub.
If you want to build a CentOS container, then pull the centos image instead:
docker pull centos
To list all downloaded Docker images, run the following command:
docker images
Sample Output:
REPOSITORY         TAG                IMAGE ID           CREATED            VIRTUAL SIZE ubuntu             14.04              c4ff7513909d       2 days ago         225.4 MB ubuntu             trusty             c4ff7513909d       2 days ago         225.4 MB ubuntu             latest             c4ff7513909d       2 days ago         225.4 MB ubuntu             14.04.1            c4ff7513909d       2 days ago         225.4 MB ubuntu             utopic             75204fdb260b       2 days ago         230.1 MB ubuntu             14.10              75204fdb260b       2 days ago         230.1 MB ubuntu             precise            822a01ae9a15       2 days ago         108.1 MB ubuntu             12.04.5            822a01ae9a15       2 days ago         108.1 MB ubuntu             12.04              822a01ae9a15       2 days ago         108.1 MB ubuntu             12.10              c5881f11ded9       8 weeks ago        172.2 MB ubuntu             quantal            c5881f11ded9       8 weeks ago        172.2 MB ubuntu             13.04              463ff6be4238       8 weeks ago        169.4 MB ubuntu             raring             463ff6be4238       8 weeks ago        169.4 MB ubuntu             13.10              195eb90b5349       8 weeks ago        184.7 MB ubuntu             saucy              195eb90b5349       8 weeks ago        184.7 MB ubuntu             10.04              3db9c44f4520       3 months ago       183 MB ubuntu             lucid              3db9c44f4520       3 months ago       183 MB
The above images have been built by someone else on the Docker community. The downloaded images will be saved locally in the /var/lib/docker/ directory.
After downloading the Docker images, let us run the new Container by entering the following command:
docker run -t -i ubuntu:14.04.1 /bin/bash
Where,
-t : Assigns a pseudo-tty or terminal inside our new container.
-i : Allows us to make an interactive connection by grabbing the standard in (STDIN) of the container.
/bin/bash : This will launch a Bash shell inside our container.
ubuntu:14.04.1 : Launches the container running latest Ubuntu 14.04.1 image.
Or, you can run a Container by using the Image id also.
docker run -t -i c4ff7513909d /bin/bash
Here, c4ff7513909d is the Ubuntu 14.04.1 Image id.
To run Ubuntu 14.10 container:
docker run -t -i ubuntu:14.10 /bin/bash
Likewise, you can run Ubuntu 13.10 container:
docker run -t -i ubuntu:13.10 /bin/bash
The above commands will let you to login to the container.
[email protected]:/#
Now, you can use the container to build your applications.
To return back to your original host’s Terminal without quiting the Container, press ctrl+p, following by ctrl+q key.
To view the running Docker containers, run the following command:
docker ps
Sample Output:
CONTAINER ID       IMAGE              COMMAND            CREATED            STATUS             PORTS              NAMES 61186887519b       ubuntu:14.04       /bin/bash          20 minutes ago     Up 20 minutes                          jovial_archimedes
To view all containers, use the flag “-a”.
docker ps -a
If you want to attach back to the running container, run the following command:
docker attach 61186887519b
Here, 61186887519b is the ID of the running container.
To stop the container, type exit from that Container’s bash shell.
2. Building Our Own Images
What we’ve seen above is run an image created by someone else in the Docker Hub. Now, We will see how to create our own image with some preinstalled packages (Ex.apache web server) in the Container.
First, run the required container. Here, I will run Ubuntu 14.04.
docker run -t -i ubuntu:14.04 /bin/bash
Install Apache web server in the Container.
apt-get update && apt-get install apache2 -y
Start apache service:
service apache2 start
Check if server is working by navigating to the http://ip-address-of-the-container/ from your original host browser.
Note: You can find the IP address of any Container by running the “ifconfig” command inside the Container’s Terminal.
Voila! Apache server is working!!
Now, return back to your original system host Terminal by pressing ctrl+p and ctrl+q keys.
Run the following command to build our own Docker image which includes apache web server preinstalled.
Example:
docker commit 28107ffa5560 sk_unixmen/ubuntu_apach
Sample Output:
9f656205a4bd30959b437da8bf91d848702b0d512c4c0cdb56eeadf771bcab85
Here,
28107ffa5560 – Ubuntu 14.04 container ID. You can find it using command “docker ps”.
sk_unixmen – Name of the user who created the container.
ubuntu_apache – Name of the docker image created by user sk_container.
Now, let us run command “docker images” to see if our new image is created.
docker images
Sample Output:
REPOSITORY                TAG                IMAGE ID           CREATED            VIRTUAL SIZE sk_unixmen/ubuntu_apache  latest             9f656205a4bd       29 seconds ago     260.2 MB ubuntu                    trusty             c4ff7513909d       4 days ago         225.4 MB ubuntu                    14.04              c4ff7513909d       4 days ago         225.4 MB ubuntu                    latest             c4ff7513909d       4 days ago         225.4 MB ubuntu                    14.04.1            c4ff7513909d       4 days ago         225.4 MB ubuntu                    14.10              75204fdb260b       4 days ago         230.1 MB ubuntu                    utopic             75204fdb260b       4 days ago         230.1 MB ubuntu                    12.04              822a01ae9a15       4 days ago         108.1 MB ubuntu                    12.04.5            822a01ae9a15       4 days ago         108.1 MB ubuntu                    precise            822a01ae9a15       4 days ago         108.1 MB ubuntu                    12.10              c5881f11ded9       8 weeks ago        172.2 MB ubuntu                    quantal            c5881f11ded9       8 weeks ago        172.2 MB ubuntu                    13.04              463ff6be4238       8 weeks ago        169.4 MB ubuntu                    raring             463ff6be4238       8 weeks ago        169.4 MB ubuntu                    13.10              195eb90b5349       8 weeks ago        184.7 MB ubuntu                    saucy              195eb90b5349       8 weeks ago        184.7 MB ubuntu                    10.04              3db9c44f4520       3 months ago       183 MB ubuntu                    lucid              3db9c44f4520       3 months ago       183 MB
As you see above, Our new image has been created.
Now, you can create a another new container using the new image which we have created just before.
docker run -t -i sk_unixmen/ubuntu_apache /bin/bash
You’ll be now able to play with your Container as usual. Please note that the apache server is preinstalled in our newly created Image.
3. Removing Containers and Images
Once you done with Containers or Images, you can permanently delete them from your local system.
First, let us view the list of available Containers.
docker ps -a
Sample Output:
CONTAINER ID       IMAGE              COMMAND            CREATED            STATUS                         PORTS              NAMES 6f9a6e4b1e82       9f656205a4bd       /bin/bash          8 minutes ago      Up 8 minutes                                       sad_heisenberg            6ce258454f77       ubuntu:14.04       /bin/bash          30 minutes ago     Up 30 minutes                                      desperate_bohr            777b275823e9       ubuntu:14.04       /bin/bash          40 minutes ago     Exited (0) 30 minutes ago                          compassionate_mclean      eac3b804a2fb       ubuntu:14.10       /bin/bash          22 hours ago       Exited (0) 20 hours ago                            backstabbing_bartik       325d0bfcb828       ubuntu:14.10       /bin/bash          43 hours ago       Exited (0) 43 hours ago                            kickass_torvalds          226c86bc836e       ubuntu:14.04       /bin/bash          43 hours ago       Exited (1) 43 hours ago                            sharp_albattani           7cba44200ff9       ubuntu:14.10       /bin/bash          43 hours ago       Exited (100) 43 hours ago                          jovial_lumiere            28107ffa5560       ubuntu:14.10       /bin/bash          43 hours ago       Exited (-1) About an hour ago                      ecstatic_davinci          3170c250a59f       ubuntu:14.10       /bin/bash          43 hours ago       Exited (0) 43 hours ago                            angry_wright              f41190788d0b       ubuntu:14.04       /bin/bash          44 hours ago       Exited (0) 44 hours ago                            elegant_mcclintock        4610f91b4d65       ubuntu:14.10       /bin/bash          44 hours ago       Exited (0) 44 hours ago                            condescending_archimedes  61186887519b       ubuntu:14.04       /bin/bash          44 hours ago       Exited (0) 44 hours ago                            jovial_archimedes
As you see above result, there are two Containers running now. Let us stop them first.
docker stop 6f9a6e4b1e82 docker stop 6ce258454f77
Here, 6f9a6e4b1e82 and 6ce258454f77 are ID of the running Container’s.
After stopping the Containers, run the following commands to delete them.
docker rm 6f9a6e4b1e82 docker rm 6ce258454f77
Now, the above two Container’s have been deleted from the local system.
Similarly, you can delete the Docker Images too.
Let us view the list of available Docker Images in our local system.
docker images
Sample Output:
REPOSITORY         TAG                IMAGE ID           CREATED            VIRTUAL SIZE <none>             <none>             9f656205a4bd       15 minutes ago     260.2 MB ubuntu             14.04              c4ff7513909d       4 days ago         225.4 MB ubuntu             latest             c4ff7513909d       4 days ago         225.4 MB ubuntu             14.04.1            c4ff7513909d       4 days ago         225.4 MB ubuntu             trusty             c4ff7513909d       4 days ago         225.4 MB ubuntu             14.10              75204fdb260b       4 days ago         230.1 MB ubuntu             utopic             75204fdb260b       4 days ago         230.1 MB ubuntu             12.04.5            822a01ae9a15       4 days ago         108.1 MB ubuntu             precise            822a01ae9a15       4 days ago         108.1 MB ubuntu             12.04              822a01ae9a15       4 days ago         108.1 MB ubuntu             12.10              c5881f11ded9       8 weeks ago        172.2 MB ubuntu             quantal            c5881f11ded9       8 weeks ago        172.2 MB ubuntu             13.04              463ff6be4238       8 weeks ago        169.4 MB ubuntu             raring             463ff6be4238       8 weeks ago        169.4 MB ubuntu             13.10              195eb90b5349       8 weeks ago        184.7 MB ubuntu             saucy              195eb90b5349       8 weeks ago        184.7 MB ubuntu             10.04              3db9c44f4520       3 months ago       183 MB ubuntu             lucid              3db9c44f4520       3 months ago       183 M
To delete an Image (Ex.9f656205a4bd), run the following command:
docker rmi 9f656205a4bd
The Docker image has been deleted now.
That’s all for now. What we’ve discussed so for is just the Docker installation part and it’s basic usage. I recommended you to go thorough the Official Docker documentation to find out more about Docker.
Cheers!