Introducción a Docker

La solución profesional al problema más común del desarrollo: "en mi máquina funciona".

La Necesidad: ¿Por Qué es Importante esta Lección?

A medida que nuestras aplicaciones Shiny se vuelven más complejas, no solo dependen de paquetes de R, sino también de programas externos instalados en el sistema operativo (como `pandoc` o `LaTeX`). El problema es que si movemos nuestra aplicación a otro computador (el de un colega, un servidor de producción), no hay garantía de que esos programas estén instalados. Esto causa que la aplicación falle de formas inesperadas. Aquí es donde entra Docker.

La Analogía del Contenedor

El Problema Logístico

Antes de los contenedores, enviar productos era un caos. Cada producto (barriles, cajas, sacos) tenía una forma y tamaño diferente. Cargarlos y descargarlos era lento, ineficiente y propenso a errores.

El Problema del Software

Desplegar software es similar. Cada aplicación tiene dependencias únicas (versiones de R, paquetes, programas del sistema). Instalar todo manualmente en un nuevo servidor es lento, ineficiente y propenso a errores.

La Solución: Un Estándar

El contenedor de transporte estandarizó todo. No importa lo que lleves dentro, la "caja" es la misma. Docker hace exactamente lo mismo para el software. Un contenedor de Docker es una "caja" estándar que empaqueta tu aplicación con TODO lo que necesita, garantizando que funcione en cualquier lugar.

¿Cómo Funciona Docker? (Contenedor vs. Máquina Virtual)

Para un público técnico, es crucial entender que un contenedor no es una máquina virtual (VM). Una VM emula un computador completo, incluyendo su propio sistema operativo, lo que la hace pesada y lenta.

En cambio, un contenedor es mucho más ligero. No tiene su propio sistema operativo, sino que comparte el kernel del sistema operativo anfitrión (en nuestro caso, el kernel de Linux que provee WSL 2 en Windows). Solo empaqueta la aplicación y sus dependencias directas.

Esta es la razón por la que los contenedores son tan rápidos para iniciar y tienen un rendimiento casi nativo. Para R y Shiny, esto significa que nuestra aplicación se ejecutará de forma eficiente sin el sobrecosto de una virtualización completa.

Guía de Instalación Detallada para Windows

Para poder trabajar con contenedores, primero debemos instalar la herramienta principal: Docker Desktop.

Paso 1: Prerrequisitos (WSL 2)

Docker en Windows moderno depende del Subsistema de Windows para Linux (WSL 2). Es una tecnología de Microsoft que permite ejecutar un entorno de Linux directamente en Windows. Si no lo tienes, la instalación de Docker te guiará, pero es bueno saberlo de antemano.

Paso 2: Descargar Docker Desktop

Ve a la página oficial de Docker y descarga el instalador. Esta es la única fuente que debes usar.

Descargar Docker Desktop

Paso 3: Ejecutar el Instalador

Ejecuta el archivo descargado. Durante la instalación, verás una pantalla de configuración. La opción más importante es asegurarte de que la casilla "Use WSL 2 instead of Hyper-V (recommended)" esté marcada.

Paso 4: Primer Inicio y Reinicio

Al finalizar la instalación, reinicia tu computador. La primera vez que inicies Docker Desktop, puede tardar unos minutos en configurar todo. Sabrás que está listo cuando el icono de la ballena en tu barra de tareas deje de animarse y se quede fijo.

Tu Primer Contenedor: El "Hola Mundo" de Docker

Ahora que tienes Docker instalado, vamos a verificar que todo funciona correctamente con el ejercicio más simple y universal.

Paso 1: Ejecutar un Contenedor

Abre una terminal (PowerShell o la terminal de VS Code) y escribe el siguiente comando:

docker run hello-world

Docker hará lo siguiente: 1. Buscará una imagen llamada "hello-world" en tu máquina. 2. Al no encontrarla, la descargará de Docker Hub (un registro público). 3. Creará y ejecutará un contenedor a partir de esa imagen, el cual imprimirá un mensaje de bienvenida y se detendrá.

Paso 2: Ver las Imágenes Descargadas

Ahora que has descargado la imagen, puedes verla en tu lista local.

docker images

Paso 3: Ver los Contenedores (Incluso los Detenidos)

El contenedor `hello-world` se detuvo después de ejecutarse. Para verlo, necesitas añadir la bandera `-a` (all).

docker ps -a

Si has completado estos pasos, ¡felicidades! Tu entorno de Docker está funcionando perfectamente y entiendes el ciclo de vida básico de un contenedor.