Portainer Installation for Docker Management
Portainer is a lightweight, open-source container management user interface enabling visual management of Docker environments. It simplifies container orchestration, image management, network configuration, and volume management through an intuitive web interface. This guide covers Docker installation, Portainer deployment, agent configuration, SSL setup, and stack management.
Table of Contents
- Prerequisites
- System Requirements
- Docker Installation
- Portainer Installation
- Nginx Configuration
- SSL Certificate Setup
- Initial Configuration
- Agent Installation
- Container Management
- Stack Deployment
- Backup and Updates
- Conclusion
Prerequisites
Ensure you have:
- Ubuntu 20.04 LTS or later
- Root or sudo access
- A registered domain name
- Minimum 2GB RAM (4GB+ recommended)
- 15GB available disk space
- Basic Linux administration knowledge
Update system:
sudo apt update && sudo apt upgrade -y
System Requirements
Verify system specifications:
Check OS version:
cat /etc/os-release
uname -m
Check available resources:
free -h
df -h
Docker Installation
Install Docker:
sudo apt install -y docker.io
Add user to docker group:
sudo usermod -aG docker $USER
newgrp docker
Start Docker:
sudo systemctl start docker
sudo systemctl enable docker
Verify installation:
docker --version
docker ps
Portainer Installation
Create Portainer volume:
docker volume create portainer_data
Install Portainer container:
docker run -d \
--name portainer \
--restart always \
-p 9000:9000 \
-p 8000:8000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Verify Portainer is running:
docker ps | grep portainer
docker logs portainer
Wait for startup (10-15 seconds).
Nginx Configuration
Install Nginx:
sudo apt install -y nginx
Create Nginx configuration:
sudo nano /etc/nginx/sites-available/portainer
Add configuration:
upstream portainer {
server localhost:9000;
}
server {
listen 80;
listen [::]:80;
server_name portainer.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name portainer.example.com;
ssl_certificate /etc/letsencrypt/live/portainer.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/portainer.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
client_max_body_size 100M;
location / {
proxy_pass http://portainer;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Enable site:
sudo ln -s /etc/nginx/sites-available/portainer /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl start nginx
sudo systemctl enable nginx
SSL Certificate Setup
Install Certbot:
sudo apt install -y certbot python3-certbot-nginx
Obtain SSL certificate:
sudo certbot certonly --standalone -d portainer.example.com
Verify certificate:
sudo openssl x509 -in /etc/letsencrypt/live/portainer.example.com/fullchain.pem -noout -dates
Set up auto-renewal:
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
Initial Configuration
Access Portainer interface:
Navigate to https://portainer.example.com
Complete initial setup:
- Create admin account with secure password
- Connect to local Docker environment
- Configure settings
Configure admin user:
- Settings → Users
- Create additional admin users if needed
- Set role permissions
Agent Installation
Install Portainer Agent on remote Docker hosts:
docker run -d \
--name portainer_agent \
--restart always \
-p 9001:9001 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:latest
Add remote environment to Portainer:
- Portainer → Endpoints
- Click "Add Endpoint"
- Select "Docker"
- Enter agent hostname/IP:9001
- Name the endpoint
Verify connection:
- Check endpoint status
- Should show "Connected" and Docker version
Container Management
View containers:
- Portainer Dashboard → Containers
- Lists all running containers
Start/stop containers:
- Select container
- Click "Start", "Stop", or "Restart"
- View logs in real-time
Create new container:
- Click "Create Container"
- Set container name and image
- Configure ports, volumes, environment
- Deploy container
Manage images:
- Dashboard → Images
- Pull new images
- Remove unused images
- View image details
Stack Deployment
Create Docker Compose stack:
- Dashboard → Stacks
- Click "Add Stack"
- Enter stack name
- Paste Docker Compose YAML
Example stack:
version: '3'
services:
nginx:
image: nginx:latest
restart: always
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
wordpress:
image: wordpress:latest
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: password
ports:
- "8080:80"
depends_on:
- db
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Deploy stack:
- Click "Deploy Stack"
- Monitor deployment progress
- View services and containers
Backup and Updates
Backup Portainer configuration:
docker exec portainer tar czf /data/portainer-backup-$(date +%Y%m%d).tar.gz /data
docker cp portainer:/data/portainer-backup-*.tar.gz /backups/
Schedule backup script:
sudo nano /usr/local/bin/portainer-backup.sh
Add:
#!/bin/bash
BACKUP_DIR="/backups/portainer"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Backup Portainer data
docker exec portainer tar czf /data/backup.tar.gz /data
docker cp portainer:/data/backup.tar.gz "$BACKUP_DIR/portainer-$DATE.tar.gz"
# Keep only 30 days
find $BACKUP_DIR -type f -mtime +30 -delete
echo "Backup completed: $DATE"
Make executable:
sudo chmod +x /usr/local/bin/portainer-backup.sh
Schedule daily backups:
sudo crontab -e
Add:
0 2 * * * /usr/local/bin/portainer-backup.sh >> /var/log/portainer-backup.log 2>&1
Update Portainer:
docker stop portainer
docker rm portainer
docker run -d \
--name portainer \
--restart always \
-p 9000:9000 \
-p 8000:8000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Monitor container:
docker logs -f portainer
docker stats portainer
Conclusion
Portainer is now fully installed as a Docker management platform. With Nginx reverse proxy, SSL encryption, and agent support for multiple hosts, you have a comprehensive container management solution. Deploy stacks, manage containers, and monitor your Docker infrastructure through an intuitive interface. Regular backups ensure configuration preservation. Portainer simplifies Docker operations for teams of any size.


