En este tema, exploraremos Docker Machine, una herramienta que durante muchos años fue la forma habitual de crear y gestionar hosts Docker, tanto en tu propio ordenador como en proveedores de nube. Aunque hoy en día se considera una herramienta heredada (legacy) y en desuso, entender qué hacía y por qué existió te ayudará a comprender cómo ha evolucionado el ecosistema de Docker hasta llegar a las soluciones modernas que usamos actualmente.

Objetivos de Aprendizaje

  • Comprender qué es Docker Machine y cuál fue su papel histórico.
  • Aprender cómo Docker Machine aprovisionaba hosts Docker en local y en la nube.
  • Conocer los comandos básicos: docker-machine create, ls, ssh y env.
  • Entender por qué está en desuso y qué alternativas modernas lo han reemplazado.

¿Qué es Docker Machine?

Docker Machine es una herramienta de línea de comandos que permitía crear, configurar y gestionar máquinas (hosts) capaces de ejecutar el motor de Docker. Su tarea principal era automatizar el aprovisionamiento de un servidor con Docker ya instalado, listo para usar.

Sus funciones principales eran:

  • Aprovisionar hosts Docker: instalar el motor de Docker en una máquina virtual local o en un servidor remoto en la nube.
  • Configurar el cliente local: ajustar tu terminal para que los comandos docker apuntasen al host remoto que habías creado.
  • Gestionar el ciclo de vida: arrancar, parar, reiniciar y eliminar esas máquinas desde un único punto.

Es importante distinguir dos conceptos:

  • El cliente Docker (el comando docker que escribes en tu terminal).
  • El motor Docker (el demonio que realmente construye y ejecuta los contenedores).

Docker Machine se encargaba de instalar el motor en un host y de conectar tu cliente con ese motor.

El Papel Histórico de Docker Machine

Para entender por qué Docker Machine fue tan importante, hay que situarse en sus orígenes. En los primeros años de Docker, el motor solo funcionaba de forma nativa en Linux. Esto suponía un problema para los desarrolladores que usaban Windows o macOS, ya que sus sistemas operativos no podían ejecutar contenedores Linux directamente.

La solución de aquella época era:

  1. Crear una pequeña máquina virtual Linux (normalmente con VirtualBox).
  2. Instalar el motor de Docker dentro de esa máquina virtual.
  3. Conectar el cliente Docker de tu sistema operativo con el motor que corría en la máquina virtual.

Docker Machine automatizaba todos esos pasos con un solo comando. Por eso se convirtió en una pieza fundamental del flujo de trabajo de muchos equipos entre 2015 y 2018, aproximadamente.

Aprovisionamiento Mediante Drivers

Docker Machine usaba el concepto de driver (controlador) para saber dónde y cómo crear el host. Cada driver corresponde a una plataforma distinta.

Driver Dónde crea el host
virtualbox Una máquina virtual local usando VirtualBox.
amazonec2 Una instancia EC2 en Amazon Web Services.
azure Una máquina virtual en Microsoft Azure.
digitalocean Un droplet en DigitalOcean.
generic Un servidor remoto ya existente, vía SSH.

Esta arquitectura basada en drivers era lo que permitía usar la misma herramienta para crear hosts tanto en tu portátil como en la nube.

Comandos Básicos de Docker Machine

A continuación veremos los comandos más habituales. Recuerda que el ejecutable es docker-machine (con guion), distinto del comando docker.

Crear un Host Local

Para crear un host Docker en una máquina virtual local con VirtualBox:

docker-machine create --driver virtualbox mi-host-local

Desglosemos cada parte:

  • docker-machine create: la subcomando que crea una nueva máquina.
  • --driver virtualbox: indica que queremos usar VirtualBox como plataforma de virtualización local.
  • mi-host-local: el nombre que le damos a la máquina para poder referirnos a ella después.

Este comando descargaría una imagen ligera de Linux, crearía la máquina virtual, instalaría el motor de Docker y generaría los certificados de seguridad para la comunicación.

Crear un Host en la Nube

Para crear un host en Amazon EC2, el comando incluiría parámetros específicos del proveedor:

docker-machine create \
  --driver amazonec2 \
  --amazonec2-access-key AKIAEJEMPLOFICTICIO \
  --amazonec2-secret-key claveSecretaFicticia12345 \
  --amazonec2-region eu-west-1 \
  mi-host-nube

Explicación de los parámetros:

  • --driver amazonec2: usamos el driver de Amazon EC2.
  • --amazonec2-access-key y --amazonec2-secret-key: las credenciales de acceso a AWS (aquí usamos valores ficticios; nunca compartas tus credenciales reales).
  • --amazonec2-region eu-west-1: la región donde se creará la instancia.
  • mi-host-nube: el nombre de la máquina.

Listar los Hosts

Para ver todas las máquinas que has creado:

docker-machine ls

La salida tendría un aspecto parecido a este:

NAME            ACTIVE   DRIVER       STATE     URL                         SWARM
mi-host-local   *        virtualbox   Running   tcp://192.168.99.100:2376
mi-host-nube    -        amazonec2    Running   tcp://203.0.113.10:2376

Cada columna nos informa de:

  • NAME: el nombre de la máquina.
  • ACTIVE: un asterisco (*) marca la máquina activa actualmente para tu cliente.
  • DRIVER: el driver con el que se creó.
  • STATE: si está en ejecución (Running) o detenida (Stopped).
  • URL: la dirección por la que tu cliente se comunica con el motor.

Conectarse por SSH

Para entrar dentro de una máquina y ejecutar comandos en su sistema operativo:

docker-machine ssh mi-host-local

Este comando abre una sesión SSH directamente en la máquina, sin que tengas que gestionar manualmente claves ni direcciones IP. Es útil para depurar o inspeccionar el host por dentro.

Configurar el Entorno con env

Este es quizás el comando más característico de Docker Machine. Sirve para que tu comando docker local apunte al motor de una máquina concreta:

docker-machine env mi-host-local

La salida muestra una serie de variables de entorno:

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/usuario/.docker/machine/machines/mi-host-local"
export DOCKER_MACHINE_NAME="mi-host-local"
# Ejecuta este comando para configurar tu shell:
# eval $(docker-machine env mi-host-local)

Explicación:

  • DOCKER_HOST: indica al cliente la dirección del motor remoto.
  • DOCKER_TLS_VERIFY y DOCKER_CERT_PATH: configuran la comunicación segura mediante certificados.
  • eval $(docker-machine env mi-host-local): este comando aplica todas esas variables en tu terminal actual. A partir de ese momento, cualquier docker run, docker ps, etc., se ejecutará en mi-host-local.

Para volver a usar el motor por defecto de tu equipo, ejecutarías:

eval $(docker-machine env -u)

El parámetro -u (unset) elimina las variables de entorno y restaura la configuración original.

¿Por Qué Está en Desuso?

Docker Machine fue oficialmente marcado como proyecto heredado (legacy) y dejó de recibir mantenimiento activo. Las razones principales son:

  • Docker dejó de necesitar máquinas virtuales intermedias en Windows y macOS gracias a integraciones nativas más modernas.
  • Aparecieron herramientas más completas y mejor mantenidas para cada caso de uso concreto.
  • La gestión de hosts en la nube se cubre mejor con las herramientas propias de cada proveedor o con soluciones de infraestructura como código.

En resumen: Docker Machine resolvió un problema real de su época, pero esa época ya pasó.

Alternativas Modernas

La siguiente tabla resume qué herramienta usar hoy según lo que necesites:

Necesidad Alternativa moderna
Usar Docker en Windows o macOS Docker Desktop (integración nativa con WSL2).
Crear hosts Docker en la nube Herramientas del proveedor (consola, CLI) o Terraform.
Aprovisionar servidores remotos Infraestructura como código (Ansible, Terraform).
Orquestar muchos contenedores Kubernetes o Docker Swarm.

Errores Comunes y Consejos

  • Confundir docker-machine con docker: son comandos distintos. docker-machine gestiona hosts; docker gestiona contenedores e imágenes.
  • Olvidar ejecutar eval $(docker-machine env ...): si lo olvidas, tus comandos docker apuntarán al motor equivocado. Es una fuente muy común de confusión.
  • Usar Docker Machine en proyectos nuevos: no lo hagas. Al estar en desuso, no recibe parches de seguridad ni soporte. Utiliza siempre las alternativas modernas.
  • Consejo: si encuentras tutoriales o proyectos antiguos que usan Docker Machine, considéralos referencias históricas. El concepto que enseñan (separar cliente y motor) sigue siendo válido, pero la herramienta concreta no.

Ejercicios

Ejercicio 1

Explica con tus propias palabras qué problema resolvía Docker Machine para los usuarios de Windows y macOS en los primeros años de Docker.

Ejercicio 2

Indica qué hace cada uno de estos comandos:

  1. docker-machine create --driver virtualbox pruebas
  2. docker-machine ls
  3. eval $(docker-machine env pruebas)

Ejercicio 3

Para cada una de estas necesidades, indica qué alternativa moderna usarías en lugar de Docker Machine:

  1. Ejecutar contenedores Linux en un portátil con Windows.
  2. Desplegar infraestructura repetible en la nube.
  3. Orquestar decenas de contenedores en producción.

Soluciones

Solución al Ejercicio 1

En los primeros años, el motor de Docker solo corría de forma nativa en Linux. Los usuarios de Windows y macOS no podían ejecutar contenedores directamente. Docker Machine resolvía esto creando automáticamente una máquina virtual Linux con el motor de Docker instalado y conectando el cliente local del usuario con ese motor, de modo que la experiencia fuese casi transparente.

Solución al Ejercicio 2

  1. Crea una máquina virtual local llamada pruebas con VirtualBox y le instala el motor de Docker.
  2. Lista todas las máquinas Docker creadas, mostrando su estado, driver y URL.
  3. Configura la terminal actual para que el comando docker apunte al motor de la máquina pruebas.

Solución al Ejercicio 3

  1. Docker Desktop, que integra Docker de forma nativa con WSL2 en Windows.
  2. Infraestructura como código con herramientas como Terraform o Ansible.
  3. Kubernetes (o Docker Swarm para casos más sencillos).

Conclusión

En esta lección hemos conocido Docker Machine, una herramienta clave en la historia de Docker que automatizaba la creación de hosts en local y en la nube mediante drivers, y que conectaba el cliente con el motor a través de comandos como create, ls, ssh y env. Hemos visto también por qué hoy se considera una herramienta en desuso y qué alternativas modernas la han sustituido. Entender esta evolución nos prepara para la siguiente lección, donde compararemos dos pilares del ecosistema actual: Docker Compose vs. Kubernetes.

© Copyright 2026. Todos los derechos reservados