Install Docker & Docker Compose
This guide explains how to install Docker and Docker Compose on your Linux VPS.
What is Docker?
Docker allows you to create isolated containers for your applications. Each container includes everything the application needs to run.
Installing Docker
On Ubuntu/Debian
# Update packages
sudo apt update
# Install dependencies
sudo apt install -y ca-certificates curl gnupg lsb-release
# Add Docker's official GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Verify Installation
sudo docker --version
sudo docker compose version
Run Docker Without sudo (optional)
sudo usermod -aG docker $USER
# Log out and log back in to apply
Essential Docker Commands
Container Management
# List active containers
docker ps
# List all containers
docker ps -a
# Start a container
docker start container_name
# Stop a container
docker stop container_name
# Remove a container
docker rm container_name
# View logs
docker logs container_name
docker logs -f container_name # Real-time
Image Management
# List images
docker images
# Download an image
docker pull nginx
# Remove an image
docker rmi nginx
Docker Compose
Docker Compose allows you to manage multiple containers with a YAML file.
Example: Web Server with Database
Create a docker-compose.yml file:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
restart: unless-stopped
db:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: your_password
MYSQL_DATABASE: my_database
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped
volumes:
db_data:
Docker Compose Commands
# Start services (in background)
docker compose up -d
# Stop services
docker compose down
# View logs
docker compose logs -f
# Rebuild images
docker compose build
# Restart a service
docker compose restart web
Practical Examples
Deploy Portainer (Docker Web Interface)
docker volume create portainer_data
docker run -d \
-p 9000:9000 \
--name portainer \
--restart=unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce
Then access http://YOUR_IP:9000
Deploy a Minecraft Server
version: '3.8'
services:
minecraft:
image: itzg/minecraft-server
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: "PAPER"
MEMORY: "2G"
volumes:
- ./minecraft-data:/data
restart: unless-stopped
Cleanup
# Remove stopped containers
docker container prune
# Remove unused images
docker image prune
# Remove unused volumes
docker volume prune
# Clean everything (be careful!)
docker system prune -a
Tip
Use docker compose down -v to also remove volumes when stopping, useful for starting fresh.