É 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 net462
API 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.2
framework em uma nova biblioteca.
linux
docker
docker-for-windows
windows-container
docker-desktop
Sebastian 506563
fonte
fonte
Respostas:
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 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 :
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.
fonte
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.
fonte
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.
fonte
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
fonte
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.
fonte
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)
fonte
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.
fonte
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.
fonte
.NET Core
e NÃO.NET
- esses são dois ambientes completamente diferentes.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.
fonte