How to use Docker – Command, Image, Container, Docker Hub

Hello Guys!
How are you all doing? Hope you are enjoying what you do, like me 🙂
These days I am digging down docker a bit more and think that I need to keep the story here for further reference. I hope you already gone through my previous article How to install Docker on Ubuntu 18.04
Now its time to use docker for simple tasks.

Docker command takes a chain of options, commands followed by arguments. The syntax takes this form:

docker [option] [command] [arguments]

To view all available subcommands, type:

docker

As of Docker 19, the complete list of available subcommands includes:

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

To view the options available to a specific command, type:

docker docker-subcommand --help

To view system-wide information about Docker, use:

docker info

Let’s have a look at some of these commands. We’ll start by working with images.

Working with Docker Images

Docker image helps to create a docker container. By default, Docker pulls these images from the Docker registry [Docker Hub] managed by Docker[the company behind the Docker project]. Anyone can host their Docker images on Docker Hub, so most applications and Linux distributions you’ll need already have images hosted there.

To check whether you can access and download images from Docker Hub, type the following command:

docker run hello-world

The output will indicate that Docker is working correctly:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

The Output shows that Docker was initially unable to find the hello-world image locally, so it pulling (Downloading) the image from the default repository (Docker Hub). Once the image downloaded, Docker created a container from the image and the application within the container executed, displaying the message.

You can search for images available on Docker Hub by using the docker command with the search subcommand. For example, to search for the Ubuntu image, type:

docker search ubuntu

The script will crawl Docker Hub and return a list of all images whose name matches the search string. In this case, the output will be similar to this:

NAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   10496               [OK]                
dorowu/ubuntu-desktop-lxde-vnc                            Docker image to provide HTML5 VNC interface …   391                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   242                                     [OK]
consol/ubuntu-xfce-vnc                                    Ubuntu container with "headless" VNC session…   209                                     [OK]
ubuntu-upstart                                            Upstart is an event-based replacement for th…   105                 [OK]                
neurodebian                                               NeuroDebian provides neuroscience research s…   64                  [OK]                
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          50                                      [OK]
...

Here in the OFFICIAL column, OK indicates the image built and supported by the company behind the project. Once you’ve identified the image that you would like to use, you can download it to your computer using the pull subcommand.

For download the official ubuntu image to your computer, execute the following command:

docker pull ubuntu

You’ll see the following output:

Using default tag: latest
 latest: Pulling from library/ubuntu
 5c939e3a4d10: Pull complete 
 c63719cdbe7a: Pull complete 
 19a861ea6baf: Pull complete 
 651c9d2d6c4f: Pull complete 
 Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
 Status: Downloaded newer image for ubuntu:latest
 docker.io/library/ubuntu:latest

After an image has been downloaded, you can create a container using the downloaded image with the run subcommand. If an image has not been downloaded when docker is executed with the run subcommand, the Docker client will first download the image, then run a container using it.

To see the images that have been downloaded to your computer, type:

docker images

The output should look similar to the following:

REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
 ubuntu                  latest              ccc6e87d482b        4 weeks ago         64.2MB
 hello-world             latest              fce289e99eb9        13 months ago       1.84kB

Now let’s dig down run containers in more detail.

Running a Docker Container

The hello-world container we ran previously was an example of a container that runs and exits after output a message. Though containers can be much more useful than that, and they can be interactive. After all, they are similar to virtual machines, only more resource-friendly.

For example, let’s run a container using the latest image of Ubuntu using the combination of the -i and -t switches which give you interactive shell access into the container:

docker run -it ubuntu

Your command prompt should change to reflect the fact that you’re now working inside the container and should take this form:

root@3b08f00fe0c1:/#

Note the container ID in the command prompt. In this example, it is 3b08f00fe0c1. When you want to remove this container, you will need this container ID.

As you are already logged in to this container, you can run any command inside the container. For example, let’s update the package database inside the container. You don’t need to prefix any command with sudo, because you’re operating inside the container as the root user:

apt update

Then install any application in it. Let’s install GIT:

apt install git

This installs GIT in the container from the official Ubuntu repository. When the installation finishes, verify that GIT is installed:

git --version

You’ll see the version number displayed in your terminal:

git version 2.17.1

Any changes you make inside the container only apply to that container.

To exit the container, type exit at the prompt.

Now let’s look at managing the containers on our system next.

Managing Docker Containers

After using Docker for a while, you’ll have many active (running) and inactive containers on your computer. To view the active ones, use:

docker ps

You will see output similar to the following:

CONTAINER ID        IMAGE               COMMAND             CREATED

In this article, we started two containers; one from the hello-world image and another from the ubuntu image. Both containers are no longer running, but they still exist in your system.

To view all containers active and inactive, run docker ps with the -a switch:

docker ps -a

You’ll see output similar to this:

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                          PORTS                               NAMES
3b08f00fe0c1        ubuntu                  "/bin/bash"              23 minutes ago      Exited (0) About a minute ago                                       pedantic_blackwell
2cc6d98c337e        hello-world             "/hello"                 27 minutes ago      Exited (0) 10 minutes ago                                             jovial_hopper

To view the latest container you created, pass it the -l switch:

docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
3b08f00fe0c1        ubuntu              "/bin/bash"         25 minutes ago      Exited (0) 3 minutes ago                       pedantic_blackwell

To start a stopped container, use docker start, followed by the container ID or the container’s name. Let’s start the Ubuntu-based container with the ID of 3b08f00fe0c1:

docker start 3b08f00fe0c1

The container will start, and you can use docker ps to see its status:

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                               NAMES
3b08f00fe0c1        ubuntu                  "/bin/bash"              27 minutes ago      Up 9 seconds                                            pedantic_blackwell

To stop a running container, use docker stop, followed by the container ID or name. This time, we’ll use the name that Docker assigned the container, which is pedantic_blackwell:

docker stop pedantic_blackwell

Once you’ve decided you no longer need a container anymore, remove it with the docker rm command, again using either the container ID or the name. Use the docker ps -a command to find the container ID or name for the container associated with the hello-world image and remove it.

docker rm jovial_hopper

You can start a new container and give it a name using the --name switch. You can also use the –rm switch to create a container that removes itself when it’s stopped. See the docker run help command for more information on these options and others.

Containers can be turned into images that you can use to build new containers. Let’s look at how that works.

Committing Changes in a Container to a Docker Image

When you start a Docker container from an image, you can create, modify, and delete files just like you can with a virtual machine. The changes that you make will only apply to that container. You can start and stop it, but once you destroy it with the docker rm command, the changes will be lost.

Here I am showing you how to save the state of a container as a new Docker image.

After installing GIT inside the Ubuntu container, now we have a container running off an image, but the container is different from the image we used to create it. But we might want to reuse this GIT container as the basis for new images later.

Then commit the changes to a new Docker image instance using the following command.

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

The -m switch is for the commit message that helps you and others know what changes we made, while -a is used to specify the author. The container_id is the one we noted earlier in the article when we started the interactive Docker session. Unless we created additional repositories on Docker Hub, the repository is usually our Docker Hub username.

For example, for the user voboghure, with the container ID of 3b08f00fe0c1, the command would be:

docker commit -m "added GIT" -a "voboghure" 3b08f00fe0c1 voboghure/ubuntu-git

When we commit an image, the new image is saved locally on our computer. Later in this article, we will learn how to push an image to a Docker registry like Docker Hub so others can access it.

Listing the Docker images again will show the new image, as well as the old one that it was derived from:

docker images

You’ll see output like this:

REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
 voboghure/ubuntu-git    latest              f8eb4677a7f3        6 seconds ago       186MB
 ubuntu                  latest              ccc6e87d482b        4 weeks ago         64.2MB
 hello-world             latest              fce289e99eb9        13 months ago       1.84kB

In this example, ubuntu-git is the new image, which was derived from the existing ubuntu image from Docker Hub. The size difference reflects the changes that were made. And in this example, the change was that GIT installed. So next time you need to run a container using Ubuntu with GIT pre-installed, you can just use the new image.

You can also build Images from a Dockerfile, which lets you automate the installation of software in a new image. We will check that out in our upcoming article.

Now let’s check how we can share the new image with others so they can create containers from it.

Pushing Docker Image to a Docker Repository

Now the next step after creating a new image from an existing image is to share it with a few of your friends, the whole world on Docker Hub, or other Docker registry that you have access to. To do so you need to push an image to Docker Hub or any other Docker registry. You must have an account there as well.

Here I am gonna show you how to push a Docker image to Docker Hub. To push your image, first log into Docker Hub.

docker login -u docker-registry-username

You’ll be prompted to authenticate using your Docker Hub password. If you specified the correct password, authentication should succeed. It will show you the following output.

WARNING! Your password will be stored unencrypted in /home/tapan/.docker/config.json.
 Configure a credential helper to remove this warning. See
 https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 Login Succeeded

Note: If your Docker registry username is different from the local username you used to create the image, you will have to tag your image with your registry username. For the example given in the last step, you would type:

docker tag voboghure/ubuntu-git docker-registry-username/ubuntu-git

Then you may push your own image using the following command:

docker push docker-registry-username/docker-image-name

To push the ubuntu-git image to the voboghure repository, the command would be:

docker push voboghure/ubuntu-git

The process may take some time to complete as it uploads the images, but when completed, the output will look like this:

The push refers to repository [docker.io/voboghure/ubuntu-git]
53d4efe84de3: Pushed 
f55aa0bd26b8: Mounted from library/ubuntu 
1d0dfb259f6a: Mounted from library/ubuntu 
21ec61b65b20: Mounted from library/ubuntu 
43c67172d1d1: Mounted from library/ubuntu 
latest: digest: sha256:52fe367ce8a10113601b2897e52bd8e8e3c501918943b4f85e266251813633d0 size: 1364

After pushing an image to a registry, it should be listed on your account’s dashboard, like the bellow docker hub dashboard.

New Docker image listing on Docker Hub

You can now use “docker pull voboghure/ubuntu-git” to pull the image to a new machine and use it to run a new container.

Well, now you know how to use docker and you have your own docker image in docker hub. I hope to bring more docker article in my coming days.
Thanks for your time.

(Visited 215 times, 1 visits today)

Leave a comment

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