Arostik Logo
ArostikVLARCK

Micro-Technology Solutions

Servidores y DevOpsNivel: Principiante15 min de lección

¿Qué es Docker y Qué son los Contenedores?

Comprende los pilares de Docker: qué es una imagen vs un contenedor, la anatomía de un archivo Dockerfile, el registro de Docker Hub y los comandos básicos de ciclo de vida.

¿Qué es Docker y Qué son los Contenedores?
AROS STUDENT
E
Equipo de Ingeniería ArostikEspecialista en Sistemas y TI · Actualizado el 20 mar 2026
¿Qué es y para qué sirve?

Docker es una plataforma de software de código abierto basada en la virtualización a nivel de sistema operativo que permite empaquetar una aplicación junto con todas sus dependencias, librerías y configuraciones en una unidad estándar, aislada y ligera denominada 'Contenedor'.

¿Por qué deberías aprenderlo y usarlo?

Destierra para siempre la excusa histórica más frustrante de la informática: '¡En mi máquina sí funcionaba!'. Garantiza que el software se ejecute con idéntico comportamiento en la computadora del desarrollador, en el servidor de pruebas y en el clúster de producción.

Analogía de la Vida Real

Imagina los contenedores de carga marítimos estandarizados inventados por Malcolm McLean: antes de ellos, cargar un barco requería estibar sacos de café sueltos, barriles de vino y cajas de madera a mano, tardando semanas y dañando la carga. Con el contenedor marítimo estándar de 20 pies, no importa lo que haya adentro; cualquier grúa, tren, camión o barco del mundo puede cargarlo y transportarlo con total seguridad. Docker es ese contenedor marítimo para el software.

Explicación Paso a Paso del Tema

1

Redactar un archivo Dockerfile limpio

Escribe la receta que define el entorno estandarizado de tu aplicación.

Crea un archivo llamado exactamente `Dockerfile` (sin extensión) en la raíz de tu proyecto. 1. `FROM`: define la imagen base (ej. `node:20-alpine`). 2. `WORKDIR`: establece el directorio de trabajo dentro del contenedor. 3. `COPY`: transfiere archivos de tu máquina al contenedor. 4. `RUN`: ejecuta comandos durante la construcción (ej. `npm install`). 5. `EXPOSE`: documenta el puerto. 6. `CMD`: define el comando final que arranca la app.

Comando de Terminal / Código
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Desglose de Parámetros:
Parámetro / FlagTipo / RolSignificado y Uso
COPY package*.json ./Estrategia de capasCopia primero los manifiestos para aprovechar la caché de Docker y no reinstalar librerías si solo cambiaste código
CMDComando por defectoPunto de entrada de ejecución del proceso principal al iniciar el contenedor
Consejo Profesional:

Usa siempre imágenes base de Alpine Linux (`node:alpine`, `python:alpine`) para reducir el peso de tus imágenes de 1 GB a menos de 100 MB.

Error Común a Evitar:

Copiar la carpeta local `node_modules` dentro del contenedor con `COPY . .`. Debe crearse siempre un archivo `.dockerignore` que contenga `node_modules` para que las dependencias se compilen limpiamente dentro del contenedor.

2

Construir y etiquetar la imagen (docker build)

Compila el Dockerfile en una imagen inmutable con una etiqueta legible.

El comando `docker build` lee el Dockerfile y genera la imagen. La bandera `-t` (tag) asigna un nombre y versión (ej. `mi-app:1.0.0`). El punto final `.` le indica a Docker que el contexto de construcción es el directorio actual.

Comando de Terminal / Código
docker build -t mi-api-node:1.0.0 .
Desglose de Parámetros:
Parámetro / FlagTipo / RolSignificado y Uso
-t nombre:tagEtiquetaAsigna un nombre legible y número de versión a la imagen construida
.Contexto de construcciónEspecifica qué carpeta de archivos se enviará al daemon de Docker para compilar
Consejo Profesional:

Puedes listar todas las imágenes almacenadas localmente en tu computadora con `docker images`.

Error Común a Evitar:

Olvidar el punto final `.` en el comando `docker build`, provocando un error de sintaxis en la terminal.

3

Ejecutar el contenedor y mapear puertos (docker run)

Lanza la instancia en segundo plano y conecta tu puerto local con el contenedor.

Los contenedores están aislados de la red de tu computadora por defecto. Para acceder a la app web que escucha en el puerto 3000 dentro del contenedor desde el navegador de tu máquina, usas la bandera `-p puerto_host:puerto_contenedor` (ej. `-p 3000:3000`). La bandera `-d` (detached) lo corre en segundo plano para no bloquear tu consola.

Comando de Terminal / Código
docker run -d -p 3000:3000 --name mi-contenedor-api mi-api-node:1.0.0
Desglose de Parámetros:
Parámetro / FlagTipo / RolSignificado y Uso
-dModo desacopladoEjecuta el contenedor en segundo plano liberando la terminal de inmediato
-p 3000:3000Mapeo de puertosConecta el puerto 3000 de tu máquina con el puerto 3000 dentro del contenedor
--nameNombre amigableAsigna un identificador amigable para detenerlo o inspeccionarlo fácilmente
Consejo Profesional:

Para ver los logs de lo que está imprimiendo la aplicación dentro del contenedor en tiempo real, ejecuta `docker logs -f mi-contenedor-api`.

Error Común a Evitar:

Confundir el orden del mapeo `-p`: siempre es `-p PUERTO_TU_MAQUINA:PUERTO_DENTRO_DEL_CONTENEDOR`.

Casos Prácticos Reales en Producción

Situaciones de ingeniería reales sin mención de presupuestos ficticios.

1Caso de Producción: Incorporación Instantánea de Desarrolladores con Docker

Escenario Real:

Una empresa de software tardaba 4 días completos en configurar el entorno de trabajo para cada nuevo programador que se unía al equipo: debían instalar versiones exactas y conflictivas de Python, Redis, PostgreSQL y Node.js en Windows o Mac, sufriendo incompatibilidades continuas.

Solución de Ingeniería Aplicada:

Se encapsuló todo el entorno del proyecto en un archivo `docker-compose.yml` que orquesta la API, la base de datos y la caché en contenedores preconfigurados.

Fichas Nemotécnicas de Conceptos Clave

Glosario rápido para recordar los términos fundamentales de la lección.

Imagen de Docker

Plantilla inmutable de solo lectura compuesta por capas superpuestas que contiene el código, runtime, librerías y variables para crear contenedores.

node:20-alpine (la receta base)
Contenedor de Docker

Instancia ejecutable, viva y aislada en memoria creada a partir de una imagen de Docker, con su propia capa de lectura/escritura y red.

El proceso en ejecución activo de tu app.
Dockerfile

Archivo de texto con instrucciones secuenciales que define exactamente cómo construir una imagen de Docker personalizada.

FROM node:20 ... CMD ["node", "server.js"]
Autoevaluación Rápida3 preguntas

¿Qué es Docker y Qué son los Contenedores?

Selecciona una opción para autoevaluarte al instante. La respuesta se califica de inmediato.

Aciertos: 0 / 3
1

¿Cuál es la principal ventaja técnica de utilizar contenedores de Docker?

2

¿Qué bandera del comando 'docker run' se utiliza para conectar un puerto de tu máquina física con un puerto interno del contenedor?

3

¿Cuál es la diferencia entre una Imagen de Docker y un Contenedor de Docker?

Preguntas Frecuentes (FAQ)

¿Dónde se guardan los datos si un contenedor se destruye?

Por defecto, el almacenamiento de un contenedor es efímero (se pierde al borrarlo). Para persistir datos de forma permanente (como la información de una base de datos), se utilizan Volúmenes de Docker (`docker volume create` o `-v`), que almacenan los datos en una carpeta del disco del host.

¿Qué es Docker Hub?

Es el registro público en la nube oficial de Docker (similar a GitHub para código o npm para librerías) donde la comunidad y empresas oficiales publican imágenes listas para usar de Linux, bases de datos y servidores web.

¿Cómo detengo y elimino un contenedor que ya no necesito?

Ejecutas `docker stop nombre-contenedor` para detener su ejecución de forma segura y luego `docker rm nombre-contenedor` para eliminarlo.

Temas relacionados:#Docker#Contenedores#DevOps#Dockerfile#Imágenes