Skip to main content

docker-entry.sh para recibir mas parametros

Personalizar el archivo docker-entry.sh de tu contenedor de Checkmk, o de cualquier otro contenedor Docker, implica modificar el script que se ejecuta al iniciar el contenedor. Este script a menudo configura el entorno, inicia servicios y realiza otras tareas de preparación. Aquí te detallo un enfoque general sobre cómo puedes personalizarlo para tu contenedor de Checkmk:

Extiende la Imagen de Docker

La manera más recomendable de personalizar el comportamiento de inicio de un contenedor es mediante la creación de una imagen personalizada. Esto implica crear un Dockerfile que se base en la imagen original de Checkmk y modificar el docker-entry.sh según tus necesidades.

Paso a Paso

Obtén el Script Actual: Primero, necesitas obtener una copia del docker-entry.sh actual. Esto puede hacerse creando un contenedor temporal y copiando el script fuera de él, o bien, si el código fuente está disponible, directamente desde el repositorio del proyecto.

Crea un Dockerfile Personalizado: Crea un nuevo Dockerfile que use la imagen de Checkmk como base.


#Dockerfile
FROM checkmk/check-mk-raw:latest  # Asegúrate de usar la etiqueta correcta

# Copia tu versión personalizada del script al contenedor
COPY custom-docker-entry.sh /usr/local/bin/docker-entry.sh

# Otorga permisos de ejecución al script
RUN chmod +x /usr/local/bin/docker-entry.sh

# Continúa con cualquier otra personalización

 

Modifica el Script docker-entry.sh: Realiza los cambios necesarios en tu copia local del script. Asegúrate de mantener la funcionalidad esencial para el inicio correcto de Checkmk.

Construye tu Imagen Personalizada: Una vez modificado el script y preparado tu Dockerfile, construye la nueva imagen.

bash
docker build -t tu-nombre/checkmk-personalizado .

Ejecuta tu Contenedor: Finalmente, ejecuta tu contenedor usando tu imagen personalizada.

bash
docker run -d --name checkmk-personalizado tu-nombre/checkmk-personalizado

Consideraciones

  • Compatibilidad: Asegúrate de que tus personalizaciones sean compatibles con las versiones futuras de Checkmk. Los cambios en las versiones oficiales pueden afectar cómo tu script personalizado interactúa con el contenedor.

  • Seguridad: Revisa tu script personalizado en busca de posibles problemas de seguridad, especialmente si estás exponiendo el contenedor a Internet.

  • Documentación: Documenta tus cambios para facilitar futuras actualizaciones o modificaciones. Esto es especialmente importante si trabajas en equipo.

Esta estrategia te permite mantener tus personalizaciones separadas de la imagen original, facilitando la actualización de la imagen base sin perder tus cambios.

 

Segunda opción: HOOK

 

Usar un directorio de hooks, como HOOKROOT=/docker-entrypoint.d, es otra excelente forma de personalizar el comportamiento de tu contenedor Docker sin modificar directamente el script de entrada (docker-entry.sh). Esta técnica se basa en la capacidad de ejecutar scripts adicionales o "hooks" durante el proceso de inicio del contenedor, antes de ejecutar el comando principal del contenedor.

Cómo Implementarlo

  1. Crear tus Scripts de Hook: Crea uno o más scripts que realicen las tareas de personalización que necesitas. Estos pueden ser scripts de shell (.sh), pero asegúrate de que tengan permisos de ejecución.

    Por ejemplo, 01-custom-setup.sh podría ser un script para configurar algunas variables de entorno o realizar configuraciones iniciales.

  2. Preparar tu Imagen Docker: En tu Dockerfile, copia estos scripts al directorio /docker-entrypoint.d/ dentro de tu imagen. Asegúrate de que este directorio sea revisado por el script de entrada principal (docker-entry.sh) para ejecutar los scripts que contiene. Si el docker-entry.sh original no soporta esta funcionalidad, tendrás que añadirla o extender el script de entrada como se describió previamente.

     

    #Dockerfile
    FROM checkmk/check-mk-raw:latest
    
    # Crea el directorio para los hooks, si no existe
    RUN mkdir -p /docker-entrypoint.d/
    
    # Copia tus scripts de hook al contenedor
    COPY ./hooks/ /docker-entrypoint.d/
    
    # Otorga permisos de ejecución a los scripts
    RUN chmod +x /docker-entrypoint.d/*.sh
    
    # Continúa con cualquier otra personalización necesaria
    

     

  3. Construye y Ejecuta tu Imagen: Al igual que con la personalización del script de entrada, construye tu imagen personalizada y luego ejecuta el contenedor basado en ella.

     

    docker build -t tu-nombre/checkmk-con-hooks .
    docker run -d --name checkmk-con-hooks tu-nombre/checkmk-con-hooks


    bash
    docker build -t tu-nombre/checkmk-con-hooks . docker run -d --name checkmk-con-hooks tu-nombre/checkmk-con-hooks

     

Ventajas del Uso de Hooks

  • Flexibilidad: Puedes añadir, modificar o eliminar scripts de hook sin necesidad de modificar el script de entrada original del contenedor.
  • Mantenibilidad: Facilita la actualización de la imagen base de Docker sin perder tus personalizaciones.
  • Orden: Puedes organizar tus personalizaciones en múltiples scripts separados, cada uno enfocado en una tarea específica, lo cual mejora la legibilidad y el mantenimiento.

Consideraciones

  • Orden de Ejecución: Los scripts en el directorio de hooks se ejecutarán en orden alfabético. Nombra tus scripts de manera adecuada si el orden de ejecución es importante (por ejemplo, 01-setup.sh, 02-configure.sh, etc.).
  • Compatibilidad del Script de Entrada: Asegúrate de que el docker-entry.sh de tu imagen base soporte la ejecución de hooks de esta manera. Si no es así, tendrás que modificarlo para que revise y ejecute scripts en el directorio de hooks.

Esta técnica de hooks es muy útil y proporciona una manera elegante de extender la funcionalidad de los contenedores Docker sin tocar demasiado el funcionamiento interno de los scripts de entrada existentes.

 

Tercera opción: map /docker-entry.d

 

Mapear un volumen al directorio /docker-entrypoint.d/ en tu contenedor y colocar allí tus scripts personalizados es una estrategia efectiva y flexible para personalizar el comportamiento de tu contenedor sin modificar la imagen original. Esta técnica se basa en la funcionalidad de Docker para montar volúmenes, permitiéndote insertar archivos o directorios desde el sistema anfitrión al sistema de archivos del contenedor.

Cómo Implementarlo

  1. Prepara tus Scripts: Antes de ejecutar tu contenedor, prepara los scripts que quieres que se ejecuten al inicio. Asegúrate de que estos scripts tengan los permisos adecuados para ser ejecutados.

  2. Monta el Volumen: Cuando ejecutes tu contenedor, usa la opción -v o --mount de Docker para montar el directorio que contiene tus scripts personalizados en /docker-entrypoint.d/ dentro del contenedor.

    Por ejemplo:

    docker run -d \
      -v /ruta/a/tus/hooks:/docker-entrypoint.d \
      --name tu-contenedor \
      tu-imagen
    

    En este comando, /ruta/a/tus/hooks es el directorio en tu sistema anfitrión donde has colocado los scripts que deseas ejecutar. Estos scripts ahora serán accesibles dentro del contenedor en /docker-entrypoint.d.

    Consideraciones Importantes

    • Soporte de la Imagen Base: Para que esta técnica funcione, el script de entrada (docker-entry.sh) de tu imagen base debe estar diseñado para buscar y ejecutar scripts en /docker-entrypoint.d/. Si el docker-entry.sh original no realiza esta función, puedes necesitar modificar la imagen base como se mencionó anteriormente para incluir esta funcionalidad.

    • Orden de Ejecución: Al igual que con el enfoque de hooks, los scripts se ejecutarán en orden alfabético. Por lo tanto, si el orden en el que se ejecutan tus scripts es importante, deberías nombrarlos de acuerdo con el orden deseado (por ejemplo, 01-init.sh, 02-setup.sh, etc.).

    • Seguridad: Ten cuidado con los scripts que ejecutas de esta manera, especialmente si contienen información sensible o realizan operaciones críticas. Asegúrate de que solo los usuarios autorizados puedan modificar estos scripts en el sistema anfitrión.

    Ventajas

    • Flexibilidad y Facilidad de Actualización: Puedes cambiar fácilmente los scripts en el directorio mapeado sin necesidad de reconstruir o reiniciar el contenedor, lo que ofrece una gran flexibilidad para actualizaciones o cambios rápidos.
    • Separación de Configuración y Datos: Esta técnica mantiene tus personalizaciones separadas de la imagen del contenedor, facilitando la actualización de la imagen sin perder tus scripts personalizados.

    Esta estrategia de mapear un directorio de hooks desde tu sistema anfitrión al contenedor proporciona una forma conveniente de personalizar tus contenedores, dándote la flexibilidad de modificar el comportamiento del contenedor sin tener que reconstruir las imágenes.