How to install Docker on Ubuntu 22.04

0 comments 5.7K views 9 minutes read
Published on: July 2, 2023 | Last updated on: October 11, 2024
\\ CATEGORIES: Linux

Introduction

As we delve into the digital age, two names in the tech world stand out: Docker and Ubuntu. It’s almost impossible not to encounter these tools when navigating the vast landscape of modern technology. This comprehensive guide aims to walk you through on how to install docker on Ubuntu 22.04, the latest LTS (Long Term Support) version of one of the most popular Linux distributions.

What is Docker?

Docker is a leading force in the world of containerization. It provides an isolated environment, known as a container, where applications run independently from the underlying system. Docker’s major advantage lies in its ability to ensure that these applications function identically across any system that supports Docker. This consistency eliminates the all-too-common issues associated with varying software environments, affirming the classic saying: “If it works on my machine, it will work on yours”.

Why use Docker?

Simplicity and consistency are the twin pillars that form Docker’s appeal. Docker eliminates many of the challenges associated with deploying software by bundling an application and its dependencies into a single, self-sufficient unit, called a container. This simplicity, combined with Docker’s scalability and efficient use of system resources, makes it a favorite tool among developers, system administrators, and DevOps engineers.

Preparing for Docker Installation

Just like a skilled craftsman prepares his workspace before commencing work, we too must prepare our system before installing Docker. Let’s navigate this preparatory phase step-by-step.

System requirements for Docker on Ubuntu

Before we begin, it’s crucial to ensure that your system meets the minimum requirements to run Docker. For Ubuntu 22.04, these include:

  • A 64-bit version of Ubuntu 22.04
  • At least 2GB of RAM
  • 10GB of storage space

These specifications will allow Docker to run smoothly without straining your system’s resources.

Updating the Ubuntu system

Next, it’s always best practice to make sure your Ubuntu system is up-to-date before installing any new software. You can achieve this by opening a terminal and running the following commands:

sudo apt update
sudo apt upgrade

These commands will fetch and install the latest updates available for your Ubuntu system.

Installing Docker on Ubuntu 22.04

Finally, we arrive at the core part of this guide – installing Docker on your Ubuntu 22.04 system.

Step 1: Downloading Docker

To begin, you need to download Docker from its official repositories. You can accomplish this by running the following commands in your terminal:

sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update

These commands will add the Docker repository to your system and update your package list.

Step 2: Installing Docker

With the Docker package downloaded, the next step is to install Docker. In your terminal, run the following command:

sudo apt install docker-ce

This command will install Docker on your system.

Step 3: Verifying the Docker Installation

After installing Docker, it’s crucial to

verify the installation to ensure that everything is running as it should. You can do this by running:

sudo systemctl status docker

If Docker has been installed correctly, you will see Docker’s status as active (running).

Understanding Docker Basics

Now that you have Docker installed, it’s time to understand some Docker basics to help you make the most of this powerful tool.

Docker Terminology

Docker, like any technical tool, comes with its own set of terminology. Here are some essential terms:

  • Image: A Docker image is a lightweight, standalone, and executable software package that includes everything needed to run a piece of software.
  • Container: A Docker container is a running instance of an image.
  • Dockerfile: A Dockerfile is a text file that contains all the commands to assemble an image.

Basic Docker Commands

Proficiency in Docker comes with understanding and using its commands. Here are some of the most commonly used Docker commands:

  • docker run <image>: This command is used to create and start a container from an image.
  • docker ps: This command is used to list all the running Docker containers.
  • docker stop <container-id>: This command is used to stop a running container.

Understanding Docker’s Important Files and Folders

Docker uses a variety of files and directories to manage its operation. Knowing where these files are and their roles can help you better understand and manage your Docker environment.

Docker Directory

The main Docker directory is usually located at /var/lib/docker. This directory houses all the information relating to Docker images, containers, volumes, and networks. Each of these components has its corresponding subdirectory:

  • /var/lib/docker/containers: Each Docker container has its directory here, named with a long id. It includes the container’s JSON configuration file, log files, and a directory representing the container’s file system.
  • /var/lib/docker/image: This is where Docker stores images. It contains a subdirectory for each different storage driver (like overlay2) that Docker supports.
  • /var/lib/docker/volumes: This is the default directory where Docker will store volume data.
  • /var/lib/docker/network: Files for managing networks are stored here.

Please note that it is generally not advisable to manually alter these files. Docker manages these directories and files itself, and making manual changes can disrupt its operation.

Dockerfile

The Dockerfile is a key component when building your own Docker images. It’s a text file that Docker reads to automatically build an image. It can include instructions to copy files into the image, install software packages, set environment variables, and more.

docker-compose.yml

The docker-compose.yml file is where Docker Compose looks for instructions on which images to use, how to configure them, and how they should interact with each other. Like the Dockerfile, it’s a plain text file and typically resides in the root directory of your project.

Docker Best Practices

To optimize your Docker experience and usage, we will delve into some best practices in handling Docker containers and images:

Regularly Prune Unnecessary Docker Objects

Over time, Docker can consume a considerable amount of disk space. Docker creates and stores images, containers, volumes, and networks, some of which may not always be in active use. These “orphaned” or “dangling” objects can take up significant space, leading to disk space exhaustion, a common problem for Docker users.

To avoid this, regularly prune your Docker system. Docker provides the docker system prune command, which can remove all stopped containers, all networks not used by at least one container, all dangling images, and all build cache. If you want to remove all unused images and not just the dangling ones, add the -a option to the command, making it docker system prune -a.

Remember to be careful when using these commands, and only prune your system when you’re sure that you won’t lose important data.

Always Use Dockerfiles for Creating Images

While you can create Docker images by manually configuring a container and then using the docker commit command, this approach is not recommended. Manual configuration is error-prone, not easily repeatable, and offers poor documentation.

Instead, always use a Dockerfile to create images. Dockerfiles are simple text files that contain the commands you would execute on the command line to create an image. They provide documentation of the image creation process, and they can be stored in version control, enabling collaboration and ensuring you can easily recreate the image in the future.

Regularly Update Images and Promptly Apply Security Patches

Security is a major concern in the software world, and Docker is no exception. Regularly update your Docker images to their latest versions to benefit from the latest features and security patches.

Apart from updating, you should also remove vulnerabilities from your images. Tools like Docker’s own Docker Scan, based on the open-source tool Trivy, can scan images for vulnerabilities, providing you with the information you need to secure your images.

Limit the Use of Latest Tag

When pulling images without a tag specified, Docker will use the “latest” tag by default. However, the “latest” tag can be misleading as it doesn’t necessarily point to the latest version of an image. It’s just a default tag that image creators can assign to any version of their image.

To ensure you’re using a specific version of an image, always specify the image’s tag when pulling it.

Run Only Necessary Processes in Your Container

Containers are designed to be lightweight and ephemeral, meaning they can be started and stopped quickly. To achieve this, you should only run the necessary processes in your container. Ideally, each container should be responsible for executing a single process. This approach leads to easier management, clearer responsibility boundaries, and better use of Docker’s process management.

Leverage .dockerignore Files

Just like you can use .gitignore to exclude files from being version-controlled in Git, you can use .dockerignore files to prevent files and directories from being included in a Docker image. This is crucial for security and efficiency as it allows you to exclude sensitive files and large, unnecessary files, making your Docker images lean and secure.

Don’t Run Processes as Root in Containers

Running processes as root, even in containers, is a security risk. If an attacker manages to break out of the container, they could gain root access to the Docker host. To mitigate this, you should use the USER directive in your Dockerfile to ensure that services are running as a non-root user.

Use Docker’s Build Cache Wisely

Docker’s build cache can drastically reduce build times by reusing layers from previous builds. However, if not used wisely, it could lead to outdated layers being used. Structure your Dockerfile properly to make the best use of the cache. The build cache follows a top-down approach, so put instructions that change more frequently (like code copy instructions) at the bottom of the Dockerfile to avoid invalidating the cache unnecessarily.

Take Advantage of Docker Health Checks

Docker includes a HEALTHCHECK instruction in Dockerfiles that can be used to check the health of your applications within Docker containers. This can be incredibly helpful in understanding the state of your application and is particularly valuable in production environments where it’s crucial to detect and recover from unhealthy states quickly.

If you want to learn more, see this article!

Conclusion

By following the steps outlined in this guide, you now have Docker installed on your Ubuntu 22.04 system. Whether you’re a developer, a system administrator, or just a tech enthusiast, having Docker in your toolkit will open up a world of possibilities.

Frequently Asked Questions (FAQs)

Finally, we’ll address some frequently asked questions about Docker and Ubuntu 22.04:

  1. Can I install Docker on other versions of Ubuntu?
    Yes, Docker can be installed on other versions of Ubuntu as well, though the process may slightly differ.
  2. Is Docker free to use?
    Yes, Docker offers a free Community Edition (CE) that can be used for general purposes.
  3. Can I run multiple Docker containers at the same time?
    Yes, Docker allows you to run multiple containers simultaneously.
  4. What’s the difference between a Docker image and a Docker container?
    A Docker image is a standalone, executable package that includes everything needed to run a piece of software, while a Docker container is a running instance of an image.
  5. Does Docker work only on Linux systems?
    No, Docker is platform-independent and can run on Linux, Windows, and macOS.