Luego de de esta larga selección de datos hemos podido resolver este inconveniente que tienen muchos de nuestros usuarios. Te compartimos la respuesta y nuestro deseo es resultarte de gran ayuda.
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 elvirtualbox
controlador para crear máquinas locales adicionales. -
Docker Desktop para Windows – Puedes usar
docker-machine create
con elhyperv
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
-
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.
-
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
-
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 nombredefault
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.
-
-
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
-
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 eldocker-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)" -
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 elenv
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.
-
Usar
docker run
para descargar y ejecutarbusybox
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
-
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
-
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 default
y 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.
-
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. -
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 siguienteDOCKER
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.
-
-
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
Si piensas que te ha resultado provechoso nuestro post, agradeceríamos que lo compartas con el resto programadores y nos ayudes a extender este contenido.