How to build Docker Container Images with Dockerfile

In our previous articles we have discussed how to Install and setup Docker on CentOS 7.x and Ubuntu Server 16.04. We have also learn how to pull Docker images from Docker Hub / registry. There are some circumstances and use cases that we want to make changes in the Docker images and that changes should be available whenever we launch or provision a Docker container. This can be achieved by three different ways:

  • Commit
  • Dockerfile
  • Docker Compose

Commit is an option in docker command which allows us to save the changes of a container to a Docker image. One of the limitations of commit is that it is not scaleable and very difficult to automate the tasks.In our last article we have also learn how to use Docker commit command. Apart from Docker Commit we can build the Docker images using “Dockerfile“.

Dockerfile is a text file or a script which contains Keywords and set of Linux commands which are executed automatically whenever we build the Docker Image. Creating Docker images using Docker file is similar to template concept of Virtualization world. In this article we will discuss how to create docker images from the Docker file. Some of the Keywords that are generally used in a Dockerfile are listed below:


From Keyword specify the name of image that will be used as base image while building the Docker Image, Docker command will search this image from local image repository if it is not available in local repository then it will fetch from Registry server


FROM  Ubuntu:14.04


Name of the Community or Guy who maintains docker image is specified under MAINTAINER Keyword.


MAINTAINER  Linuxtechi Team <[email protected]>


Commands mentioned after RUN keyword will be executed during creation of Docker image

Example :

RUN  apt-get update
RUN apt-get install apache2 -y
RUN echo 'Web site Hosted inside a container' > /var/ww/html/index.html
RUN echo 'apache2ctl start' >> /root/.bashrc


Commands mentioned after CMD keyword will executed when a container is launched from a docker image


CMD /bin/bash
CMD wget {url}

Whenever we use multiple CMD keywords then the latest one will get the preference. If you have noticed when we launch a container we get a bash shell this because of CMD keyword (CMD /bin/bash).


ENTRYPOINT is similar to CMD, Commands after entrypoint will take arguments from CMD or in other words we can say that CMD is the argument for ENTRYPOINT. Commands in ENTRYPOINT will always be executed.


CMD [""]


With ENV keyword we can set the environmental or shell variables as per requirement, let’s suppose I want build Docker image where I will install java and need to set JAVA path, this can be achieved by using ENV keyword.


ENV JAVA_HOME= /usr/jdk/jdk{version}


With VOLUME keyword we can attach a folder from Docker engine host to a container.


VOLUME  /mnt/dock_storage  /data


With EXPOSE keyword we can expose application port from Container




Using COPY keyword we can copy the files from Docker Host to a container.


COPY /my.txt   /etc


With ADD keyword we can specify the name of our cloud qcow2 image, which we want to use to build the docker image from the scratch.

Example :

FROM scratch
ADD centos-7-3.qcow2

To view the keywords and command that are being used for building docker image use “docker history” command. Let’s see the keywords and commands of a docker image Ubuntu:14.04

# docker history ubuntu:14.04


In the above output if keyword is not mentioned in the commands then these commands will be executed in RUN keyword.

Refer the following steps to build the Docker Image using above discussed Keywords.

Step:1 Create a Dockerfile

Let’s first create a folder with the name mycode under / file system and then create Dockerfile under this folder

[[email protected] ~]# mkdir /mycode
[[email protected] ~]# cd /mycode/
[[email protected] mycode]# touch Dockerfile
[[email protected] mycode]#

Note : Name of docker file must be “Dockerfile”, if we don’t follow this convention our docker build command will not work.

Step:2 Add Keywords and Commands to Dockerfile

Open the Dockerfile with vi editor and add the following keywords

[[email protected] mycode]# vi Dockerfile
FROM mycentos:v2

MAINTAINER  Linuxtechi Team <[email protected]>

RUN yum -y install httpd php

RUN echo "Website is hosted inside a container" > /var/www/html/index.html


VOLUME /mnt/docker_vol  /data

RUN echo "httpd" >> /root/.bashrc

CMD ["/bin/bash"]

Save and Exit the file.

Step:3 Build the image using ‘docker build command’

Go to the /mycode folder and run the beneath command, in docker build command -t option is used to set tag name of docker image, in my case i am setting docker image name and tag as “mycentos:apachev1

[[email protected] mycode]# docker build -t mycentos:apachev1 .


Step:4 Verify the new Docker Image and launch a container

Let’s first see whether new docker image is available in local image repository using following command

[[email protected] ~]# docker images


Now launch a container and see whether apache web server server is running or not and also verify whether the volume is mounted or not.

[[email protected] ~]# docker run -it -p 80:80 --name=web_container1 mycentos:apachev1


In the above scenario I have used already downloaded docker image as a base for building new Docker image. In case you want to use your own cloud image (qcow2) as base image for docker then it is also possible with ADD keyword. Make sure you copy the qcow2 file in same folder where your “Dockerfile” resides. Repeat all the above steps and the only change is in the Dockerfile.

Contents of Sample Dockerfile is list below

FROM scratch

MAINTAINER  Linuxtechi Team <[email protected]>

ADD CentOS-7-x86_64.qcow2 /

RUN yum -y install httpd php

RUN echo "Website is hosted inside a container" > /var/www/html/index.html


VOLUME /mnt/docker_vol  /data

RUN echo "httpd" >> /root/.bashrc

CMD ["/bin/bash"]

That’s all, Hope you got an idea how to build your docker images using Dockerfile. Please share your feedback and comments

2 thoughts on “How to build Docker Container Images with Dockerfile”

Leave a Reply

Your email address will not be published. Required fields are marked *