Cristhian Villegas
DevOps10 min read0 views

Curso Docker #1: Que es Docker? Instalacion y Tu Primer Contenedor

Curso Docker #1: Que es Docker? Instalacion y Tu Primer Contenedor

Bienvenido al Curso de Docker - Parte 1 de 10

Logo de Docker

Fuente: Wikimedia Commons

¡Bienvenido al Curso de Docker desde Cero! Este es el articulo 1 de 10 de una serie disenada para que domines Docker, la herramienta de contenedores mas utilizada en la industria del software. No importa si nunca has usado Docker — esta guia esta pensada para principiantes.

En este primer articulo vas a entender que es Docker, por que revoluciono el desarrollo de software, como instalarlo en tu sistema operativo y como ejecutar tu primer contenedor. Al terminar, tendras Docker funcionando y habras ejecutado tus primeros comandos.

Nota: Este curso esta compuesto por 10 articulos progresivos. Cada uno se construye sobre el anterior, asi que te recomiendo seguirlos en orden. Al final del curso podras crear, desplegar y orquestar aplicaciones con Docker como un profesional.

Que es Docker

Docker es una plataforma de contenedores que permite empaquetar una aplicacion junto con todas sus dependencias (librerias, archivos de configuracion, runtime) en una unidad estandar llamada contenedor. Un contenedor se ejecuta de forma aislada y consistente en cualquier maquina que tenga Docker instalado.

Imagina que quieres compartir tu aplicacion con un companero. Sin Docker, tendria que instalar la misma version de Node.js, Python, las mismas librerias, configurar variables de entorno, etc. Con Docker, simplemente le envias el contenedor y funciona exactamente igual que en tu maquina.

Docker fue lanzado en 2013 por Solomon Hykes y desde entonces se convirtio en el estandar de la industria para empaquetar y distribuir software. Empresas como Google, Netflix, Spotify y miles mas lo usan diariamente.

Por que usar Docker

Estas son las principales razones por las que Docker se ha vuelto indispensable:

  • Consistencia: "En mi maquina funciona" deja de ser un problema. El contenedor se comporta igual en desarrollo, pruebas y produccion
  • Aislamiento: Cada contenedor tiene su propio sistema de archivos, red y procesos. No hay conflictos entre aplicaciones
  • Portabilidad: Un contenedor funciona en Linux, Windows, macOS y en cualquier nube (AWS, Azure, GCP)
  • Velocidad: Los contenedores arrancan en segundos, no en minutos como las maquinas virtuales
  • Eficiencia: Los contenedores comparten el kernel del sistema operativo, usando muchos menos recursos que una VM
  • Escalabilidad: Puedes levantar decenas de contenedores identicos para manejar mas trafico
  • Ecosistema: Docker Hub tiene miles de imagenes listas para usar: bases de datos, servidores web, lenguajes de programacion

Contenedores vs Maquinas Virtuales

Es comun confundir contenedores con maquinas virtuales (VMs). Aunque ambos proporcionan aislamiento, funcionan de forma muy diferente:

Arquitectura Docker vs VMs

CaracteristicaContenedorMaquina Virtual
Arranca enSegundosMinutos
TamanoMBGB
Sistema operativoComparte el kernel del hostTiene su propio SO completo
RendimientoCercano al nativoOverhead por la virtualizacion
AislamientoA nivel de procesoA nivel de hardware
DensidadPuedes ejecutar cientosLimitas a decenas

En resumen: una VM virtualiza el hardware y ejecuta un sistema operativo completo encima. Un contenedor virtualiza el sistema operativo y comparte el kernel del host, lo que lo hace mucho mas ligero y rapido.

Tip: Los contenedores no reemplazan a las VMs — se complementan. En produccion, es comun correr contenedores Docker dentro de VMs para combinar el aislamiento de hardware con la eficiencia de los contenedores.

Instalar Docker en Windows

En Windows, la forma recomendada es instalar Docker Desktop:

Requisitos previos

  • Windows 10 (64-bit) version 2004 o superior, o Windows 11
  • WSL 2 habilitado (Docker Desktop lo configura automaticamente)
  • Virtualizacion habilitada en la BIOS

Pasos de instalacion

  1. Ve a docs.docker.com/desktop/setup/install/windows-install
  2. Descarga Docker Desktop for Windows
  3. Ejecuta el instalador Docker Desktop Installer.exe
  4. Asegurate de marcar "Use WSL 2 instead of Hyper-V"
  5. Haz clic en OK y espera a que termine la instalacion
  6. Reinicia tu computadora cuando se te pida
  7. Abre Docker Desktop desde el menu de inicio

Para verificar que Docker se instalo correctamente, abre una terminal (PowerShell o CMD) y ejecuta:

bash
1# Verificar la version de Docker
2docker --version
3
4# Debe mostrar algo como:
5# Docker version 27.x.x, build xxxxxxx
6
7# Verificar que el motor esta funcionando
8docker info

Instalar Docker en macOS

En macOS tambien se usa Docker Desktop:

  1. Ve a docs.docker.com/desktop/setup/install/mac-install
  2. Descarga la version correspondiente: Apple Silicon (M1/M2/M3) o Intel
  3. Abre el archivo .dmg descargado
  4. Arrastra el icono de Docker a la carpeta Applications
  5. Abre Docker Desktop desde Launchpad o Spotlight
  6. Acepta los terminos de servicio y espera a que se inicie

Verifica la instalacion en la terminal:

bash
1docker --version
2docker compose version

Instalar Docker en Linux (Ubuntu/Debian)

En Linux, Docker se instala directamente como motor (Docker Engine), sin necesidad de Docker Desktop:

bash
1# Actualizar paquetes
2sudo apt-get update
3
4# Instalar dependencias necesarias
5sudo apt-get install -y \
6    ca-certificates \
7    curl \
8    gnupg \
9    lsb-release
10
11# Agregar la clave GPG oficial de Docker
12sudo mkdir -p /etc/apt/keyrings
13curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
14    sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
15
16# Agregar el repositorio de Docker
17echo \
18  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
19  https://download.docker.com/linux/ubuntu \
20  $(lsb_release -cs) stable" | \
21  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
22
23# Instalar Docker Engine
24sudo apt-get update
25sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
26
27# Agregar tu usuario al grupo docker (para no usar sudo)
28sudo usermod -aG docker $USER
29
30# Aplicar el cambio de grupo (necesitas cerrar sesion y volver a entrar)
31newgrp docker
Importante: Despues de agregar tu usuario al grupo docker, debes cerrar sesion y volver a iniciarla para que el cambio tome efecto. De lo contrario, necesitaras usar sudo antes de cada comando de Docker.

Verifica la instalacion:

bash
1# Verificar version
2docker --version
3
4# Verificar que el servicio esta activo
5sudo systemctl status docker
6
7# Probar Docker sin sudo
8docker run hello-world

Tu primer contenedor: hello-world

Ahora que Docker esta instalado, vamos a ejecutar tu primer contenedor. El contenedor hello-world es una imagen oficial de Docker disenada especificamente para verificar que la instalacion funciona correctamente.

bash
1# Ejecutar el contenedor hello-world
2docker run hello-world

Cuando ejecutas este comando, Docker realiza los siguientes pasos:

  1. Busca la imagen localmente: Docker revisa si ya tienes la imagen hello-world en tu maquina
  2. Descarga la imagen: Si no la encuentra, la descarga automaticamente de Docker Hub
  3. Crea un contenedor: Docker crea un nuevo contenedor a partir de la imagen
  4. Ejecuta el contenedor: El contenedor imprime un mensaje de bienvenida y se detiene

Si ves el mensaje "Hello from Docker!", felicidades — Docker esta funcionando correctamente.

Tip: El contenedor hello-world es efimero: se ejecuta, imprime el mensaje y se detiene. No queda corriendo en segundo plano. Mas adelante veremos contenedores que se mantienen activos.

Ejecutar un servidor web con Nginx

Ahora vamos a hacer algo mas interesante: levantar un servidor web real con Nginx en un contenedor. Esto demuestra el poder de Docker — en un solo comando tendras un servidor web funcionando sin instalar nada.

bash
1# Ejecutar Nginx en un contenedor
2docker run -d -p 8080:80 --name mi-nginx nginx
3
4# Explicacion de las banderas:
5# -d           = modo "detached" (se ejecuta en segundo plano)
6# -p 8080:80   = mapea el puerto 8080 de tu maquina al puerto 80 del contenedor
7# --name       = le asigna un nombre al contenedor (en vez de uno aleatorio)
8# nginx        = nombre de la imagen a usar

Ahora abre tu navegador y ve a http://localhost:8080. Deberas ver la pagina de bienvenida de Nginx. ¡Acabas de levantar un servidor web en segundos!

Comandos basicos de Docker

Estos son los comandos fundamentales que usaras constantemente. Familiarizate con ellos:

Ver contenedores en ejecucion

bash
1# Listar contenedores activos
2docker ps
3
4# Listar todos los contenedores (incluyendo los detenidos)
5docker ps -a

Detener y eliminar contenedores

bash
1# Detener un contenedor
2docker stop mi-nginx
3
4# Iniciar un contenedor detenido
5docker start mi-nginx
6
7# Eliminar un contenedor (debe estar detenido primero)
8docker rm mi-nginx
9
10# Detener y eliminar en un solo paso (forzar)
11docker rm -f mi-nginx

Ver logs de un contenedor

bash
1# Ver los logs
2docker logs mi-nginx
3
4# Ver logs en tiempo real
5docker logs -f mi-nginx

Ejecutar comandos dentro de un contenedor

bash
1# Abrir una terminal interactiva dentro del contenedor
2docker exec -it mi-nginx bash
3
4# Ejecutar un comando especifico
5docker exec mi-nginx cat /etc/nginx/nginx.conf
Nota: El flag -it combina dos opciones: -i (interactivo, mantiene la entrada estandar abierta) y -t (asigna una pseudo-terminal). Juntos te permiten interactuar con el contenedor como si estuvieras dentro de el.

Ver imagenes descargadas

bash
1# Listar imagenes locales
2docker images
3
4# Eliminar una imagen
5docker rmi nginx

Practica guiada: ejecuta multiples contenedores

Para consolidar lo aprendido, vamos a ejecutar tres contenedores diferentes al mismo tiempo:

bash
1# Contenedor 1: Nginx en el puerto 8080
2docker run -d -p 8080:80 --name web-nginx nginx
3
4# Contenedor 2: Apache (httpd) en el puerto 8081
5docker run -d -p 8081:80 --name web-apache httpd
6
7# Contenedor 3: Un contenedor de Alpine Linux interactivo
8docker run -it --name mi-alpine alpine sh

Dentro de Alpine, puedes ejecutar comandos de Linux:

bash
1# Dentro del contenedor Alpine
2whoami
3cat /etc/os-release
4ls /
5exit

Ahora revisa todos tus contenedores:

bash
1# Ver todos los contenedores
2docker ps -a
3
4# Limpiar: detener y eliminar todos
5docker stop web-nginx web-apache
6docker rm web-nginx web-apache mi-alpine
Cuidado: El comando docker rm -f elimina un contenedor a la fuerza incluso si esta corriendo. Usalo con precaucion en ambientes de produccion, ya que no le da tiempo al proceso de terminar limpiamente.

Referencia rapida de comandos

Aqui tienes una tabla de referencia con los comandos que aprendimos:

ComandoDescripcion
docker run <imagen>Crear y ejecutar un contenedor
docker psListar contenedores activos
docker ps -aListar todos los contenedores
docker stop <nombre>Detener un contenedor
docker start <nombre>Iniciar un contenedor detenido
docker rm <nombre>Eliminar un contenedor
docker logs <nombre>Ver logs del contenedor
docker exec -it <nombre> bashEntrar al contenedor
docker imagesListar imagenes locales
docker rmi <imagen>Eliminar una imagen

Para la referencia completa de comandos, consulta la documentacion oficial de Docker.

Resumen y proximo articulo

En este primer articulo del curso hemos logrado:

  • Entender que es Docker y por que es esencial en el desarrollo moderno
  • Conocer la diferencia entre contenedores y maquinas virtuales
  • Instalar Docker en Windows, macOS y Linux
  • Ejecutar nuestro primer contenedor con hello-world
  • Levantar un servidor web Nginx en un contenedor
  • Aprender los comandos basicos: run, ps, stop, rm, logs, exec

En el proximo articulo (Parte 2 de 10) exploraremos las imagenes Docker en profundidad: como funcionan las capas, como usar Docker Hub para encontrar imagenes, y como gestionar imagenes en tu maquina.

¡Nos vemos en el siguiente articulo!

Share:
CV

Cristhian Villegas

Software Engineer specializing in Java, Spring Boot, Angular & AWS. Building scalable distributed systems with clean architecture.

Comments

Sign in to leave a comment

No comments yet. Be the first!

Related Articles