-->
  • Recent Articles

    How to create Docker Images with a Dockerfile

    How to create Docker Images with a Dockerfile


    Docker is a set of platform as a service products that use OS-level virtualization to deliver software in packages called containers. Containers are isolated from one another and bundle their own software, libraries and configuration files; they can communicate with each other through well-defined channels.

    Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build users can create an automated build that executes several command-line instructions in succession.

    In this tutorial, We will learn how to create your own docker image with a dockerfile.

    Details in a Dockerfile:

    FROM

    The base image for building a new image.

    MAINTAINER

    Optional, it contains the name of the maintainer of the image.

    RUN

    Used to execute a command during the build process of the docker image.

    ADD

    Copy a file from the host machine to the new docker image.
    How to Copy Files from and to Kubernetes pods and Docker Container

    ENV

    Define an environment variable.

    CMD

    Used for executing commands when we build a new container from the docker image.

    ENTRYPOINT

    Define the default command that will be executed when the container is running.

    WORKDIR

    This is directive for CMD command to be executed.

    USER

    Set the user or UID for the container created with the image.

    VOLUME

    Enable access/linked directory between the container and the host machine.

    Lets Start:

    Install Docker:

    Please follow this article to install docker according to your OS.

    Docker Installation & Configuration ON CENTOS 7
    Install docker on Ubuntu 

    Ubuntu:

    root@dockerserver# apt-get update

    Install docker.io with this apt command:

    root@dockerserver# apt-get install docker.io

    Now start the docker service and enable it to start at boot time:

    systemctl start docker

    CentOS:

    1. Create Docker Repo. Kernel should be 3.10.

    tee /etc/yum.repos.d/docker.repo <<-'EOF'

    [dockerrepo]

    name=Docker Repository

    baseurl=https://yum.dockerproject.org/repo/main/centos/7/

    enabled=1

    gpgcheck=1

    gpgkey=https://yum.dockerproject.org/gpg

    EOF


    2. Install docker.

    yum install -y  docker-ce docker-ce-cli containerd.io

    Create a Dockerfile

    In this step, we will create a new directory for the dockerfile and define what we want to do with that dockerfile.

    [root@dockerserver nginxtest]# cat Dockerfile
      FROM nginx

      COPY index.html /usr/share/nginx/html/
    [root@dockerserver nginxtest]#

    In this Dockerfile we are pulling latest nginx docker image and a copying index.html file to the docker image from the host machine.

    FROM nginx :  pulling latest nginx docker image
    COPY index.html /usr/share/nginx/html/ : copying index.html file to the docker image from the host machine

    Build New Docker Image


    As we have the  Dockerfile, now we can build a new docker image based on our dockerfile with the docker command below:

    [root@dockerserver nginxtest]# docker build -t manastri/springcloud .
    Sending build context to Docker daemon  123.9kB
    Step 1/2 : FROM nginx
     ---> c7460dfcab50
    Step 2/2 : COPY index.html /usr/share/nginx/html/
     ---> 8dcda34419b1
    Successfully built 8dcda34419b1
    Successfully tagged manastri/springcloud:latest
    [root@dockerserver nginxtest]#

    When the command completed successfully, we can check the new image 'manastri/springcloud ' with the docker command below:

    [root@dockerserver nginxtest1]# docker images
    REPOSITORY                                TAG                 IMAGE ID            CREATED              SIZE
    manastri/springcloud                      latest              8dcda34419b1        About a minute ago   126MB

    No comments