Publicado en

Instalación de Docker y primeros pasos: guía práctica

portada

Docker, tiene múltiples herramientas en función del sistema operativo anfitrión que usemos.

Requisitos previos

Para cada sistema operativo hay unos requisitos mínimos que debe completar nuestro equipo. Docker tiene versiones para los tres sistemas operativos principales, aunque el entorno natural de Docker es Linux, ya que los contenedores utilizan directamente el núcleo del sistema anfitrión.

  • Linux (Ubuntu / Debian): kernel 3.10 o superior, usuario con permisos sudo.
  • Windows: Windows 10 u 11 de 64 bits, con WSL2 habilitado (subsistema de Linux para Windows).
  • Mac: macOS 12 Monterey o superior, tanto con chip Intel como con Apple Silicon (M1/M2/M3).

En este artículo nos centraremos en la instalación sobre Ubuntu / Debian, que es el entorno más habitual en servidores y en el mundo DevOps. Para Windows y Mac, Docker ofrece un instalador gráfico llamado Docker Desktop que simplifica el proceso enormemente.

Instalación en Linux — Ubuntu / Debian

Docker no está disponible directamente en los repositorios oficiales de Ubuntu, por lo que el primer paso es añadir el repositorio oficial de Docker. Seguiremos el proceso recomendado por la propia documentación de Docker.

Paso 1 — Actualizar el sistema e instalar dependencias

Abrimos un terminal y ejecutamos los siguientes comandos para asegurarnos de que el sistema está actualizado y de que tenemos las herramientas necesarias para añadir el repositorio de Docker:

sudo apt update
sudo apt install ca-certificates curl gnupg

Paso 2 — Añadir la clave GPG oficial de Docker

Para verificar la autenticidad de los paquetes que descarguemos, necesitamos añadir la clave GPG del repositorio oficial de Docker:

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

Paso 3 — Añadir el repositorio de Docker

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Paso 4 — Instalar Docker

Con el repositorio ya configurado, instalamos Docker y sus componentes principales:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • docker-ce: el motor principal de Docker (Community Edition).
  • docker-ce-cli: la herramienta de línea de comandos para interactuar con Docker.
  • containerd.io: el runtime que gestiona el ciclo de vida de los contenedores.
  • docker-buildx-plugin: plugin para construir imágenes.
  • docker-compose-plugin: plugin para gestionar múltiples contenedores (lo veremos en el próximo artículo).

Paso 5 — Verificar la instalación

Comprobamos que Docker se ha instalado correctamente:

sudo docker --version

Deberíamos ver algo similar a: Docker version 26.x.x, build xxxxxxx

Paso 6 — Ejecutar Docker sin sudo (recomendado)

Por defecto, los comandos de Docker requieren privilegios de administrador. Para poder usarlo sin escribir sudo en cada comando, añadimos nuestro usuario al grupo docker:

sudo usermod -aG docker $USER
newgrp docker

Si el cambio no se aplica de inmediato, cierra la sesión y vuelve a iniciarla. A partir de ese momento podrás ejecutar Docker sin necesidad de sudo.

Instalación en Windows y Mac — Docker Desktop

Tanto en Windows como en Mac, la forma más sencilla de instalar Docker es mediante Docker Desktop, una aplicación gráfica que incluye el motor de Docker, una interfaz visual para gestionar contenedores e imágenes, y todas las herramientas de línea de comandos.

  • Windows: Docker Desktop utiliza WSL2 como backend, lo que permite ejecutar contenedores Linux de forma nativa. Durante la instalación, el propio asistente guía la configuración de WSL2 si no está habilitado.
  • Mac con Apple Silicon (M1/M2/M3): Docker Desktop incluye compatibilidad nativa con la arquitectura ARM. En algunos casos puede ser necesario instalar Rosetta 2 para imágenes que solo tienen versión x86.

El instalador está disponible en la web oficial de Docker: docker.com/products/docker-desktop. El proceso es el habitual en ambas plataformas: descarga, ejecuta el instalador y sigue los pasos del asistente.

Primer contenedor: Hello World

Una vez instalado Docker, el primer paso es ejecutar el contenedor de prueba oficial para verificar que todo funciona correctamente:

docker run hello-world

¿Qué ocurre exactamente cuando ejecutamos este comando? El proceso es el siguiente:

  1. Docker busca la imagen hello-world en el sistema local.
  2. Al no encontrarla, la descarga automáticamente desde Docker Hub (el registro público de imágenes de Docker).
  3. Crea un contenedor a partir de esa imagen y lo ejecuta.
  4. El contenedor muestra un mensaje de confirmación en pantalla y se detiene.

Este sencillo ejemplo ilustra perfectamente el flujo de trabajo de Docker: imagen → contenedor → ejecución. Recordemos la analogía del artículo anterior: la imagen es la clase, y el contenedor es la instancia de esa clase.

Comandos esenciales de Docker

Con Docker instalado y funcionando, vamos a repasar los comandos que utilizaremos de forma habitual. No es necesario memorizarlos todos de golpe; con la práctica del día a día irán surgiendo de forma natural.

Gestión de imágenes

  • docker pull <imagen> — descarga una imagen de Docker Hub sin ejecutarla.
  • docker images — lista todas las imágenes descargadas en el sistema.
  • docker rmi <imagen> — elimina una imagen del sistema.

Gestión de contenedores

  • docker run <imagen> — crea y arranca un contenedor a partir de una imagen.
  • docker run -d <imagen> — ejecuta el contenedor en segundo plano (detached mode).
  • docker run -it <imagen> bash — entra en el contenedor de forma interactiva con una terminal.
  • docker run -p 8080:80 <imagen> — mapea el puerto 80 del contenedor al puerto 8080 del sistema anfitrión.
  • docker run --name mi-contenedor <imagen> — asigna un nombre personalizado al contenedor.
  • docker ps — muestra los contenedores que están en ejecución.
  • docker ps -a — muestra todos los contenedores, incluidos los que están parados.
  • docker stop <id o nombre> — detiene un contenedor en ejecución.
  • docker start <id o nombre> — arranca un contenedor que estaba parado.
  • docker rm <id o nombre> — elimina un contenedor (debe estar parado).
  • docker logs <id o nombre> — muestra los logs de un contenedor.

Ejemplo práctico: servidor Nginx con Docker

Nada mejor que un ejemplo real para consolidar lo aprendido. Vamos a levantar un servidor web Nginx completamente funcional con un solo comando:

docker run -d -p 8080:80 --name mi-nginx nginx

Desglosemos el comando:

  • -d — ejecuta el contenedor en segundo plano para no bloquear el terminal.
  • -p 8080:80 — redirige el puerto 80 del contenedor (donde escucha Nginx) al puerto 8080 de nuestra máquina.
  • --name mi-nginx — asigna el nombre mi-nginx al contenedor para poder referenciarlo fácilmente.
  • nginx — nombre de la imagen oficial de Nginx en Docker Hub.

Si abrimos el navegador y accedemos a http://localhost:8080, veremos la página de bienvenida de Nginx. Un servidor web completamente funcional, listo en segundos, sin haber instalado nada en el sistema más allá de Docker.

Cuando queramos detenerlo y eliminarlo:

docker stop mi-nginx
docker rm mi-nginx

Esta es precisamente una de las grandes ventajas de Docker que comentábamos en el artículo anterior: podemos levantar servicios complejos, usarlos y eliminarlos sin dejar rastro en el sistema anfitrión.