Publicidad

Usando Portainer con docker-compose.yml | Facil y rapido.

Portada » Linux » Usando Portainer con docker-compose.yml | Facil y rapido.

Utilizar portinainer con un docker compose no es complicado, pero si tenemos que ver a que le damos acceso para saber qué veremos. Acá te enseñamos todo lo que necesitas para levantar tu servicio de portainer y monitorear los servicios locales de servidor ejecutando docker.

Publicidad

También te explicaremos como hacer si quieres conectarte a un servidor docker remoto pero dentro de una LAN segura. No utilizaremos controles de seguridad fuerte, por que lo que no es buena idea utilizarlo de cara a internet.

Docker compose portainer

Si queremos desplegar el portainer con un docker compose tenemos que crear un documento docker-compose.yml con los siguientes parámetros:

YAML
services:
  portainer:
    container_name: "portainer"
    image: portainer/portainer-ce:latest
    ports:
      - 9443:9443
      - 8000:8000 #Puerto opcional se usa para el cliente edge.
    volumes:
        #Almacenamiento de datos del portainer
        - ./portainer-datos:/portainer-datos
        #Volumen necesario para ver el docker local
        - /var/run/docker.sock:/var/run/docker.sock
    restart: always

Con esto solo nos restaría ejecutar un «docker compose up -d» y tendríamos corriendo el servicio de portainer en nuestro servidor. Por defecto utilizamos el puerto 9443 para acceder a él pero podemos cambiarlo sin ningún problema en nuestro servidor docker modificando la siguiente línea

YAML
    ports:
      - 10443:9443
      - 8000:8000 #Puerto opcional se usa para el cliente edge.
    volumes:

Por ejemplo acá te mostramos cómo colocarlo como el puerto 10443 para acceder al portainer sin ningún problema. Lo importante es que el puerto interno siempre sea el 9443 que es el que expone el portainer para este servicio web.

Publicidad

Instalación de portainer en docker

Al tener listo el contenedor del portainer ya podremos acceder y instalarlo para poder comenzar a utilizarlo. Lo más importante de esta instalación son las credenciales que nos solicitara al inicio con ellas podremos acceder más adelante.

instalación portainer

Es importante entender que la IP que nosotros utilizamos es la 192.168.21.129 por que es donde tener nuestro servidor con docker, ustedes deben usar una propia con la URL

https://IP_DOCKER:9443

Es importante colocarle al navegador que es una solicitud https, puesto que portainer trae un certificado autofirmado al inicio.

Publicidad

Creando el usuario administrador de portainer

El usuario administrador por defecto se llama admin, pero este puede ser cambiado al que más nos guste o el que necesitemos. Lo que es importante es que la clave debe cumplir con un mínimo de 12 caracteres para ser una clave aceptable.

De no cumplir con el mínimo de caracteres no se nos dejara proseguir en la instalación. Pero una vez la coloquemos ya es simplemente cuestión de esperar que portainer proceda con la instalación y nos solicite nuevamente las credenciales esta vez para acceder al menú principal de la aplicación.

creación de usuario administrador en portainer con docker

Restaurar una configuración de portainer desde un Backup

En caso de que tengamos un respaldo o backup de nuestra configuración de portainer y busquemos es restaurarlo es tan sencillo como seleccionar «Restore portainer from backup» en el menú antes crear una clave de administrador.

restaurar backup de portainer en docker

Esto como ves en la imagen nos va a solicitar subamos el archivo de respaldo y coloquemos la clave si es que el backup está protegido por clave. Si contamos con la versión para empresas (Business) podemos utilizar un almacenamiento de Amazon S3 para cargar el backup.

Publicidad

Utilizando portainer para ver el servicio de docker local.

Si portainer tiene acceso al docker socket, podremos una vez instalado acceder a la administración del servicio docker local. Esta línea es la que da el acceso necesario:

YAML
      - 9443:9443
      - 8000:8000 #Puerto opcional se usa para el cliente edge.
    volumes:
        #Almacenamiento de datos del portainer
        - ./portainer-datos:/portainer-datos
        #Volumen necesario para ver el docker local
        - /var/run/docker.sock:/var/run/docker.sock
    restart: always

Esto hace que podamos ver nuestro contenedores locales incluido el mismo portainer. Dejando tanto ver su estatus como administrarlos de manera sencilla y visual por lo que para grandes despliegues es una herramienta muy útil.

administración de docker con portainer

También tenemos la posibilidad de conectarnos a un servicio de kubernetes remoto o un incluso un Docker-swarm sin necesidad de que el portainer esté ejecutándose en ellos. Eso sí estas conexiones remotas tienen requisitos individuales cada uno de ellos.

docker swarm y kubernetes portainer

Portainer para Kubernetes

En el caso de kubernetes se puede hacer mediante el agent de portainer, este puede ser ejecutandolo tanto en modo normal o modo Edge. La diferencia es el método de despliegue del mismo y si utilizaremos el Edge Compute o no, esto cambia el método de despliegue del agente.

Publicidad

Esta información es mucho más amplia por lo que no vamos a profundizar en ella en este artículo. Pero la base es utilizar un agente que se ejecute dentro del cluster de kubernetes que queremos administrar para poder tener acceso a su información.

Portainer para Docker swarm

Tiene 4 opciones para conectar portainer a docker swarm:

  • Agente y Agente Edge: Ambos son contenedores que deben ser desplegados dentro del servicio Docker swarm antes de poder conectar portainer a nuestro Docker swarm, la diferencia es que uno de ellos utiliza las variables de entorno para configurar una llaves para el Edge compute.
  • Socket: Esto se hace montando un volumen del docker socket al portainer para poder ver los contenedores corriendo localmente (Es de uso local regularmente)
  • API: Utiliza la API nativa de Docker swarm para administrarlo.

Los métodos son variados y cada uno requiere sus configuraciones específicas por lo que no vamos a profundizar en este artículo más allá de mencionar los métodos que existen de conexión.

Docker compose portainer + Traefik

Si queremos utilizar portainer para exponer nuestro servicio de portainer mediante un nombre de dominio. Podemos hacerlo mediante un docker-compose.yml pero tenemos que tener en consideración que tendremos que agregar toda la información para que traefik lo reconozca.

Publicidad
Traefik
services:
  traefik:
    image: "traefik:v3.0"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      #- "--api.insecure=true"
      - "--providers.docker=true"
      #- "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web-secure.address=:443"
      - "--providers.docker.network=Docker-network"
    ports:
      - "80:80"
      - "443:443"
      #- "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    networks:
      Docker-network:

networks:
  Docker-network:
    name: Docker-network
    external: false
Portainer
services:
  portainer:
    container_name: "portainer"
    image: portainer/portainer-ce:latest
    expose:
      - 9443
      - 8000 #Puerto opcional se usa para el cliente edge.
    volumes:
        #Almacenamiento de datos del portainer
        - ./portainer-datos:/portainer-datos
        #Volumen necesario para ver el docker local
        - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    networks:
      Docker-network:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.insecure-portainer.entrypoints=web"
      - "traefik.http.routers.insecure-portainer.rule=Host(`portainer.local`)"
      - "traefik.http.routers.insecure-portainer.middlewares=force-secure-portainer"
      - "traefik.http.middlewares.force-secure-portainer.redirectscheme.scheme=https"
      - "traefik.http.middlewares.force-secure-portainer.redirectscheme.permanent=true"
      - "traefik.http.routers.portainer.rule=Host(`portainer.local`)"
      - "traefik.http.routers.portainer.entrypoints=web-secure"
      - "traefik.http.routers.portainer.tls=true"
      - "traefik.http.services.portainer.loadBalancer.server.port=9000"

networks:
  Docker-network:
    external: true

Es importante destacar que como traefik ya gestiona todo lo referente a la conexión segura mediante HTTPS, el puerto usado para comunicarse entre el traefik y el portainer es el puerto HTTP por tanto es el 9000 y no el 9443.

Con este ejemplo de cómo sería dentro de un servicio de traefik, te adjuntamos tanto el docker-compose.yml de traefik como el de portainer, para que tengas los entrypoints del traefik.

Con esto podrás construir tu propio docker-compose.yml para desplegar tu servicio como mejor lo requieras, estos son de uso general y solo funcionan con un registro local para el portainer por lo que debes adaptarlos a lo que necesites cambiando principalmente el dominio «portainer.local» por uno tuyo.

Niwo
Niwo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *