Puede ejecutar Docker de forma nativa en el nuevo espacio de usuario bash de Windows 10 (Ubuntu)?

Mi entendimiento era que la principal limitación de ejecutar docker en otros sistemas operativos eran los contenedores de red de Linux que lo hacían posible. (Ciertamente para Mac).

Recientemente Microsoft anunció una beta de a Ubuntu linux modo de usuario se ejecuta de forma nativa en Windows 10. Esto puede ejecutar binarios compilados en formato ELF en Windows (a diferencia de cygwin, que requiere una compilación.)

Mi pregunta es: Puede ejecutar Docker de forma nativa en el nuevo espacio de usuario bash de Windows 10 (Ubuntu)?

Puede usar Docker Desktop para Windows como motor y Docker para Linux como cliente en WSL en Ubuntu / Debian en Windows. Conéctelos a través de TCP.

Instalar Docker Desktop para Windows: https://hub.docker.com/editions/community/docker-ce-desktop-windowsSi desea utilizar Contenedores de Windows en lugar de contenedores de Linux, ambos contenedores de tipo pueden ser administrados por el cliente docker de Linux en el espacio de usuario de bash.

Desde la versión 17.03.1-ce-win12 (12058) debe verificar Exponer demonio en tcp: / / localhost: 2375 sin TLS para permitir que el cliente Docker de Linux continúe comunicándose con el demonio Docker de Windows por TCP

Siga estos pasos:

cdwget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.tgztar -xzvf docker-*.tgzcd docker./docker -H tcp://0.0.0.0:2375 ps

o

env DOCKER_HOST=tcp://0.0.0.0:2375 ./docker ps

Para que sea permanente:

mkdir ~/binmv ~/docker/docker ~/bin

Agregue las variables correspondientes a .bashrc

export DOCKER_HOST=tcp://0.0.0.0:2375export PATH=$PATH:~/bin

Por supuesto, puede instalar docker-compose

sudo -icurl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose

O usando python pip

sudo apt-get install python-pip bash-completionsudo pip install docker-compose

Y finalización de Bash. La mejor parte:

sudo -iapt-get install bash-completioncurl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker > /etc/bash_completion.d/dockercurl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

Lo probé usando la versión 2.1.0.1 (37199) de Docker Desktop usando Hyper-V:

$ docker versionClient: Docker Engine - Community Version:           19.03.1 API version:       1.40 Go version:        go1.12.5 Git commit:        74b1e89e8a Built:             Thu Jul 25 21:17:37 2019 OS/Arch:           linux/amd64 Experimental:      falseServer: Docker Engine - Community Engine:  Version:          19.03.1  API version:      1.40 (minimum version 1.12)  Go version:       go1.12.5  Git commit:       74b1e89  Built:            Thu Jul 25 21:17:52 2019  OS/Arch:          linux/amd64  Experimental:     false containerd:  Version:          v1.2.6  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb runc:  Version:          1.0.0-rc8  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f docker-init:  Version:          0.18.0  GitCommit:        fec3683Look both client and server say **OS/Arch: linux/amd64**

Volumen

Tenga cuidado al agregar volúmenes. Camino C:\dir será visible como /mnt/c/dir en WSL y as /c/dir/ por docker engine. Puedes superarlo de forma permanente:

sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"

Debe salir y volver a cargar WSL después de realizar el cambio a WSL.conf para que WSL lea los cambios en el lanzamiento.

ACTUALIZAR

de: Novedades de la línea de comandos en Windows 10 versión 1803

Sockets Unix Los sockets Unix no eran compatibles con Windows, y ahora lo son. También puede comunicarse a través de sockets Unix entre Windows y WSL. Una de las mejores cosas de esto es que permite a WSL ejecutar el cliente Docker de Linux para interactuar con el demonio Docker que se ejecuta en Windows.

ACTUALIZAR

Este script y el uso de sockets Unix se incluyeron en Pengwin's pengwin-configuración.

Respecto

A partir de ahora (abril de 2016) la respuesta es:

Todavía no lo sabemos (pero probablemente no).

Hecho

  • Windows 10 ahora puede ejecutar una variedad de programas de Linux (entre ellos, el shell Bash y varias utilidades de texto). Estos no son puertos(es decir, versiones recompiladas, como por ejemplo en Cygwin), son lo mismo Binarios de ELF que se ejecutan en un sistema Linux típico. En este caso, fueron tomadas de Ubuntu.
  • Para hacer esto posible, Windows 10 se modificó para aceptar llamadas al sistema de Linux (llamadas al sistema) y para poder cargar y ejecutar binarios ELF (comentario de Scott Hanselman). Esto significa que se pueden ejecutar ejecutables de Linux sin modificar, cargarán sus bibliotecas compartidas sin modificar según sea necesario y Windows las ejecutará como procesos de Windows.
  • Cada vez que un programa Linux de este tipo desea interactuar con el kernel, emite una llamada al sistema (o permite que una biblioteca lo haga). Esta es (presumiblemente) la única diferencia con la ejecución en Linux: cuando se ejecuta en Linux, el kernel de Linux maneja estas llamadas; en Windows 10, el kernel de Windows 10 lo hace en su lugar.

Especulación

Entonces, la pregunta es si las llamadas al sistema que Docker necesita (para chroot y espacios de nombres, entre otras cosas) se implementaron o no. La respuesta a eso es probablemente "no". Docker requiere una funcionalidad bastante sofisticada (y específica de Linux) para la gestión de procesos y recursos, y el aislamiento de procesos. Si bien es probable que sea posible replicar todo esto en Windows, sería mucho trabajo, y dado que el objetivo de esta función de Windows parece ser ejecutar programas de espacio de usuario de Linux, parece poco probable que hicieran todo el trabajo (y lo mantuvieran en secreto).

Sin embargo, no hay información definitiva de cualquier forma,lo que puedo decir.

Puertos Docker existentes

Por supuesto, si Microsoft decide que quiere soporte para Docker en Windows 10, probablemente podrá ofrecerlo. Hay algún precedente para portar Docker a un kernel diferente:

  • Hay un Puerto Docker para FreeBSD. Está etiquetado como" experimental", pero en principio parece funcionar. Puede usar contenedores Docker sin modificar del repositorio Docker, lo que significa que en realidad proporciona un entorno de host similar a Linux para las imágenes.
  • Hay un proyecto en marcha para portar Docker a Windows (específicamente, Windows Server 2016): consulte esto Entrada de blog de Docker a partir de agosto de 2015. Sin embargo, a diferencia del puerto FreBSD anterior, este será un puerto que permitirá a Docker ejecutar imágenes de Windows en Windows, no imágenes de Linux en Windows. Gracias a Rory McCune por señalar esto.

No, esto no es posible.

Docker necesita varias cosas para ejecutar contenedores:

  • colinabo
  • Espacios de nombres para:
    • PID
    • Usuario
    • Red
    • Monte
    • UTS
    • IPC

Estas son todas las características del kernel que se implementan en Linux. Desafortunadamente, la mayoría de ellos no tienen una característica similar en Windows para usar como reemplazo (ni en el subsistema Linux que Microsoft implementó en el kernel de Windows). Todo esto debe ser proporcionado por el sistema operativo.

La primera vista previa privilegiada se lanzó ayer. Intenté instalar Docker pero falla con lo siguiente:

Por lo tanto, parece que para la primera vista previa no funciona actualmente. Sin embargo, como muchas personas han especulado, puede funcionar en una versión futura.

A partir de la Actualización del Creador (lanzado públicamente el 13 de junio de 2017) puede ejecutar ejecutables nativos de Windows directamente en WSL. Esto significa que si ya ha instalado Docker para Windows simplemente puede invocar el docker binarios instalados en C:\Program Files. Desde que terminan en .exe la opción más fácil es crear alias. Algo como lo siguiente en su .bashrc debería funcionar:

DOCKER_BIN='/mnt/c/Program Files/Docker/Docker/resources/bin'for f in "$DOCKER_BIN"/*; do  alias "$(basename "$f" | sed 's/.exe$//')"'="'"$f"'"'done

Esto crea alias para todos los archivos de la DOCKER_BIN directorio:

$ type dockerdocker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'$ docker --versionDocker version 17.03.1-ce, build c6d412e

Una advertencia: recibirás un mensaje de error como "No se puede traducir el directorio de trabajo actual"si se ejecuta desde un directorio de Linux. Simplemente cd en un directorio de Windows (p. ej. /mnt/c/Users/YourUsername) y deberías ser bueno.

Una vez que se publique Docker 1.12 y se separe el cliente Docker de Linux, debería poder ejecutar docker cliente en Windows 10 bash.

Esto puede no parecer mucho dado que tiene un cliente Docker de Windows, pero es útil si tiene cadenas de herramientas de Linux que incluyen docker para su funcionalidad del lado del cliente.

En Windows 10, versión 1607, compilación 1493.10, puede instalarlo correctamente en Ubuntu Bash, pero no funciona :(

Una simple "versión de docker" le dirá:

Client version: 1.6.2Client API version: 1.18Go version (client): go1.2.1Git commit (client): 7c8fca2OS/Arch (client): linux/amd64FATA[0000] Get http:///var/run/docker.sock/v1.18/version: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS?

Si luego ejecuta "sudo docker-d", aparece el siguiente error:

FATA[0000] ERROR: You are running Linux kernel version 3.4.0+, which is unsupported for running Docker. Please upgrade your kernel to 3.8+.

Así que este es definitivamente un tapón desde el lado de bash.

Sin embargo, puede instalar Docker para Windows y funciona a las mil maravillas, obviamente puede implementar servidores Linux y todo lo que necesita.

> docker versionClient: Version:      1.12.0 API version:  1.24 Go version:   go1.6.3 Git commit:   8eab29e Built:        Thu Jul 28 21:15:28 2016 OS/Arch:      windows/amd64Server: Version:      1.12.0 API version:  1.24 Go version:   go1.6.3 Git commit:   8eab29e Built:        Thu Jul 28 21:15:28 2016 OS/Arch:      linux/amd64

A septiembre de 2016, No.

Todas las implementaciones actuales de Docker en Windows usan virtualización, Docker 1.12 usa un hipervisor en Windows, eliminando así la ventaja de la contenedorización sobre la virtualización.

Docker necesita algo más que usar llamadas a sistemas Linux.

Necesita grupos de control de procesos( cgroups), un sistema de archivos apilable (aufs), además de otros sistemas basados en Linux fuera del kernel.

Ni los cgroups ni los AUF están de forma nativa en el kernel de Windows 10.

Hay una implementación de Windows Server 2016 aquí: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server ..pero esto solo ejecutará algunos servicios de Windows, por ejemplo, IIS, y no Ubuntu

Docker no funciona actualmente en la compilación actual (14316), suponiendo que pueda instalarlo.

root@localhost:~# docker --helpruntime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000fatal error: runtime: address space conflict

De: https://blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/

Faster and more reliable – native development environment usinghypervisors built into each operating system. (No more VirtualBox!)

No es “solo” un espacio de usuario` bash’. Es un espacio de usuario de Linux real y bastante completo, pero sin X Windows, es decir, solo texto. Decir “bash” comunica bastante bien la limitación de solo texto…

de hecho, ese es el propósito de la ventana acoplable nativa de Windows. La naturaleza de la contenedorización es que no puede ejecutar sistemas con otros kernels, sin agregar algo de virtualización o (posiblemente) este nuevo subsistema que Microsoft está desarrollando

Creo que no estará claro hasta que lo publiquen (AFAIK, todavía ni siquiera está disponible para Windows insiders), sin embargo, vale la pena señalar que Microsoft y Docker están trabajando para llevar Docker a Windows de forma nativa, que se lanzará junto con Windows server 2016

@RoryMcCune: Interesante. Sin embargo, de acuerdo con esta entrada de blog de Docker a partir de agosto de 2015, este será un puerto que permitirá a Docker ejecutar imágenes de Windows en Windows, no imágenes de Linux en Windows.

Para un sistema GNU correr en un núcleo de Windows es ciertamente posible. Sería mucho trabajo para un cambio de calidad muy lateral. Me sorprendería si sucediera, o si la gente lo adoptara.

¿Me perdí algo? ¿Realmente se distribuyó esto? Por el momento solo lo conozco como vaporware.

Relacionado: error de la ventana acoplable: /var / run / docker.sock: no existe tal archivo o directorio.

Es posible ejecutar la imagen de Windows Docker en la instancia de Ubuntu aws ? o hay alguna alternativa ? …raíz@ip-172-31-22-20:~/docker / windows# extracción de docker microsoft / nanoserver
Uso de la etiqueta predeterminada: latest
lo último: Extracción de Microsoft / nanoserver
bce2fbc256ea: Extracción de la capa fs
4806a44e00a0: Extracción de la capa fs
imagen el sistema operativo “Windows” no se puede utilizar en esta plataforma
raíz@ip-172-31-22-20:~/ventana acoplable / windows#