Windows: Cómo iniciar el arranque del sistema docker VM att

Estoy en una situación en la que necesito ejecutar docker en un servidor de compilación basado en Windows (normalmente trabajo con Arch/Debian Linux) y no puedo encontrar una manera de que la máquina virtual docker se inicie automáticamente en el arranque del sistema. En Linux sería un servicio, pero en Windows no parece ser el caso.

Seguí las instrucciones en https://docs.docker.com/engine/installation/windows/ y todo se ejecuta cuando inicio la máquina virtual acoplable con $ docker-machine create, pero ¿cómo tener esto como un servicio de Windows o similar?

El objetivo es poder usar imágenes de compilación de Docker, comenzar como contenedores y ejecutar pruebas e2e en ellos. Ya que estamos usando TeamCity para construir cualquier idea sobre cómo resolver esto con TeamCity también funcionaría, supongo.

Escribí una pequeña aplicación web hace algún tiempo que tiene una dependencia del sistema que solo está disponible para sistemas Unix, por lo que docker fue la elección natural (aunque tuve bastante éxito con vagrant ..)

Estoy usando Windows para el desarrollo y también estoy ejecutando esta aplicación web en su contenedor docker.

Así que me encontré con el mismo problema, "¿cómo iniciar esto en el arranque del sistema"?

Terminé con un pequeño archivo por lotes en mi directorio de inicio automático que contenía algo como las siguientes líneas:

docker-machine start defaultdocker run -d -p 8080:8080 -v //c/Users/%USERNAME%/somepath:/c/Users/%USERNAME%/somepath my/image --some.webapp.param=some-webapp-param-value

La primera llamada inicia la máquina virtual "predeterminada", aunque debería poder especificar una máquina virtual diferente allí. La segunda llamada ejecuta el contenedor docker "my / image", exponiendo el puerto 8080 al sistema host y montando" somepath " desde el directorio de inicio de mi usuario. Asegúrese de especificar el parámetro "- d " ya que ejecuta el contenedor "en segundo plano" (marque "docker run help help")

Después de eso, se puede acceder a mi aplicación web en la dirección ip de la "máquina virtual predeterminada"(en mi caso, que era 192.168.99.100, esto puede diferir en su sistema, puede verificar la salida al iniciar por primera vez este "terminal de inicio rápido de docker", ya que la dirección ip se registrará en la consola.)

Con eso puedo usar mi navegador como de costumbre, apuntarlo a "http://192.168.99.100:8080"y puedo trabajar con mi aplicación web.

Espero que ayude =)


editar

con dicho archivo por lotes ahora a mano, uno tiene 3 opciones:

  • coloque el archivo por lotes en su directorio de inicio automático (requiere sesiones de usuario interactivas, por lo que probablemente no sea adecuado para instancias de servidor..)

  • programe la ejecución del archivo por lotes a través del programador de tareas de Windows. allí puede configurar "ejecutar al iniciar la computadora" como desencadenador de la tarea. la tarea se ejecuta independientemente de una sesión interactiva (un usuario que ha iniciado sesión..) estar disponible o no

  • use un contenedor de servicio como NSSM para instalar el archivo por lotes como un servicio de Windows

Solo un pequeño complemento: Cuando inicia sus imágenes de docker y desea que se inicien en el arranque de docker (en este caso, la máquina virtual que ejecuta docker), puede usar la opción --restart always en el comando docker run. A continuación, puede quitar el comando docker run de los archivos por lotes. El contenedor debe iniciarse automáticamente después de que se inicie la máquina virtual.

He extendido Charlie Carver's respuesta.

Con el siguiente script puede especificar qué máquina boot2docker iniciar. Dado que la carpeta Docker Toolbox puede no estar en su ruta y es posible que no se establezcan todas las variables de entorno adecuadas, escribí algunas instrucciones de inicialización.

Coloque este script en un archivo bat y use una de las opciones citadas por Charlie para que se ejecute en el momento del arranque.

@echo offREM Set the name of the VM configuration where dockerd will be hostedset BOOT2DOCKER_VM=defaultset PATH=%PATH%;"C:\Program Files\Docker Toolbox\"REM Start the default machine (or any other machine)docker-machine start %BOOT2DOCKER_VM%REM Set the environment variables to use docker-machine and docker commands@FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd %BOOT2DOCKER_VM%') DO @%iREM Start the image detacheddocker run --detach --publish 5000:5000 foo-service

Si le importa que en caso de un error fatal dentro el contenedor, use la opción restart restart en el comando docker run.

También puede usar NSSM (Administrador de Servicios sin conexión)

Inicie NSSM desde una línea de comandos o ventanas de Powershell con el parámetro de instalación (nssm.instalación exe)

Esto iniciará la GUI, eneter los siguientes detalles;

  • Ruta de acceso: [DIRECTORIO de instalación de Docker]\Docker\resources\bin\docker-compose.exe
  • Directorio de inicio: [Ruta al contenedor de docker]
  • Argumentos: cualquier argumento que necesite para su contenedor docker (es decir, up)

Finalmente, ingrese el nombre de su servicio en el cuadro en la parte inferior de la GUI, luego puede probar con las otras opciones en las pestañas adicionales.