How to Install 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
Recommended Settings for Production
{
"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.
