Portainer
Portainer es una herramienta web open-source que permite gestionar contenedores. Permite administrar contenedores de forma remota o local, la infraestructura de soporte y todos los aspectos de las implementaciones de Kubernetes, Podman, Docker standalone y Docker Swarm

Enlaces
Requisitos Previos
- Gestor de contenedores (docker o podman) instalado siguiendo los pasos de instalar contenedores
Directorio de datos
sudo mkdir -pv $HOME/portainer
Fichero de variables
sudo vi $HOME/portainer/.env
Este fichero contendrá las variables de entorno que necesite el propio "Portainer" y el resto de contenedores que se definan desde él
DOMAIN=dominio.com
TZ=Europe/Madrid
CONTAINERDIR=/home/"usuario"
# SMTP Settings
SMTP_HOST=smtp.office365.com
SMTP_PORT=587
SMTP_USER=user@domain.com
SMTP_PASSWORD=pass
SMTP_FROM=noreply@domain.com
Instalar en docker
sudo docker run \
--name portainer \
--detach \
--restart=always \
--privileged \
--env-file=$HOME/portainer/.env \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume $HOME/portainer:/data \
-p 9000:9000 \
-p 9443:9443 \
docker.io/portainer/portainer-ce
Instalar en Podman
Portainer "rootful"
The below command should spin up a rootful Portainer. This will provide an experience very similar to Portainer on Docker, including usage of privileged ports (like 80 or 443).
# Start Podman socket
sudo systemctl enable --now podman.socket
Ejecuta el contenedor:
sudo podman run \
--name portainer \
--detach \
--restart=always \
--privileged \
--env-file=$HOME/portainer/.env \
--volume /run/podman/podman.sock:/var/run/docker.sock \
--volume $HOME/portainer:/data \
-p 9000:9000 \
-p 9443:9443 \
docker.io/portainer/portainer-ce
Portainer "rootless"
# Start rootless podman socket
systemctl --user enable --now podman.socket
# enable start of system services, even if not logged in
sudo loginctl enable-linger $USER
# Start portainer rootless
podman run \
--name portainer \
--detach \
--restart=always \
--security-opt label=disable \
--env-file=$HOME/portainer/.env \
--volume /run/user/$(id -u)/podman/podman.sock:/var/run/docker.sock:Z \
--volume $HOME/portainer:/data:Z \
-p 9000:9000 \
-p 9443:9443 \
docker.io/portainer/portainer-ce
Para poder exponer puertos con privilegios (puertos menores de 1024) será necesario agregar al fichero "etc/sysctl.conf" la siguiente línea, y reiniciar:
net.ipv4.ip_unprivileged_port_start=80
Acceso
En este punto ya puedes ir a http://IP_Docker:9000 o https://IP_Docker:9443 para la configuración de Portainer o continúa para publicar detrás de un Proxy
Ejecutar con docker compose
Crea un fichero "docker-compose.yml" en el directorio "$HOME/portainer" con el siguiente contendio:
services:
portainer:
image: portainer/portainer-ce
container_name: portainer
env_file: .env
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./:/data
ports:
- 9000:9000
Después podrás gestionar con el comando "docker compose"
cd $HOME/portainer
# Arranca el "stack"
sudo docker compose up -d
# Para el "stack"
sudo docker compose down
Publicando detrás de un proxy
Crear registro DNS
En el proveedor que aloja el servidor DNS público, crear un registro DNS que resuelva la IP pública que llega al Proxy hacia un nombre del estilo "host.domain.com"
NGINX Proxy Manager
Para publicar el contenedor detrás del proxy NGINX, es necesario instalarlo antes. Así que, sigue el siguiente documento para instalar NGINX Proxy Manager.
Para publicar el contenedor detrás de NGINX proxy, deberás recrear el contenedor con la opción "--network=proxy"
# creamos primero la RED
sudo podman network create proxy
--network=proxy \
Crear un nuevo "proxy host"
Añade un nuevo proxy host con el nombre de dominio creado en el paso anterior redirigido hacia el nombre del contenedor y el puerto que use:

Traefik

Para publicar el contenedor detrás del proxy Traefik, es necesario instalarlo antes. Así que, sigue el siguiente documento para instalar Traefik.
Un vez instalado, el contenido del fichero "docker-compose.yml" es el siguiente:
services:
portainer:
image: portainer/portainer-ce
container_name: portainer
env_file: .env
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- $HOME/portainer:/data
ports:
- 9000:9000
networks:
- traefik_public
labels:
- traefik.enable=true
- traefik.http.routers.portainer.rule=Host(`portainer.$DOMAIN`)
- traefik.http.routers.portainer.tls=true
- traefik.http.routers.portainer.tls.certresolver=letsencrypt
- traefik.http.services.portainer.loadbalancer.server.port=9000
- traefik.http.routers.portainer.middlewares=privateIPs@file,authelia@file
networks:
traefik_public:
external: true
Configuración de portainer
- http://IP_Docker:9000
- https://portainer.$DOMAIN (si has configurado proxy inverso)
En el primer inicio tendremos que crear el usuario privilegios:

Por último conectamos Portainer al Docker Local:

Actualizar Portainer Bussiness
https://docs.portainer.io/v/ce-2.9/start/upgrade/tobe/docker
Modifica el repositorio en el fichero docker-compose para que usa la imagen de Portainer Bussiness
image: portainer/portainer-ee
Actualiza el contenedor
docker compose up --force-recreate --build -d
docker image prune -f

Añadir un entorno de Docker individual
Add a Docker Standalone environment – Portainer Documentation
Vamos a añadir un nuevo entorno individual de docker vía API. Previamente, nuestra instancia de docker deberá admitir conexiones remotas.
Configurar acceso remoto para Docker
para modificar el fichero docker.service crea el siguiente fichero:
mkdir /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/override.conf
Añade las siguientes líneas:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://IP_docker:2375
Guarda el fichero y recarga la configuración de «systemctl»
systemctl daemon-reload
Reinicia docker
systemctl restart docker.service
Verifica los cambios
netstat -lntp | grep dockerd

Selecciona Docker Standalone y ejecuta el asistente. Selecciona la opción API , rellena los datos que pide
Iniciar/parar portainer manualmente
Desde el directorio de Portainer ejecutar el siguiente comando: /var/data/portainer ($DOCKERDIR/portainer)
Detener portainer
docker compose down
Iniciar portainer
docker compose up -d