Skip to main content
01.03.2026

How to Install Docker on CentOS 7

Docker on CentOS 7

Quick Reference:

# Install Docker CE
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

# Add user to docker group
sudo usermod -aG docker $USER

# Verify installation
docker --version
docker run hello-world

CentOS 7 remains widely used in enterprise environments. While it reached end of life in June 2024, many production systems still run it. This guide covers installing Docker Community Edition (CE) on CentOS 7 with all the necessary configuration for production use.

Prerequisites

Before starting, ensure you have:

  • CentOS 7.x (64-bit)
  • Root or sudo access
  • Internet connectivity
  • At least 2GB RAM (4GB recommended)

Check your CentOS version:

cat /etc/centos-release
# CentOS Linux release 7.9.2009 (Core)

Step 1: Remove Old Docker Versions

If you have older Docker installations, remove them first:

sudo yum remove -y docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

This won't remove images, containers, or volumes stored in /var/lib/docker.

Step 2: Install Required Packages

Install yum-utils which provides yum-config-manager:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Step 3: Add Docker Repository

Add the official Docker CE repository:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Verify the repository was added:

yum repolist | grep docker
# docker-ce-stable/7/x86_64    Docker CE Stable - x86_64

Step 4: Install Docker CE

Install the latest version of Docker CE:

sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

This installs:

Package Description
docker-ce Docker daemon
docker-ce-cli Docker command-line interface
containerd.io Container runtime
docker-buildx-plugin Extended build capabilities
docker-compose-plugin Docker Compose V2

Install a Specific Version

To install a specific Docker version:

# List available versions
yum list docker-ce --showduplicates | sort -r

# Install specific version
sudo yum install -y docker-ce-24.0.7 docker-ce-cli-24.0.7 containerd.io

Step 5: Start Docker

Start and enable the Docker service:

sudo systemctl start docker
sudo systemctl enable docker

Verify Docker is running:

sudo systemctl status docker

Output should show active (running).

Step 6: Verify Installation

Run the hello-world container:

sudo docker run hello-world

You should see:

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

Check Docker version:

docker --version
# Docker version 24.0.7, build afdd53b

Step 7: Run Docker Without Sudo

By default, Docker requires root privileges. Add your user to the docker group:

sudo usermod -aG docker $USER

Important: Log out and log back in for the group change to take effect, or run:

newgrp docker

Verify you can run Docker without sudo:

docker run hello-world

Step 8: Configure Docker Daemon

Create or edit /etc/docker/daemon.json for custom configuration:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "default-address-pools": [
    {"base": "172.17.0.0/16", "size": 24}
  ]
}
EOF

Restart Docker to apply changes:

sudo systemctl restart docker
{
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  },
  "live-restore": true,
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65536,
      "Soft": 65536
    }
  }
}
Option Purpose
storage-driver overlay2 is recommended for CentOS 7
log-opts Prevents log files from consuming all disk space
live-restore Keeps containers running during daemon restart
default-ulimits Increases file descriptor limits

Step 9: Configure Firewall

If firewalld is running, allow Docker traffic:

# Check firewalld status
sudo systemctl status firewalld

# Allow Docker interface
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload

For container-to-container communication across hosts, open the required ports:

# Docker Swarm ports (if using Swarm)
sudo firewall-cmd --permanent --add-port=2377/tcp
sudo firewall-cmd --permanent --add-port=7946/tcp
sudo firewall-cmd --permanent --add-port=7946/udp
sudo firewall-cmd --permanent --add-port=4789/udp
sudo firewall-cmd --reload

Step 10: Install Docker Compose

Docker Compose V2 is included as a plugin. Verify:

docker compose version
# Docker Compose version v2.21.0

If you need the standalone docker-compose binary (V1 syntax):

# Download latest stable release
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Make executable
sudo chmod +x /usr/local/bin/docker-compose

# Verify
docker-compose --version

Common Issues and Fixes

Cannot connect to Docker daemon

# Check if Docker is running
sudo systemctl status docker

# Check socket permissions
ls -la /var/run/docker.sock

# Restart Docker
sudo systemctl restart docker

Storage driver issues

If you see overlay2 errors, ensure your kernel supports it:

# Check kernel version (needs 3.10.0-514 or later)
uname -r

# Check if overlay module is loaded
lsmod | grep overlay

SELinux issues

If containers fail with permission errors:

# Check SELinux status
getenforce

# Set to permissive (temporary)
sudo setenforce 0

# Or configure properly
sudo setsebool -P container_manage_cgroup 1

Network conflicts

If Docker networks conflict with your LAN:

# Edit daemon.json to use different subnet
sudo vi /etc/docker/daemon.json
# Add: "bip": "192.168.100.1/24"
sudo systemctl restart docker

Useful Docker Commands

# System info
docker info
docker system df

# Container management
docker ps -a
docker logs <container>
docker exec -it <container> /bin/bash

# Cleanup
docker system prune -a
docker volume prune

Upgrading Docker

To upgrade Docker to a newer version:

# Update package cache
sudo yum makecache fast

# Upgrade Docker packages
sudo yum update -y docker-ce docker-ce-cli containerd.io

Uninstalling Docker

To completely remove Docker:

# Stop Docker
sudo systemctl stop docker

# Remove packages
sudo yum remove -y docker-ce docker-ce-cli containerd.io

# Remove data (WARNING: deletes all containers, images, volumes)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

CentOS 7 EOL Considerations

CentOS 7 reached end of life on June 30, 2024. Consider:

  • Migrating to Rocky Linux 8/9 or AlmaLinux
  • Using CentOS Stream for upstream RHEL tracking
  • Extended support from third-party vendors

Docker will continue to work on CentOS 7, but you won't receive security updates for the base OS.

Conclusion

Docker on CentOS 7 provides a stable container platform for legacy environments. While you should plan migration to a supported OS, this setup will serve you well for existing workloads.

For new deployments, consider Rocky Linux 9 or AlmaLinux 9 which have better kernel support for modern container features like cgroups v2.


Managing containerized infrastructure at scale? Akmatori AI agents can automate Docker deployments, monitor container health, and resolve issues automatically.

Automate incident response and prevent on-call burnout with AI-driven agents!