Os contêineres do Windows podem ser hospedados no linux?

239

É possível executar o Windows Containers no Linux ? O cenário é baseado em um aplicativo gravado no .NET (rede antiga) e no usuário Linux que deseja executar isso com o Docker para fornecer uma net462API gravada no localhost.

Estou usando a versão beta do Docker Desktop para Windows

Se não, por que o Windows pode executar contêineres Linux e não vice-versa?

EDITAR:

Como já passou algum tempo, essa pergunta é popular. Gostaria de adicionar uma observação aqui que a solução alternativa é usar o novo padrão de rede. Isso me permitiu compactar o 4.6.2framework em uma nova biblioteca.

Sebastian 506563
fonte
4
Não é possível - Para criar e executar contêineres do Windows, é necessário um sistema Windows com suporte a contêineres.
ajtrichards
5
Ok, mas por que o Windows pode executar contêineres linux? Não há vice-versa por enquanto?
Sebastian 506563
10
@ Sebastian506563 porque o docker executa a virtualização do VirtualBox nos bastidores para fazer com que os contêineres Linux sejam executados no Windows. Eu acho que teoricamente será possível o contrário, apenas o docker não o implementou.
Gregory Suvalian
5
Com as VMs, cada VM possui seu próprio sistema operacional. Nos contêineres, há uma imagem do SO base e cada contêiner está adicionando uma nova camada fina na parte superior da base. No docker, este sistema operacional base é baseado em Linux. ou seja, o contêiner do Windows não pode usar a base, pois é diferente. blog.risingstack.com/…
xen-dara
3
@PanagiotisKanavos, por favor, componha resposta
Sebastian 506563

Respostas:

162

Atualização3: 06.2019 Alguns dos comentários dizem que a resposta não está clara, tentarei esclarecer.

TL; DR:

P: Os contêineres do Windows podem ser executados no Linux?

A: Não. Eles não podem. Os contêineres estão usando os recursos e drivers subjacentes do sistema operacional, para que os contêineres do Windows possam ser executados apenas no Windows e os contêineres do Linux possam ser executados apenas no Linux.

P: Mas e o Docker for Windows? Ou outras soluções baseadas em VM?

R: O Docker para Windows permite simular a execução de contêineres Linux no Windows , mas, sob o capô, uma VM Linux é criada; portanto, os contêineres Linux ainda estão em execução no Linux e os contêineres do Windows em execução no Windows .

Bônus: leia este artigo muito bom sobre a execução de contêineres do docker Linux no Windows.

P: Então, o que devo fazer com um aplicativo .Net Framework 462, se desejar executar em um contêiner?

A: depende. Seguindo várias recomendações:

  • Se possível, vá para o .Net Core. Como o .Net Core oferece suporte aos principais recursos do .Net Framework, o .Net Framework 4.8 será a última versão do .Net Framework
  • Se você não pode migrar para o .Net Core - como o @Sebastian mencionou - você pode converter suas bibliotecas no .Net Standard e ter 2 versões do aplicativo - uma no .Net Framework 4.6.2 e outra no .Net Core - não é sempre óbvio, o Visual Studio o suporta muito bem (com várias segmentações), mas algumas dependências podem exigir cuidados extras.

  • (Menos recomendado) Em alguns casos, você pode executar contêineres do Windows. Os contêineres do Windows estão se tornando cada vez mais maduros, com melhor suporte em plataformas como o Kubernetes. Mas para poder executar o código do .NET Framework, você ainda precisa executar a imagem base do "Server Core", que ocupa cerca de 1,4 GB. Nos mesmos casos raros, você pode migrar seu código para o .Net Core, mas ainda executar nos servidores Windows Nano, com um tamanho de imagem de 95 MB.

Deixando também as atualizações antigas da história

Atualização2: 08.2018 Se você estiver usando o Docker-for-Windows, poderá executar agora os contêineres Windows e Linux simultaneamente : https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- e-linux-containers-simultaneamente /

Bônus: não está diretamente relacionado à pergunta, mas agora você pode executar não apenas o contêiner linux em si, mas também orquestradores como o kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stable-channel /

Atualizado em 2018:

A resposta original em geral está certa, mas há alguns meses, o docker adicionou o recurso experimental LCOW ( repositório oficial do github ).

A partir deste post :

O Docker para Windows já não executa contêineres Linux? Está certo. O Docker para Windows pode executar contêineres Linux ou Windows, com suporte para contêineres Linux por meio de uma VM Hyper-V Moby Linux (a partir do Docker for Windows 17.10, essa VM é baseada no LinuxKit).

A configuração para executar contêineres Linux com LCOW é muito mais simples que a arquitetura anterior, na qual uma VM Linux Hyper-V executa um daemon Linux Docker, junto com todos os seus contêineres. Com o LCOW, o daemon do Docker é executado como um processo do Windows (o mesmo que ao executar contêineres do Docker Windows) e toda vez que você inicia um contêiner do Linux, o Docker lança um hipervisor Hyper-V mínimo executando uma VM com um kernel Linux, runc e os processos do contêiner correndo por cima.

Como existe apenas um daemon do Docker, e como esse daemon agora é executado no Windows, em breve será possível executar contêineres do Windows e Linux Docker lado a lado, no mesmo espaço de nome de rede . Isso desbloqueará muitos cenários interessantes de desenvolvimento e produção para usuários do Docker no Windows.

Original:

Conforme mencionado nos comentários de @PanagiotisKanavos, os contêineres não são para virtualização e estão usando os recursos da máquina host . Como resultado, por enquanto, o contêiner do Windows não pode ser executado "como está" na máquina Linux.

Mas - você pode fazer isso usando a VM -, pois funciona no Windows. Você pode instalar o Windows VM no seu host Linux, o que permitirá executar contêineres do Windows.

Com isso, IMHO executá-lo dessa maneira no ambiente PROD não será a melhor idéia.

Além disso, esta resposta fornece mais detalhes.

evgenyl
fonte
12
A resposta vinculada na verdade não fornece detalhes sobre isso - apenas explica como executar contêineres Linux no Windows (o inverso). É possível executar o Docker em uma VM do Windows, mas você precisa de suporte à virtualização aninhada para isso. Isso significa que ele funciona com o VMware, mas não com o Virtualbox.
Ralf
3
Muitas palavras na resposta, mas isso não parece responder à pergunta.
Kyberias 24/03/19
2
Não é resposta para a pergunta. Não deve ser tão altamente classificado
Amorphous
2
Esta NÃO é uma resposta para esta pergunta. A execução do docker no Linux é MARKEDLY diferente da execução do docker no Windows. Por que isso está marcado como resposta? \
Ani
Containers = executam aplicativos isolados com eficiência (criados para um sistema operacional específico), menos memória, espaço em disco, sobrecarga, VMs de utilização de hardware mais eficientes = caso de uso .. execute sistemas operacionais inteiros para vários casos de uso ..., a utilização de hardware é boa (Não preciso comprar uma máquina diff para cada sistema operacional ... se eu realmente precisar de vários sistemas operacionais para o meu caso de uso), mas a utilização difícil não é tão boa em comparação com os contêineres. Ótimo vídeo do CTO da Joyent: youtube.com/watch?v=coFIEH3vXPw
cacoder
16

Não, você não pode executar contêineres do Windows diretamente no Linux.

Mas você pode executar o Linux no Windows.

O Windows Server / 10 é fornecido com a imagem base do sistema operacional ubuntu ( após setembro de 2016 beta service pack ). Essa é a razão pela qual você pode executar o Linux no Windows e não de outro modo. Confira aqui. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

Você pode alternar entre os contêineres do SO Linux e Windows clicando com o botão direito do mouse na janela de encaixe no menu da bandeja.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Karthikeyan VK
fonte
13
O OP está procurando executar contêineres do Windows em servidores Linux, portanto este não responde à pergunta. Mas eu não gosto de pessoas que dá downvote sem um comentário, por isso estou dando uma upvote
daisy
1
@Karthikeyan V: Porque não é uma resposta para a pergunta.
Stefan Steiger
Não tenho certeza do que disse antes, mas a primeira afirmação diz que você não pode e a segunda diz que pode. Provavelmente é uma falta ou algo que é confuso.
precisa saber é o seguinte
9

Diferente da virtualização, a conteinerização usa o mesmo sistema operacional host. Portanto, o contêiner criado no Linux não pode ser executado no Windows e vice-versa.

No Windows, você precisa da ajuda da virtualização (usando o Hyper-v) para ter o mesmo sistema operacional do seu contêiner e, em seguida, deve poder executar o mesmo.

O Docker para Windows é um aplicativo semelhante desenvolvido no Hyper-v e ajuda na execução do contêiner do Linux Docker no Windows. Mas, até onde eu sei, não há nada que ajude a executar contêineres do Windows no Linux.

sunil bhardwaj
fonte
9

Os contêineres usam o kernel do SO. O Contêiner do Windows utiliza processos para executar. Então, teoricamente, o Windows Containers não pode ser executado no Linux.

No entanto, existem soluções alternativas utilizando soluções VMstyle.

Encontrei esta solução que usa o Vagrant e o Packer no Mac, por isso também deve funcionar no Linux: https://github.com/StefanScherer/windows-docker-machine

Esse ambiente do Vagrant cria uma Docker Machine para funcionar no seu MacBook com contêineres do Windows. Você pode alternar facilmente entre os contêineres do Docker for Mac Linux e os contêineres do Windows.

Executando comandos bash insira a descrição da imagem aqui

construindo a caixa Vagrant sem cabeça

$ git clone https://github.com/StefanScherer/packer-windows
$ cd packer-windows

$ packer build --only=vmware-iso windows_2019_docker.json
$ vagrant box add windows_2019_docker windows_2019_docker_vmware.box

Criar a máquina Docker

$ git clone https://github.com/StefanScherer/windows-docker-machine
$ cd windows-docker-machine
$ vagrant up --provider vmware_fusion 2019

Alterne para contêineres do Windows

$ eval $(docker-machine env 2019)
Gambiarra
fonte
7

Solução 1 - Usando o VirtualBox

Como Muhammad Sahputra sugeriu nesta postagem , é possível executar o sistema operacional Windows no VirtualBox (usando o VBoxHeadless - sem interface gráfica) dentro do contêiner do Docker .

Além disso, uma configuração NAT dentro das configurações de rede da VM pode fazer o encaminhamento de porta, o que lhe permite transmitir qualquer tráfego que chega e sai do contêiner do Docker. Eventualmente, em uma ampla perspectiva, você pode executar qualquer serviço baseado no Windows em cima da máquina Linux.

Talvez este não seja um caso de uso típico de um contêiner do Docker, mas é definitivamente uma abordagem interessante para o problema.


Solução 2 - Usando vinho

Para aplicativos simples e talvez mais complicado, você pode tentar usar o vinho dentro de um contêiner de docker .

Esta página do hub do docker pode ajudar você a atingir seu objetivo.


Espero que o Docker libere uma solução nativa em breve, como fizeram com a docker-machine no Windows há vários anos.

Slavik Meltser
fonte
6

Você pode usar o Windows Containers dentro de uma máquina virtual (o sistema operacional convidado deve corresponder aos requisitos - Windows 10 Pro ou Windows 2016).

Por exemplo, você pode usar o VirtualBox , apenas ative o Hyper-V na interface Sistema / Aceleração / Paravirtualização.

Depois disso, se o Docker não inicializar devido a um erro, use o "Alternar para contêineres do Windows ..." nas configurações.

(isso pode ser movido como um comentário para a resposta aceita, mas não tenho reputação suficiente para fazê-lo)

BalintPogatsa
fonte
3

Enquanto o Docker for Windows é perfeitamente capaz de executar contêineres Linux, o inverso, embora teoricamente possível, não é implementado devido a razões práticas.

A mais óbvia é que, embora o Docker for Windows possa executar uma VM Linux livremente, o Docker for Linux exigiria uma licença do Windows para executá-la dentro de uma VM.

Além disso, o Linux é completamente personalizável, portanto, a VM do Linux usada pelo Docker para Windows foi reduzida para apenas alguns MB, contendo apenas o mínimo necessário para executar os contêineres, enquanto a menor distribuição disponível do Windows é de cerca de 1,5 GB. Pode não ser um tamanho impraticável, mas é muito mais complicado que o equivalente no Linux no Windows.

Embora certamente seja possível alguém vender uma variação do Docker para Linux com uma licença do Windows e pronto para executar contêineres do Windows no Linux (e eu não sei se esse produto existe), a conclusão é que você não pode evitar preço pago de bloqueio do fornecedor do Windows: tanto em dinheiro quanto em espaço de armazenamento.

lvella
fonte
0

Você pode executar o MSSQL e o .NET Core no Linux e, portanto, dentro de contêineres do Linux atualmente.

Consulte: https://hub.docker.com/r/microsoft/mssql-server-linux/

Também: https://hub.docker.com/r/microsoft/dotnet/

A pergunta direta à sua resposta, é claro, a menos que exista uma versão compilada especialmente para Linux, não.

dagelf
fonte
3
Isso é verdade - mas não tem nada a ver com a pergunta. Além disso, o MS-SQL é mais do que apenas o mecanismo (que no Linux vem sem filtro de arquivos ou R a propósito - portanto, nem mesmo o mecanismo inteiro).
Stefan Steiger
Você tem que pensar um passo à frente ... por que ele está perguntando? Se ele está perguntando, porque ele quer executar um destes: voila.
21418 dagelf
2
Possível. Mas IMHO, ele provavelmente está fazendo a pergunta, porque ele já fez isso, e agora ele precisa executar coisas como SSRS / SSAS ou algum controle de formulário da Web, como o ReportViewer, no Linux.
27513 Stefan Steiger #
Imagem Docker microsoft / dotnet é para .Net Core, que é algo completamente diferente do velho .Net 4.x para que você não pode executar aplicativo projetado para o velho .Net em .Net Núcleo
j123b567
3
Eles estão apoiando .NET Coree NÃO .NET - esses são dois ambientes completamente diferentes.
Slavik Meltser
-1

Os contêineres do Windows não estão em execução no Linux e você também não pode executar os contêineres do Linux diretamente no Windows.

Ehsan
fonte
6
Você pode elaborar um pouco?
Matthieu
18
Você pode executar contêineres linux na vitória 10
Kugel
2
Eu votei nesse cara, pois acho que era verdade na época. No entanto, agora você pode executar contêineres Linux no Docker no Windows (o Docker é executado em uma VM chamada MobyLinux).
JakeJ
Na verdade, o Windows executa uma pequena VM Linux para executar contêineres Linux. verifique seus recursos hyper-v para vê-lo
Tuğrul Karakaya 25/03