Usando Portainer con docker-compose.yml | Fácil y rápido

Usando Portainer con docker-compose.yml | Fácil y rápido

Publicado el 3 de abril de 2024 · Niwo

Usando Portainer con docker-compose.yml | Fácil y rápido

Utilizar Portainer con un docker-compose.yml no es complicado, pero a veces necesitamos saber qué servicios están conectados y cómo acceder a ellos. En esta guía te enseñaremos todo lo necesario para desplegar tu servicio de Portainer y monitorear los contenedores locales que ejecuta Docker.

También explicaremos cómo conectarte a un servidor Docker remoto dentro de una red local (LAN) segura. Importante: No utilizaremos controles de seguridad robustos, ya que no es recomendable exponerlo directamente a Internet.

Docker Compose para Portainer

Para desplegar Portainer con Docker Compose, necesitamos crear un archivo 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 para el cliente Edge. volumes: # Almacenamiento de datos de Portainer - ./portainer-datos:/portainer-datos # Volumen necesario para acceder al Docker local - /var/run/docker.sock:/var/run/docker.sock restart: always


Con esto, solo necesitamos ejecutar `docker compose up -d` y Portainer estará corriendo en nuestro servidor. Por defecto, se utiliza el puerto 9443 para acceder a él, pero podemos cambiarlo modificando la siguiente línea:

```yaml
    ports:
      - 10443:9443
      - 8000:8000 # Puerto opcional para el cliente Edge.
    volumes:

Por ejemplo, puedes usar el puerto 10443 para acceder a Portainer de la siguiente manera:

Es importante que el puerto interno siga siendo 9443, ya que es el puerto expuesto por Portainer para este servicio web.

Instalación de Portainer en Docker

Una vez que el contenedor de Portainer está listo, podemos acceder y completar la instalación para empezar a utilizarlo. Lo más importante durante esta instalación son las credenciales que se solicitan al inicio; las necesitaremos para acceder posteriormente.

Instalación de Portainer

Recuerda que la IP utilizada en el ejemplo es 192.168.21.129, que corresponde a la dirección de nuestro servidor Docker. Debes reemplazarla con la URL correcta de tu propio servidor:

https://IP_DOCKER:9443

Es importante indicar al navegador que se trata de una conexión HTTPS, ya que Portainer genera un certificado autofirmado durante el inicio.

Creando el usuario administrador de Portainer

El usuario administrador por defecto es “admin”, pero puedes cambiarlo al nombre que prefieras. Lo importante es que la contraseña cumpla con un mínimo de 12 caracteres para ser aceptable.

Si la contraseña no cumple con los requisitos, no podrás continuar con la instalación. Una vez que establezcas una contraseña válida, Portainer procederá con la instalación y te solicitará las credenciales nuevamente para acceder al menú principal de la aplicación.

Creación del usuario administrador en Portainer

Restaurando una configuración de Portainer desde un Backup

Si tienes un respaldo o backup de tu configuración de Portainer, puedes restaurarlo seleccionando “Restore portainer from backup” en el menú inicial (antes de crear la clave del administrador).

Restaurar backup de Portainer

Esto te pedirá que subas el archivo de respaldo e ingreses la contraseña, si el backup está protegido. Si tienes la versión Business, puedes utilizar un almacenamiento de Amazon S3 para cargar el backup.

Utilizando Portainer para ver los servicios de Docker locales

Si Portainer tiene acceso al socket de Docker, una vez instalado podrás acceder a la administración de los servicios de Docker locales. Esta línea es la que proporciona el acceso necesario:

    ports:
      - 9443:9443
      - 8000:8000 # Puerto opcional para el cliente Edge.
    volumes:
        # Almacenamiento de datos de Portainer
        - ./portainer-datos:/portainer-datos
        # Volumen necesario para acceder al Docker local
        - /var/run/docker.sock:/var/run/docker.sock
    restart: always

Esto te permite ver tus contenedores locales, incluido el propio Portainer, y administrarlo de forma sencilla y visual. Es una herramienta muy útil para grandes despliegues.

Administración de Docker con Portainer

También puedes conectarte a un servicio de Kubernetes remoto o incluso a un Docker Swarm sin que Portainer se ejecute en ellos. Sin embargo, estas conexiones remotas tienen requisitos individuales.

Docker Swarm y Kubernetes con Portainer

Portainer para Kubernetes

Para Kubernetes, puedes utilizar el agente de Portainer, que se puede ejecutar en modo normal o Edge. La diferencia radica en el método de despliegue del agente y si utilizaremos o no Edge Compute. Por lo tanto, cambia el método de despliegue del agente.

Esta información es más extensa, por lo que no profundizaremos en ella en este artículo. La base es utilizar un agente que se ejecute dentro del cluster de Kubernetes que deseas administrar para poder acceder a su información.

Portainer para Docker Swarm

Existen cuatro opciones para conectar Portainer a Docker Swarm:

  • Agente y Agente Edge: Ambos son contenedores que deben desplegarse dentro del servicio Docker Swarm antes de poder conectar Portainer. La diferencia es que uno de ellos utiliza variables de entorno para configurar una clave para el Edge Compute.
  • Socket: Se monta un volumen del socket de Docker en Portainer para acceder a los contenedores que se ejecutan localmente (generalmente para uso local).
  • API: Utiliza la API nativa de Docker Swarm para administrarlo.

Los métodos son variados y no profundizaremos en ellos en este artículo, más allá de mencionar las opciones disponibles.

Docker Compose, Portainer y Traefik

Si deseas utilizar Portainer para exponer tu servicio a través de un nombre de dominio, puedes hacerlo con Docker Compose, pero debes tener en cuenta que deberás agregar toda la información necesaria para que Traefik lo reconozca.

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
services:
  portainer:
    container_name: "portainer"
    image: portainer/portainer-ce:latest
    expose:
      - 9443
      - 8000 # Puerto opcional para el cliente Edge.
    volumes:
        # Almacenamiento de datos de Portainer
        - ./portainer-datos:/portainer-datos
        # Volumen necesario para acceder al 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 utilizado para comunicarse entre Traefik y Portainer es el puerto HTTP (puerto 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, puedes construir tu propio docker-compose.yml para desplegar tu servicio como mejor lo requieras. Estos ejemplos son de uso general y solo funcionan con un registro local para Portainer, por lo que debes adaptarlos a tus necesidades cambiando principalmente el dominio “portainer.local” por uno propio.


¿Necesitas crear un archivo docker-compose.yml? Prueba nuestro Generador Docker Compose.

Artículos relacionados