Echemos un vistazo al uso docker-machine para crear, usar y administrar un host Docker dentro de una máquina virtual local.

Información de requisitos previos

Con el advenimiento de Docker Desktop para Mac y Docker Desktop para Windows como reemplazos para Caja de herramientas de Docker, le recomendamos que los utilice para sus flujos de trabajo principales de Docker. Puede usar estas aplicaciones para ejecutar Docker de forma nativa en su sistema local sin usar Docker Machine en absoluto. (Ver Docker Desktop para Mac frente a Docker Toolbox para obtener una explicación en el lado de Mac).

Por ahora, sin embargo, si desea crear múltiple máquinas locales, aún necesita Docker Machine para crear y administrar máquinas para la experimentación de múltiples nodos. Tanto Docker Desktop para Mac como Docker Desktop para Windows incluyen la versión más reciente de Docker Machine, por lo que cuando instala cualquiera de estos, obtiene docker-machine.

Las nuevas soluciones vienen con sus propias soluciones de virtualización nativas en lugar de Oracle VirtualBox, así que tenga en cuenta las siguientes consideraciones cuando utilice Machine para crear máquinas virtuales locales.

  • Docker Desktop para Mac – Puedes usar docker-machine create con el virtualbox controlador para crear máquinas locales adicionales.

  • Docker Desktop para Windows – Puedes usar docker-machine create con el hyperv controlador para crear máquinas locales adicionales.

Si está utilizando Docker Desktop para Windows

Usos de Docker Desktop para Windows Microsoft Hyper-V para la virtualización y Hyper-V no es compatible con Oracle VirtualBox. Por lo tanto, no puede ejecutar las dos soluciones simultáneamente. Pero todavía puedes usar docker-machine para crear más máquinas virtuales locales mediante el controlador de Microsoft Hyper-V.

Los requisitos previos son:

  • Tener Docker Desktop para Windows instalado y en ejecución (lo que requiere que la virtualización y Hyper-V estén habilitados, como se describe en Lo que debe saber antes de instalar Docker Desktop para Windows).

  • Configure el controlador de Hyper-V para usar un conmutador de red virtual externo Consulte el tema Controlador de máquina Docker para Microsoft Hyper-V, que incluye un ejemplo de cómo hacer esto.

Si está utilizando Docker Desktop para Mac

Usos de Docker Desktop para Mac HyperKit, una solución de virtualización macOS ligera construida sobre la Hypervisor.framework.

Actualmente, no hay docker-machine create controlador para HyperKit, así que use el virtualbox controlador para crear máquinas locales. (Consulte el controlador de la máquina Docker para Oracle VirtualBox). Puede ejecutar HyperKit y Oracle VirtualBox en el mismo sistema. Para obtener más información, consulte Docker Desktop para Mac frente a Docker Toolbox.

  • Asegúrate de tener el último VirtualBox instalado correctamente en su sistema (ya sea como parte de una instalación anterior de Toolbox o instalación manual).

Si está utilizando Docker Toolbox

Docker Desktop para Mac y Docker Desktop para Windows requieren versiones más recientes de sus respectivos sistemas operativos, por lo que los usuarios con versiones anteriores del sistema operativo deben usar Docker Toolbox.

  • Si está utilizando Docker Toolbox en Mac o en una versión anterior del sistema Windows (sin Hyper-V), utilice el virtualbox controlador para crear una máquina local basada en Oracle VirtualBox. (Consulte el controlador de la máquina Docker para Oracle VirtualBox).

  • Si está usando Docker Toolbox en un sistema Windows que tiene Hyper-V pero no puede ejecutar Docker Desktop para Windows (por ejemplo, Windows 8 Pro), debe usar el hyperv controlador para crear máquinas locales. (Consulte el controlador de la máquina Docker para Microsoft Hyper-V).

  • Asegúrate de tener el último VirtualBox correctamente instalado en su sistema. Si usaste Caja de herramientas o Docker Desktop para Windows para instalar Docker Machine, VirtualBox se instala automáticamente.

  • Si usó la Terminal de inicio rápido para iniciar su primera máquina y configuró su entorno de terminal para que apunte a ella, se creó automáticamente una máquina predeterminada. Si es así, aún puede seguir estos pasos, pero cree otra máquina y asígnele un nombre diferente a default.

Use Machine para ejecutar contenedores Docker

Para ejecutar un contenedor de Docker, debe:

  • crear una máquina virtual Docker nueva (o iniciar una existente)
  • cambie su entorno a su nueva máquina virtual
  • usar el cliente de Docker para crear, cargar y administrar contenedores

Una vez que crea una máquina, puede reutilizarla tantas veces como desee. Como cualquier VM VirtualBox, mantiene su configuración entre usos.

Los ejemplos aquí muestran cómo crear e iniciar una máquina, ejecutar comandos de Docker y trabajar con contenedores.

Crea una maquina

  1. Abra un shell de comandos o una ventana de terminal.

    Estos ejemplos de comandos muestran un shell Bash. Para un shell diferente, como C Shell, los mismos comandos son los mismos excepto donde se indique.

  2. Usar docker-machine ls para enumerar las máquinas disponibles.

    En este ejemplo, todavía no se ha creado ninguna máquina.

     $ docker-machine ls
     NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS
    
  3. Crea una máquina.

    Ejecutar el docker-machine create comando, pase el controlador apropiado al --driver marca y proporciona un nombre de máquina. Si esta es su primera máquina, asígnele un nombre default como se muestra en el ejemplo. Si ya tiene una máquina “predeterminada”, elija otro nombre para esta nueva máquina.

    • Si está utilizando Toolbox en Mac, Toolbox en sistemas Windows anteriores sin Hyper-V o Docker Desktop para Mac, utilice virtualbox como controlador, como se muestra en este ejemplo. (La referencia del controlador Docker Machine VirtualBox está aquí.) (Consulte los requisitos previos anteriores para obtener más información).

    • En Docker Desktop para sistemas Windows que admiten Hyper-V, use el hyperv controlador como se muestra en la referencia del controlador de Microsoft Hyper-V de la máquina Docker y siga el ejemplo, que muestra cómo usar un conmutador de red externo y proporciona los indicadores para el comando completo. (Consulte los requisitos previos anteriores para obtener más información).

        $ docker-machine create --driver virtualbox default
        Running pre-create checks...
        Creating machine...
        (staging) Copying /Users/ripley/.docker/machine/cache/boot2docker.iso to /Users/ripley/.docker/machine/machines/default/boot2docker.iso...
        (staging) Creating VirtualBox VM...
        (staging) Creating SSH key...
        (staging) Starting the VM...
        (staging) Waiting for an IP...
        Waiting for machine to be running, this may take a few minutes...
        Machine is running, waiting for SSH to be available...
        Detecting operating system of created instance...
        Detecting the provisioner...
        Provisioning with boot2docker...
        Copying certs to the local machine directory...
        Copying certs to the remote machine...
        Setting Docker configuration on the remote daemon...
        Checking connection to Docker...
        Docker is up and running!
        To see how to connect Docker to this machine, run: docker-machine env default
      

      Este comando descarga una distribución ligera de Linux (boot2docker) con el demonio de Docker instalado, y crea e inicia una VM VirtualBox con Docker en ejecución.

  4. Enumere las máquinas disponibles nuevamente para ver su máquina recién acuñada.

     $ docker-machine ls
     NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER   ERRORS
     default   *        virtualbox   Running   tcp://192.168.99.187:2376           v1.9.1
    
  5. Obtenga los comandos de entorno para su nueva máquina virtual.

    Como se señaló en la salida de la docker-machine create comando, debe decirle a Docker que hable con la nueva máquina. Puedes hacer esto con el docker-machine env mando.

     $ docker-machine env default
     export DOCKER_TLS_VERIFY="1"
     export DOCKER_HOST="tcp://172.16.62.130:2376"
     export DOCKER_CERT_PATH="/Users//.docker/machine/machines/default"
     export DOCKER_MACHINE_NAME="default"
     # Run this command to configure your shell:
     # eval "$(docker-machine env default)"
    
  6. Conecte su caparazón a la nueva máquina.

     $ eval "$(docker-machine env default)"
    

    Nota: Si está utilizando fish, o un shell de Windows como Powershell /cmd.exe, el método anterior no funciona como se describe. En cambio, vea el env la documentación del comando para aprender a configurar las variables de entorno para su shell.

    Esto establece las variables de entorno para el shell actual que lee el cliente de Docker y que especifican la configuración de TLS. Debe hacer esto cada vez que abra un nuevo shell o reinicie su máquina. (Vea también, cómo desarmar variables de entorno en el shell actual).

    Ahora puede ejecutar comandos de Docker en este host.

Ejecute contenedores y experimente con los comandos de la máquina

Ejecute un contenedor con docker run para verificar su configuración.

  1. Usar docker run para descargar y ejecutar busybox con un simple comando ‘echo’.

     $ docker run busybox echo hello world
     Unable to find image 'busybox' locally
     Pulling repository busybox
     e72ac664f4f0: Download complete
     511136ea3c5a: Download complete
     df7546f9f060: Download complete
     e433a6c5b276: Download complete
     hello world
    
  2. Consigue el IP de host Dirección.

    Todos los puertos expuestos están disponibles en la dirección IP del host de Docker, que puede obtener utilizando el docker-machine ip mando:

     $ docker-machine ip default
     192.168.99.100
    
  3. Ejecutar un Nginx servidor web en un contenedor con el siguiente comando:

     $ docker run -d -p 8000:80 nginx
    

    Cuando termine de extraer la imagen, puede acceder al servidor en el puerto 8000 en la dirección IP que le proporcionó docker-machine ip. Por ejemplo:

         $ curl $(docker-machine ip default):8000
         
         
         
         Welcome to nginx!
         
         
         
         
         

    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

    For online documentation and support, refer to nginx.org.
    Commercial support is available at nginx.com.

    Thank you for using nginx.

Puede crear y administrar tantas máquinas virtuales locales que ejecuten Docker como lo permitan sus recursos locales; solo corre docker-machine create de nuevo. Todas las máquinas creadas aparecen en la salida de docker-machine ls.

Iniciar y detener máquinas

Si ha terminado de usar un host por el momento, puede detenerlo con docker-machine stop y luego empezar de nuevo con docker-machine start.

    $ docker-machine stop default
    $ docker-machine start default

Operar en máquinas sin especificar el nombre

Algunos docker-machine Los comandos asumen que la operación dada debe ejecutarse en una máquina llamada default (si existe) si no se especifica un nombre de máquina. Porque usar una VM local llamada default es un patrón tan común, esto le permite ahorrar algo de escritura en los comandos de Máquina usados ​​con más frecuencia.

Por ejemplo:

      $ docker-machine stop
      Stopping "default"....
      Machine "default" was stopped.

      $ docker-machine start
      Starting "default"...
      (default) Waiting for an IP...
      Machine "default" was started.
      Started machines may have new IP addresses.  You may need to re-run the `docker-machine env` command.

      $ eval $(docker-machine env)

      $ docker-machine ip
        192.168.99.100

Los comandos que siguen este estilo son:

    - `docker-machine config`
    - `docker-machine env`
    - `docker-machine inspect`
    - `docker-machine ip`
    - `docker-machine kill`
    - `docker-machine provision`
    - `docker-machine regenerate-certs`
    - `docker-machine restart`
    - `docker-machine ssh`
    - `docker-machine start`
    - `docker-machine status`
    - `docker-machine stop`
    - `docker-machine upgrade`
    - `docker-machine url`

Para máquinas que no sean defaulty comandos distintos de los enumerados anteriormente, siempre debe especificar el nombre explícitamente como argumento.

Desarmar variables de entorno en el shell actual

Es posible que desee utilizar el shell actual para conectarse a un motor de Docker diferente. Este sería el caso si, por ejemplo, está ejecutar Docker Desktop para Mac al mismo tiempo que Docker Toolbox y desea hablar con dos motores Docker diferentes. En ambos escenarios, tiene la opción de cambiar el entorno para que el shell actual se comunique con diferentes motores de Docker.

  1. Correr env|grep DOCKER para comprobar si las variables de entorno de DOCKER están configuradas.

    $ env | grep DOCKER
    DOCKER_HOST=tcp://192.168.99.100:2376
    DOCKER_MACHINE_NAME=default
    DOCKER_TLS_VERIFY=1
    DOCKER_CERT_PATH=/Users//.docker/machine/machines/default
    

    Si devuelve salida (como se muestra en el ejemplo), puede desarmar el DOCKER Variables de entorno.

  2. Utilice uno de los dos métodos para desarmar las variables de entorno de DOCKER en el shell actual.

    • Ejecutar el unset comando en lo siguiente DOCKER Variables de entorno.

      unset DOCKER_TLS_VERIFY
      unset DOCKER_CERT_PATH
      unset DOCKER_MACHINE_NAME
      unset DOCKER_HOST
      
    • Alternativamente, ejecute un comando de acceso directo docker-machine env -u para mostrar el comando que necesita ejecutar para desarmar todas las variables DOCKER:

      $ docker-machine env -u
      unset DOCKER_TLS_VERIFY
      unset DOCKER_HOST
      unset DOCKER_CERT_PATH
      unset DOCKER_MACHINE_NAME
      # Run this command to configure your shell:
      # eval $(docker-machine env -u)
      

      Correr eval $(docker-machine env -u) para desarmar todas las variables DOCKER en el shell actual.

  3. Ahora, después de ejecutar cualquiera de los comandos anteriores, este comando no debería devolver ningún resultado.

     $ env | grep DOCKER
    

    Si está ejecutando Docker Desktop para Mac, puede ejecutar los comandos de Docker para hablar con el motor de Docker instalado con esa aplicación.

    Ya que Docker Desktop para Windows no es compatible con Toolbox, este escenario no es aplicable porque Docker Desktop para Windows usa Docker Engine y Docker Machine que vienen con él.

Iniciar máquinas locales en el inicio

Para asegurarse de que el cliente de Docker se configure automáticamente al comienzo de cada sesión de shell, puede incrustar eval $(docker-machine env default) en sus perfiles de shell, agregándolo a la ~/.bash_profile archivo o el archivo de configuración equivalente para su shell. Sin embargo, esto falla si una máquina llamada default no está funcionando. Puede configurar su sistema para iniciar el default máquina automáticamente. El siguiente ejemplo muestra cómo hacer esto en macOS.

Crea un archivo llamado com.docker.machine.default.plist en el ~/Library/LaunchAgents/ directorio, con el siguiente contenido:




    
        EnvironmentVariables
        
            PATH
            /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
        
        Label
        com.docker.machine.default
        ProgramArguments
        
            /usr/local/bin/docker-machine
            start
            default
        
        RunAtLoad
        
    

Puedes cambiar el default string arriba para hacer esto LaunchAgent Encienda una máquina diferente.

A donde ir después

  • Aprovisione varios hosts de Docker en su proveedor de nube
  • Comprender los conceptos de la máquina
  • Lista de páginas de referencia de Docker Machine para todos los controladores compatibles
  • Controlador de máquina Docker para Oracle VirtualBox
  • Controlador de máquina Docker para Microsoft Hyper-V
  • docker-machine referencia de línea de comando

estibador, máquina, caja virtual, local