Portainer

Portainer🡭 es una plataforma para manejar y administrar contenedores de {{Docker}} y {{Kubernetes}}.

La interfaz es casi perfecta, te permite administrar (levantar, detener, eliminar) contenedores y stacks específicos. Lo bueno de Portainer es que no solo te permite crear stacks desde la interfaz, si no que también te permite manejar los stacks que ya tenes definidos con sus propios archivos de {{docker-compose}}.

Como ejecutar Portainer local?

Portainer se ejecuta dentro de su propio contenedor, para eso tenemos dos alternativas para ejecutarlo.

Por un lado podemos directamente ejecutar el comando de docker run de la siguiente manera:

docker run -d 
	-p 8000:8000 
	-p 9443:9443 
	--name portainer 
	--restart=always 
	-v /var/run/docker.sock:/var/run/docker.sock
	-v portainer_data:/data 
	portainer/portainer-ce:latest

De esta forma vamos a estar exponiendo Portainer en el puerto 9443 (este mismo se encarga de generar un certificado ssl). También vamos a estar pasandole el nombre de un volumen llamado portainer_data que si no lo tenemos creado lo podemos crear de la siguiente manera:

docker volume create portainer_data

Hay que recordar que de esta manera, estamos dejando que la administración del volumen la realice {{Docker}}. Esto tiene ventajas y desventajas.

docker-compose

Por otro lado, podemos correr Portainer, utilizando docker-compose. En mi caso es la forma que prefiero porque me permite tener un registro especifico del stack completo que estoy corriendo. Ademas de que los archivos .yml podemos gestionarlos con {{what-is-git}} y eso nos da un control de versión que nos sirve para controlar cambios.

version: "3"
services:
  portainer:
    image: portainer/portainer-ce:latest
    ports:
      - 9443:9443
	volumes:
      - ./data/portainer:/data
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

En este caso el directorio data que vamos a montar, lo vamos a montar usando un bind mount, pasandole un directorio local. Una ventaja simple de esto, es que podemos hacer un backup del directorio data/portainer del host y copiarlo a otro lugar, sin tener que andar exportando el volumen en {{Docker}}.