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.