754 - Deja de sufrir con Docker! Mi Navaja Suiza para Volúmenes y Archivos

754 - Deja de sufrir con Docker! Mi Navaja Suiza para Volúmenes y Archivos

Gestiona volúmenes Docker con herramientas Rust: yazi, lsd, ripgrep y neovim. Optimiza archivos en contenedores ligeros de forma rápida y segura.

1:25
-3:15

Una de mis obsesiones, que tienen todo el sentido del mundo, por otro lado, es que las imágenes Docker que implemento sean lo mas ligeras posibles. El sentido de que sean lo mas ligeras es doble. Por un lado, evitar que las imágenes ocupen un espacio completamente innecesario, sobre todo si esas imágenes tienen contenido innecesario. Pero, por otro lado, y por supuesto, que mas importante es reducir la superficie de ataque de esas imágenes Docker. Cuanto menos software innecesario tenga una imagen Docker, menos posibilidades de que haya vulnerabilidades en ese software. Sin embargo, esto lleva su contraparte evidente, y es que cunado necesitamos hacer algo en un contenedor necesitamos instalar software adicional que además se perderá la próxima vez que se inicie el contenedor. En este sentido, hace ya algún tiempo que implementé una imagen Docker, con las herramientas que iba utilizando, y recientemente lo he actualizado y es precisamente de lo que voy a hablar en este episodio.

Herramientas Linux dockerizadas

¿Pero los contenedores no son efímeros?

Antes de nada quiero aclarar un concepto que a veces puede llevar a confusión. Los contenedores Docker son efímeros en el sentido de que cuando se detienen y se eliminan, cualquier cambio realizado dentro del contenedor se pierde. Sin embargo, esto no significa que no podamos tener herramientas persistentes o reutilizables dentro de un contenedor. La clave está en cómo gestionamos las imágenes y los volúmenes.

¿Cómo puedo tener herramientas persistentes en un contenedor efímero? La respuesta es sencilla: creando una imagen Docker personalizada que incluya todas las herramientas que necesitas. De esta manera, cada vez que inicies un contenedor a partir de esa imagen, tendrás acceso a todas las herramientas preinstaladas.

Los volúmenes Docker

Hace ya bastante tiempo que utilizo volúmenes Docker para persistir datos entre reinicios de contenedores. Los volúmenes son una forma eficiente de almacenar datos fuera del ciclo de vida del contenedor, lo que significa que los datos permanecen intactos incluso si el contenedor se elimina. No me estoy refiriendo a al mapeo de un directorio del host al contenedor, sino a los volúmenes gestionados por Docker.

Por ejemplo, en lugar de tener tus fotografías en un directorio del host mapeado al contenedor, puedes utilizar un volumen Docker para almacenar esas fotografías. De esta manera, si eliminas el contenedor, las fotografías permanecen seguras en el volumen.

Crear un volumen Docker es tan sencillo,

docker volume create <nombre_del_volumen>

Hoy por hoy, me resulta mucho mas cómodo utilizar volúmenes Docker para almacenar datos persistentes, ya que me permite gestionar los datos de manera más eficiente y segura. Pero además, cuando llegué a Dockge, me vino de perlas haber estado utilizando volúmenes Docker, ya que me permitió migrar mis datos de manera sencilla.

Pero, ¿Que sucede cuando quieres copiar, mover, o renombrar un archivo que tienes en un volumen Docker? Aquí es donde entra en juego la imagen Docker que he creado con las herramientas necesarias para gestionar archivos dentro de volúmenes Docker. Un contenedor sencillo, basado en Alpine Linux, que incluye herramientas, muy prácticas

docker-linux-tools

El corazón de este contenedor es una distribución Alpine 3.23, elegida por su ligereza extrema, sobre la cual se ha construido un ecosistema de herramientas de última generación, la mayoría escritas en Rust, buscando la máxima velocidad y eficiencia.

  • La Shell y el Prompt: Se sustituye la clásica ash de Alpine por Fish, una shell diseñada para ser interactiva y amigable desde el primer segundo. Como guinda, utiliza Starship como prompt, lo que te da un indicador visual ultra rápido y personalizable que se adapta a cualquier lenguaje o entorno de trabajo.
  • Productividad: El contenedor integra herramientas que reinventan los comandos clásicos de Unix:
    • lsd: El reemplazo moderno de ls con iconos y colores.
    • bat: Un cat con resaltado de sintaxis y paginación.
    • fd y ripgrep: Alternativas increíblemente veloces a find y grep.
    • sd: Un buscador y reemplazador intuitivo (el sucesor moderno de sed).
  • Gestión de archivos y edición: Incluye yazi , un gestor de archivos para la terminal extremadamente rápido basado en terminal, y por supuesto, Neovim para la edición de texto profesional.
  • Herramienta Especial (rnr): La imagen incluye un proceso de instalación manual para rnr (versión 0.5.1), una utilidad escrita en Rust para renombrar archivos y directorios de forma masiva de manera segura y rápida.

Un script de ayuda

Además utilizo un script que me permite levantar el contenedor de forma sencilla, mapeando los volúmenes que utilizo habitualmente para gestionar mis archivos multimedia. El script es el siguiente:

docker pull atareao/docker-linux-tools
docker run -it \
          --init \
          --rm \
          -v downloads:/downloads \
          -v peliculas:/peliculas \
          -v series:/series \
          --name tools \
          atareao/docker-linux-tools:latest \
          fish 

Con este sencillo script levanto un contenedor interactivo (-it), que se destruye al salir (--rm), utilizando un proceso init para gestionar correctamente los procesos huérfanos (--init). Además, mapeo tres volúmenes Docker (-v) llamados downloads, peliculas y series, que son los que utilizo habitualmente para almacenar mis archivos multimedia. Finalmente, inicio la shell Fish dentro del contenedor.

  • Renombrado Masivo e Inteligente. Gracias a la inclusión de rnr, puedo organizar tus carpetas de /series o /peliculas de forma masiva usando expresiones regulares. Es ideal para corregir nombres de archivos descargados que vienen con formatos inconsistentes.
  • Navegación y Gestión de Archivos (Yazi + LSD). En lugar del clásico ls, al entrar tienes lsd para visualizar tus directorios de medios con iconos y colores. Con yazi, puedes navegar por tus descargas con una velocidad asombrosa, realizando operaciones de archivos sin despegar los dedos del teclado.
  • Inspección y Procesamiento Veloz. Búsqueda. Si necesito encontrar un capítulo específico entre miles de archivos, fd y ripgrep lo harán en milisegundos.
  • Previsualización. Con bat, puedo leer archivos de configuración o NFO de tus películas con un resaltado de sintaxis impecable.
  • Transformación. Con sd, puedes realizar sustituciones de texto en scripts o archivos de metadatos de forma mucho más intuitiva que con el sed tradicional.

Pero todavía queda trabajo por hacer

Con esto tengo las herramientas necesarias para gestionar mis archivos dentro de volúmenes Docker de manera eficiente y rápida. Sin embargo, todavía hay trabajo por hacer para mejorar la experiencia y añadir más funcionalidades. Aunque esto llegará en futuras versiones de la imagen Docker, lo cierto es que tengo claro que necesito algunos scripts sencillos partiendo de estas herramientas que me permitan automatizar tareas comunes, como organizar mis descargas o renombrar archivos de manera masiva, pero ya tengo las herramientas necesarias para hacerlo.

Deja una respuesta

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