Portainer Instaleation 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.

Tabla de contenidos

Requisitos previos

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

Requisitos del sistema

Verifique las especificaciones del sistema:

Check OS version:

cat /etc/os-release
uname -m

Check available resources:

free -h
df -h

Docker Instaleation

Instale 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

Verifique installation:

docker --version
docker ps

Portainer Instaleation

Cree Portainer volume:

docker volume create portainer_data

Instale 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

Verifique Portainer is running:

docker ps | grep portainer
docker logs portainer

Wait for startup (10-15 seconds).

Configuración de Nginx

Instale Nginx:

sudo apt install -y nginx

Cree 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

Configuración del certificado SSL

Instale Certbot:

sudo apt install -y certbot python3-certbot-nginx

Obtain SSL certificate:

sudo certbot certonly --standalone -d portainer.example.com

Verifique certificate:

sudo openssl x509 -in /etc/letsencrypt/live/portainer.example.com/fullchain.pem -noout -dates

Configure auto-renewal:

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer

Configuración inicial

Access Portainer interface:

Navigate to https://portainer.example.com

Complete initial setup:

  1. Cree admin account with secure password
  2. Connect to local Docker environment
  3. Configure settings

Configure admin user:

  1. Settings → Users
  2. Cree additional admin users if needed
  3. Set role permissions

Agent Instaleation

Instale 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:

  1. Portainer → Endpoints
  2. Click "Add Endpoint"
  3. Select "Docker"
  4. Enter agent hostname/IP:9001
  5. Name the endpoint

Verifique connection:

  1. Check endpoint status
  2. Should show "Connected" and Docker version

Container Management

View containers:

  1. Portainer Dashboard → Containers
  2. Lists all running containers

Start/stop containers:

  1. Select container
  2. Click "Start", "Stop", or "Reinicie"
  3. View logs in real-time

Cree new container:

  1. Click "Cree Container"
  2. Set container name and image
  3. Configure ports, volumes, environment
  4. Implemente container

Manage images:

  1. Dashboard → Images
  2. Pull new images
  3. Remove unused images
  4. View image details

Stack Implementement

Cree Docker Compose stack:

  1. Dashboard → Stacks
  2. Click "Add Stack"
  3. Enter stack name
  4. 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:

Implemente stack:

  1. Click "Implemente Stack"
  2. Monitor deployment progress
  3. View services and containers

Copia de seguridad y actualizaciones

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

Conclusión

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. Implemente 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.