How to Run a Docker Image: A Step-by-Step Guide by OpsNexa

Docker provides an efficient way to build, share, and run applications in containers. When you create a Docker image, it essentially becomes a blueprint for a containerized application. Running a Docker image is the process of turning that blueprint into a running, executable container.

In this guide by OpsNexa, we’ll walk you through the steps of how to run a Docker image, from basic container execution to advanced configurations. By the end of this article, you’ll be equipped with the knowledge to efficiently run Docker images in different scenarios.

What is a Docker Image?

Before we dive into the process of running Docker images, let’s define what a Docker image is.

A Docker image is a snapshot of a file system containing all the dependencies, libraries, and configuration required to run an application. It acts as a template from which Docker containers are created. A Docker image is immutable, meaning it does not change once it’s built. It contains everything from the operating system to the application itself.

In essence, Docker images provide the environment necessary to run software, ensuring that it behaves the same way in any environment, whether it’s your local machine, a staging server, or production.

Why Should You Run a Docker Image?

Running Docker images provides several advantages, especially when it comes to development, testing, and deployment:

  1. Portability: Docker images ensure that an application runs consistently across any platform that supports Docker. Once an image is built, it can be deployed across multiple environments without issues.

  2. Isolation: Docker containers run independently from each other, meaning they do not interfere with one another or with the underlying system. This isolation makes it easier to manage dependencies and avoid conflicts.

  3. Reproducibility: By using Docker images, you ensure that the environment in which your application runs is identical in every instance. This means no surprises when deploying to different environments.

  4. Scalability: Running Docker containers makes it easier to scale applications, whether it’s for testing, production, or microservices architecture.

Now that we understand the importance of Docker images, let’s go over the steps for running them.

Step 1: Install Docker

Before you can run Docker images, you need to have Docker installed on your system. Docker is available for Windows, macOS, and Linux, so choose the appropriate version for your operating system from the official Docker website.

Installation Steps:

  1. Follow the installation instructions for your operating system.

  2. Once Docker is installed, verify it by running the following command:

bash
docker --version

This will display the installed Docker version, confirming that the installation was successful.

Step 2: Pull a Docker Image

To run a Docker image, you first need to have it available on your system. You can either build your own image or pull an existing image from a Docker registry like Docker Hub.

To pull an image from Docker Hub, use the docker pull command:

bash
docker pull ubuntu

Explanation:

  • docker pull: The command to download an image from a Docker registry.

  • ubuntu: The name of the image you want to pull. In this case, we’re pulling the official Ubuntu image.

If you want to pull a specific version of an image, specify the version tag:

bash
docker pull ubuntu:20.04

After pulling the image, you can verify it by listing all available images:

bash
docker images

This command will show all images available on your system, including the one you just pulled.

Step 3: Run a Docker Image as a Container

Once you have an image on your system, you can run it as a Docker container. The basic command to do this is docker run.

bash
docker run ubuntu

Explanation:

  • docker run: This command runs a container from the specified image.

  • ubuntu: The name of the image you want to run as a container.

By default, the container will run in the foreground, meaning you’ll see its output in the terminal. However, the container will immediately stop once the command or process defined in the image completes.

To keep the container running, you can specify a command that keeps it active. For example, to run an interactive shell in the container, you can use the -it flags:

bash
docker run -it ubuntu

Explanation:

  • -i: Keeps the standard input open for interaction.

  • -t: Allocates a pseudo-TTY, which allows for an interactive terminal.

This command will open an interactive terminal inside the running container, allowing you to execute commands just like you would in a normal Ubuntu system.

Step 4: Run the Container in Detached Mode

In some cases, you may want to run the container in the background (detached mode) so that you can continue using your terminal. To do this, use the -d flag:

bash
docker run -d ubuntu

Explanation:

  • -d: Runs the container in detached mode, meaning the container runs in the background, and you return to the command prompt immediately.

Once the container is running in detached mode, you can verify its status with the docker ps command:

bash
docker ps

This will show all running containers. To stop a detached container, use the docker stop command followed by the container name or ID.

Step 5: Map Ports for External Access

If your container runs an application that listens on a specific port (like a web server), you can map ports between your local machine and the container using the -p option.

For example, if your container is running a web server on port 80, and you want to access it via port 8080 on your local machine, run the following command:

bash
docker run -p 8080:80 -d ubuntu

Explanation:

  • -p 8080:80: Maps port 8080 on your host machine to port 80 in the container.

  • -d: Runs the container in detached mode.

You can now access the application running inside the container by navigating to http://localhost:8080 in your browser.

Step 6: View the Logs of a Running Container

To see what’s happening inside a running container, you can view its logs using the docker logs command:

bash
docker logs <container_id>

Explanation:

  • Replace <container_id> with the ID or name of your running container.

  • This will display the logs output by the container, which is useful for debugging and monitoring purposes.

Step 7: Access a Running Container

If you want to interact with a running container, you can use the docker exec command to run commands inside the container. For example, to open a bash shell inside the container:

bash
docker exec -it <container_id> bash

Explanation:

  • docker exec: Executes a command inside a running container.

  • -it: Allocates an interactive terminal.

  • bash: Starts a Bash shell inside the container.

Now, you can execute commands directly inside the container, which is helpful for troubleshooting or managing your application.

Step 8: Stop a Running Container

To stop a running container, use the docker stop command followed by the container name or ID:

bash
docker stop <container_id>

Explanation:

  • This command will gracefully stop the container.

  • To forcefully stop the container, use the docker kill command.

Step 9: Remove a Docker Container

Once you no longer need a container, you can remove it to free up resources. Use the docker rm command to remove a container:

bash
docker rm <container_id>

If the container is still running, stop it first before attempting to remove it. Alternatively, you can stop and remove a container in one command using the -f flag:

bash
docker rm -f <container_id>

Conclusion

Running a Docker image is a simple yet powerful process that enables you to turn an image into a fully functional containerized application. With the steps outlined by OpsNexa, you now know how to pull an image, run it in various modes (interactive, detached), and manage your containers effectively.

Whether you’re testing applications in isolated environments, setting up web servers, or working on development projects, Docker makes it easy to run applications consistently and efficiently. Keep experimenting with Docker and harness its full potential to streamline your development workflow!