Você pode executar Docker nativamente no novo Windows 10 (Ubuntu) bash userspace?

Meu entendimento era que a principal limitação da execução do docker em outros oss eram os contêineres de Rede Linux que tornavam isso possível. (Certamente para Macs).

Recentemente Microsoft anunciou um beta de a Ubuntu distribuicao modo de usuário executando nativamente no Windows 10. Isso pode executar binários compilados no formato ELF no Windows (ao contrário do cygwin, que requer uma compilação.)

Minha pergunta é: Você pode executar Docker nativamente no novo Windows 10 (Ubuntu) bash userspace?

Você pode usar o Docker Desktop Para Windows como o mecanismo e o Docker Para Linux como o cliente no Wsl no Ubuntu / Debian no Windows. Conecte-os via TCP.

Instalar Docker Desktop Para Windows: https://hub.docker.com/editions/community/docker-ce-desktop-windowsSe você quiser usar contêineres do Windows em vez de contêineres do Linux, ambos os contêineres de tipo podem ser gerenciados pelo Cliente Linux docker no bash userspace.

Desde a versão 17.03.1-ce-win12 (12058) você deve verificar Expor daemon em tcp: / / localhost: 2375 sem TLS para permitir que o cliente Linux Docker continue se comunicando com o daemon do Windows Docker por TCP

Proceder:

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

ou

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

Para torná-lo permanente:

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

Adicione as variáveis correspondentes A.bashrc

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

Claro, você pode instalar o 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

Ou usando python pip

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

E conclusão Bash. Melhor:

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

Eu testei usando a Versão 2.1.0.1 (37199) do 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**

Volume

Tome cuidado ao adicionar volumes. Caminho C:\dir será visível como /mnt/c/dir em WSL e como /c/dir/ pelo docker engine. Você pode superá-lo permanentemente:

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

Você deve sair e recarregar WSL depois de fazer a alteração para wsl.conf para que o WSL leia suas alterações no lançamento.

ACTUALIZACAO

de: O que há de novo para a linha de comando no Windows 10 versão 1803

Sockets Unix Soquetes Unix não eram suportados no Windows, e agora eles são! Você também pode se comunicar em soquetes Unix entre Windows e WSL. Uma das grandes coisas sobre isso é que ele permite que o WSL execute o cliente Linux Docker para interagir com o Daemon Docker em execução no Windows.

ACTUALIZACAO

Este script e o uso de soquetes Unix foram incluídos em Pengwinpengwin-setup.

Cumprimento

A partir de agora (abril de 2016) a resposta é:

Nós ainda não sabemos (mas provavelmente não).

Fato

  • O Windows 10 agora pode executar uma variedade de programas Linux (entreeles o shell Bash e vários utilitários de texto). Essas não são portas (ou seja, versões recompiladas, como, por exemplo, em Cygwin), eles sãoo mesmo Binários ELF isso é executado em um sistema Linux típico. Nesse caso, eles foram retirados do Ubuntu.
  • Para tornar isso possível, o Windows 10 foi modificado para aceitar chamadas de Sistema Linux( syscalls) e para poder carregar e executar binários ELF (comentado por Scott Hanselman). Isso significa que executáveis Linux não modificados podem ser executados, eles carregarão suas bibliotecas compartilhadas não modificadas conforme necessário e o Windows OS executará como processos do Windows.
  • Sempre que esse programa Linux deseja interagir com o kernel, ele emite uma chamada do sistema (ou permite que uma biblioteca faça isso). Esta é (presumivelmente) a única diferença em Executar no Linux: ao executar no Linux, o kernel do Linux lida com essas chamadas; no Windows 10, o kernel do Windows 10 faz isso.

Especulacao

Portanto, a questão é se os syscalls de que o Docker precisa (para chroot e namespaces, entre outras coisas) foram implementados ou não. A resposta é para isso é provavelmente "não". O Docker requer funcionalidade bastante sofisticada (e específica do Linux) para gerenciamento de processos e recursos e isolamento de processos. Embora seja provavelmente possível replicar tudo isso no Windows, seria muito trabalho e, como o objetivo desse recurso do Windows parece estar executando programas Linux userspace, parece improvável que eles tenham feito todo o trabalho (e mantido em segredo).

No entanto,não há informações definitivas de qualquer maneira, tanto quanto eu posso dizer.

Portas Docker existentes

Claro, se a Microsoft decidir que deseja Suporte ao Docker no Windows 10, provavelmente poderá oferecê-lo. Há algum precedente para portar Docker para um kernel diferente:

  • Existe um Porta Docker Para FreeBSD. É rotulado como "experimental", mas parece funcionar em princípio. Ele pode usar contêineres Docker não modificados do repositório Docker, o que significa que ele realmente fornece um ambiente host semelhante ao Linux para as imagens.
  • Há um projeto em andamento para portar o Docker para o Windows (especificamente, Windows Server 2016) - Veja isso Entrada do blog Docker a partir de agosto de 2015. No entanto, ao contrário da porta FreBSD acima, esta será uma porta que permite ao Docker executar imagens do Windows no Windows, não Imagens do Linux no Windows. Obrigado a Rory McCune por apontar isso.

Não, isso não é possível.

O Docker precisa de várias coisas para executar contêineres:

  • jaula
  • Namespaces para:
    • IDENTIFICACAO
    • Usuario
    • Rede
    • Montar
    • UT
    • IPC

Estes são todos os recursos do kernel que são implementados no Linux. Infelizmente, a maioria deles não tem um recurso semelhante no Windows para usar como substituto (nem no subsistema Linux que a Microsoft implementou no kernel do Windows). Tudo isso precisa ser fornecido pelo sistema operacional.

A primeira prévia do insider foi lançada ontem. Tentei instalar o docker, mas ele falha com o seguinte:

Portanto, parece que, para a primeira visualização, não funciona no momento. No entanto, como muitas pessoas especularam, pode funcionar em um lançamento futuro.

A partir do Atualização Do Criador (lançado publicamente em 13 de junho de 2017) você pode executar executável nativo do Windows diretamente no WSL. Isso significa que se você já instalou Docker para Windows você pode simplesmente invocar o docker binários instalados em C:\Program Files. Desde que eles terminam em .exe a opção mais fácil é criar aliases. Algo como o seguinte em seu .bashrc deve 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

Isso cria aliases para todos os arquivos no 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

Uma ressalva: você receberá uma mensagem de erro como "Não é possível traduzir o diretório de trabalho atual"se executado a partir de um diretório Linux. Apenas cd em um diretório do Windows (por exemplo, /mnt/c/Users/YourUsername) e você deve ser bom.

Depois que o Docker 1.12 for lançado e o Cliente do Docker do Linux for separado, você poderá executar o docker cliente no Windows 10 bash.

Isso pode não parecer muito, dado que você tem um cliente Docker Windows, mas é útil se você tiver cadeias de ferramentas Linux que incluem docker para sua funcionalidade do lado do cliente.

No Windows 10 Versão 1607 Build 1493.10 você pode instalá-lo com sucesso no Ubuntu Bash, mas não funciona: (

Uma simples "versão docker" irá dizer-lhe:

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?

Se você executar "sudo docker-d", receberá o seguinte erro:

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+.

Portanto, esta é definitivamente uma rolha do lado bash.

No entanto, você pode instalar Docker para Windows e funciona como um encanto, você obviamente pode implantar servidores Linux e tudo o que precisa.

> 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

O Docker não funciona atualmente na compilação atual ( 14316) - supondo que você possa instalá-lo.

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!)

Não é “apenas” um espaço de usuário` bash’. É um espaço de usuário Linux real e bastante completo, mas sem X Windows, ou seja, apenas texto. Dizer “bash” comunica a limitação somente de texto muito bem…

na verdade, esse é o propósito do docker nativo do Windows. A natureza da conteinerização é que você não pode executar sistemas com outros kernels, sem adicionar alguma virtualização ou (possivelmente) este novo subsistema que a Microsoft está desenvolvendo

Acho que não ficará claro até que eles liberem isso (AFAIK ainda não está disponível para Windows insiders), no entanto, vale a pena notar que a Microsoft e o Docker estão trabalhando para trazer o Docker para o Windows nativamente, a ser lançado junto com o Windows server 2016

@RoryMcCune: Interessante. No entanto, de acordo com esta entrada do blog Docker a partir de agosto de 2015, esta será uma porta que permite ao Docker executar imagens Windows no Windows, não Imagens do Linux no Windows.

Para um sistema GNU ser executado em um kernel do Windows é certamente possível. Seria muito trabalho para uma mudança muito lateral na qualidade. Eu ficaria surpreso se isso acontecesse, ou se as pessoas o adotassem.

Perdi alguma coisa? Isso realmente foi distribuído? No momento eu só sei disso como vaporware.

Relacionado: erro do docker:/var/run / docker.sock: nenhum arquivo ou diretório.

É possível executar a imagem do Windows docker na instância do ubuntu aws ? ou há alguma alternativa ? …raiz @ ip-172-31-22-20:~/docker / windows# Docker puxar microsoft / nanoserver
Usando tag padrão: mais recente
Últimas: puxando da microsoft / nanoserver
bce2fbc256ea: puxando a camada do fs
4806a44e00a0: puxando a camada do fs
sistema operacional de Imagem “windows” não pode ser usado nesta plataforma
raiz @ ip-172-31-22-20:~/docker / windows#