How to Build and push Docker Image to the Docker Hub Repository

The post discusses how to build and push docker images on local docker system to the docker hub repository. For the purpose of this post, we will pull a CentOS image from the public Repository in Docker hub. Later we will run a container using this image and add a new file to the container. This new container will then be pushed to the Docker hub as a new docker image.

Building a Docker Image

1. Pull the latest version of the CentOS image from the Docker Hub.

# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
Digest: sha256:4565fe2dd7f4770e825d4bd9c761a81b26e49cc9e3c9631c58cfc3188be9505a
Status: Image is up to date for centos:latest
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        2 weeks ago         197MB

2. Once the CentOS Image is downloaded, we will run docker container based on this image with the name “centos_test”.

# docker run -it --name="centos_test" centos:latest /bin/bash
[root@e121d03b20dc /]#

3. Now lets create a new directory in the container “test_dir” with a file in it as “test_file”. Also add some random text in the test_file.

[root@e121d03b20dc /]# mkdir test_dir
[root@e121d03b20dc /]# cd test_dir
[root@e121d03b20dc test_dir]# echo "This is a sample text" > test_file         
[root@e121d03b20dc test_dir]# cat test_file
This is a sample text
[root@e121d03b20dc test_dir]# ls -lrt
total 4
-rw-r--r--. 1 root root 22 Nov 19 16:12 test_file

4. Next step is to build the new image with the docker commit command using the newly created docker container. The ‘docker commit’ command is run from docker host and not from the docker container itself.

# docker commit -m="This a test image" centos_test geeklab/test_repo
sha256:8a34a37712626012e995e3b02e2179bd38fb646cfc9ceaa30b15a4774d198f67

Here,
-m=”This a test image” : is a Commit message.
centos_test : Name of the container from which you are creating the image.
geeklab/test_repo: Name of the Docker Hub repository where you want to push the image. This is the tag taht will be assigned to the new image created.

5. After the above command is run, you would see the new image “centos_image” in the list of docker images available locally on the system.

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
geeklab/test_repo   latest              8a34a3771262        About a minute ago   197MB
centos              latest              d123f4e55e12        2 weeks ago          197MB

Pushing the docker image to docker hub repository

1. Next step is login into the docker hub repository you want to push the image to.

# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: geeklab
Password: 
Login Succeeded

2. Now you can push the image to the docker hub repository.

# docker push  geeklab/test_repo
The push refers to a repository [docker.io/geeklab/test_repo]
3dbbbdcf3ef9: Pushed 
cf516324493c: Pushed 
latest: digest: sha256:c542e22fe3f29f809226d72b6c6d8efd0bec46c2924d66ad8fbb5612972740fe size: 736

3. Now, we’ll login to the Docker Hub and verify the image in Repositories.

Related Post