IT story

Linux에서 Windows 컨테이너를 호스팅 할 수 있습니까?

hot-time 2020. 5. 13. 08:06
반응형

Linux에서 Windows 컨테이너를 호스팅 할 수 있습니까?


그것은 실행할 수 있습니다 윈도우 컨테이너리눅스 ? 이 시나리오는 .NET (이전 네트)으로 작성된 앱 과 Docker로이를 실행하여에 API를 작성 하려는 Linux 사용자기반net462 으로합니다 localhost.

Windows 용 Docker Desktop의 베타 버전을 사용하고 있습니다.

그렇지 않다면 왜 Windows가 Linux 컨테이너를 실행할 수 있으며 그 반대도 마찬가지입니까?

편집하다:

시간이 지남에 따라이 질문은 인기있는 질문입니다. 해결 방법은 새로운 netstandard을 사용하는 것입니다. 4.6.2프레임 워크를 새 라이브러리에 넣을 수있었습니다 .


Update3 : 06.2019 의견 중 일부는 대답이 명확하지 않다고 말하면서 명확히하려고 노력할 것입니다.

TL; DR :

Q : Linux에서 Windows 컨테이너를 실행할 수 있습니까?

A : 아니요. 그들은 할 수 없습니다. 컨테이너는 기본 운영 체제 리소스 및 드라이버를 사용하므로 Windows 컨테이너는 Windows에서만 실행할 수 있고 Linux 컨테이너는 Linux에서만 실행할 수 있습니다.

Q : 그러나 Windows 용 Docker는 어떻습니까? 아니면 다른 VM 기반 솔루션?

A : Windows 용 고정 표시기 실행 시뮬레이션 할 수 있습니다 리눅스 에 컨테이너를 윈도우 하지만, 후드 리눅스 VM은 그래서 여전히 만든 리눅스 컨테이너 리눅스에서 실행 및 Windows 용기는 윈도우에서 실행되는 .

보너스 : Windows에서 Linux 도커 컨테이너를 실행하는 방법에 대한 이 훌륭한 기사를 읽으십시오 .

Q : 컨테이너에서 실행하려면 .Net Framework 462 앱으로 어떻게해야합니까?

A : 다릅니다. 몇 가지 권장 사항을 따르면 :

  • 가능하면 .Net Core로 이동하십시오. .Net Core는 .Net Framework의 대부분의 주요 기능을 지원하므로 .Net Framework 4.8 .Net Framework 의 마지막 버전이됩니다.
  • .Net Core로 마이그레이션 할 수없는 경우-@Sebastian이 언급했듯이 라이브러리를 .Net Standard로 변환 할 수 있으며 .Net Framework 4.6.2 및 .Net Core의 두 가지 버전의 앱을 가질 수 있습니다. Visual Studio는 항상 다중 타겟팅을 통해이를 잘 지원하지만 일부 종속성은 추가 관리가 필요할 수 있습니다.

  • (권장되지 않음) 경우에 따라 Windows 컨테이너를 실행할 수 있습니다. Kubernetes와 같은 플랫폼에서 더 나은 지원을 통해 Windows 컨테이너가 더욱 성숙 해지고 있습니다. 그러나 .Net Framework 코드를 실행하려면 약 1.4GB를 차지하는 "Server Core"의 기본 이미지를 계속 실행해야합니다. 드문 경우이지만 코드를 .Net Core로 마이그레이션 할 수 있지만 이미지 크기가 95MB 인 Windows Nano 서버에서 계속 실행될 수 있습니다.

역사에 대한 오래된 업데이트도 남겨 둡니다.

업데이트 2 : 08.2018 Docker-for-Windows를 사용하는 경우 이제 Windows와 Linux 컨테이너를 동시에 실행할 수 있습니다. https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- 그리고 리눅스 컨테이너와 동시에 /

보너스 : 질문과 직접 ​​관련이 없지만 이제 Linux 컨테이너 자체뿐만 아니라 kubernetes와 같은 오케 스트레이터를 실행할 수도 있습니다 : https://blog.docker.com/2018/07/kubernetes-is-now-available-in -도커 데스크탑 안정 채널 /

2018 년 업데이트 :

일반적으로 원래 대답은 맞다, 하지만 몇 개월 전, 고정 표시기 추가 실험 기능 LCOW ( 공식 GitHub의 저장소 ).

에서 이 게시물 :

Windows 용 Docker는 이미 Linux 컨테이너를 실행하지 않습니까? 맞습니다. Windows 용 Docker는 Hyper-V Moby Linux VM을 통해 Linux 컨테이너를 지원하여 Linux 또는 Windows 컨테이너를 실행할 수 있습니다 (Windows 17.10의 Docker에서이 VM은 LinuxKit을 기반으로 함).

LCOW를 사용하여 Linux 컨테이너를 실행하기위한 설정 은 Hyper-V Linux VM이 모든 컨테이너와 함께 Linux Docker 데몬을 실행하는 이전 아키텍처보다 훨씬 간단 합니다. LCOW를 사용하면 Docker 데몬은 Windows 프로세스로 실행되며 (Docker Windows 컨테이너를 실행할 때와 동일) Linux 컨테이너를 시작할 때마다 Docker는 Linux 커널, runc 및 컨테이너 프로세스로 VM을 실행하는 최소 Hyper-V 하이퍼 바이저를 시작합니다. 위에 달리기.

Docker 데몬이 하나만 있고 이제 해당 데몬이 Windows에서 실행되므로 동일한 네트워킹 네임 스페이스에서 Windows 및 Linux Docker 컨테이너를 나란히 실행할 수 있습니다 . 이를 통해 Windows의 Docker 사용자를위한 흥미로운 개발 및 프로덕션 시나리오가 많이 열립니다.

기발한:

@PanagiotisKanavos의 의견에서 언급했듯이 컨테이너는 가상화 용이 아니며 호스트 시스템의 리소스를 사용하고 있습니다 . 결과적으로, 현재 Windows 컨테이너는 Linux 시스템에서 "있는 그대로"실행할 수 없습니다.

그러나 Windows에서 작동하는 VM을 사용하여 수행 할 수 있습니다. Linux 호스트에 Windows VM을 설치하면 Windows 컨테이너를 실행할 수 있습니다.

이를 통해 IMHO는 PROD 환경에서 이러한 방식으로 실행하는 것이 가장 좋은 아이디어는 아닙니다.

또한 이 답변 은 자세한 내용을 제공합니다.


아니요, Linux에서 Windows 컨테이너를 직접 실행할 수 없습니다.

그러나 Windows에서 Linux를 실행할 수 있습니다.

Windows Server / 10에는 우분투 OS의 기본 이미지가 포함되어 있습니다 ( 2016 년 9 월 베타 서비스 팩 이후 ). 그렇기 때문에 Windows에서 Linux를 실행할 수 있고 다른 방법으로는 그렇지 않습니다. 여기를 확인하십시오. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

트레이 메뉴에서 도커를 마우스 오른쪽 버튼으로 클릭하여 OS 컨테이너 Linux와 창을 변경할 수 있습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


가상화와 달리 컨테이너화는 동일한 호스트 운영 체제를 사용합니다. 따라서 Linux로 빌드 된 컨테이너는 Windows에서 실행될 수 없으며 그 반대도 마찬가지입니다.

Windows에서는 컨테이너의 운영 체제와 동일한 운영 체제를 갖기 위해 가상화 (Hyper-v 사용)를 지원해야합니다.

Docker for windows is similar app which is built on Hyper-v and helps in running linux docker container on windows. But as far as I know, there is nothing as such which helps run windows containers on linux.


Containers use the OS kernel. Windows Container utilize processes in order to run. So theoretically speaking Windows Containers cannot run on Linux.

However there are workarounds utilizing VMstyle solutions.

I Have found this solution which uses Vagrant and Packer on Mac, so it should work for Linux as well: https://github.com/StefanScherer/windows-docker-machine

This Vagrant environment creates a Docker Machine to work on your MacBook with Windows containers. You can easily switch between Docker for Mac Linux containers and the Windows containers.

bash 명령 실행 여기에 이미지 설명을 입력하십시오

building the headless Vagrant box

$ 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

Create the Docker Machine

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

Switch to Windows containers

$ eval $(docker-machine env 2019)

You can use Windows Containers inside a virtual machine (the guest OS should match the requirements - Windows 10 Pro or Windows 2016).

For example you can use VirtualBox, just enable Hyper-V inside System / Acceleration / Paravirtualization Interface.

After that if Docker doesn't start up because of an error, use the "Switch to Windows containers..." in the settings.

(this could be moved as a comment to the accepted answer, but I don't have enough reputation to do so)


Solution 1 - Using VirtualBox

As Muhammad Sahputra suggested in this post, it is possible to run Windows OS inside VirtualBox (using VBoxHeadless - without graphical interface) inside Docker container.

Also, a NAT setup inside the VM network configurations can do a port forwarding which gives you the ability to pass-through any traffic that comes to and from the Docker container. This eventually, in a wide perspective, allows you to run any Windows-based service on top of Linux machine.

Maybe this is not a typical use-case of a Docker container, but it definitely an interesting approach to the problem.


Solution 2 - Using Wine

For simple applications and maybe more complicated, you can try to use wine inside a docker container.

This docker hub page may help you to achieve your goal.


I hope that Docker will release a native solution soon, like they did with docker-machine on Windows several years ago.


While Docker for Windows is perfectly able to run Linux containers, the converse, while theoretically possible, is not implemented due to practical reasons.

The most obvious one is, while Docker for Windows can run a Linux VM freely, Docker for Linux would require a Windows license in order to run it inside a VM.

Also, Linux is completely customizable, so the Linux VM used by Docker for Windows has been stripped down to just a few MB, containing only the bare minimum needed to run the containers, while the smallest Windows distribution available is about 1.5 GB. It may not be an impracticable size, but it is much more cumbersome than the Linux on Windows counterpart.

While it is certainly possible for someone to sell a Docker for Linux variation bundled with a Windows license and ready to run Windows containers under Linux (and I don't know if such product exists), the bottom line is that you can't avoid paying Windows vendor lock-in price: both in money and storage space.


You can run MSSQL and DOTNET on Linux, and hence inside Linux containers, nowadays.

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

또한 : https://hub.docker.com/r/microsoft/dotnet/


Windows 컨테이너가 Linux에서 실행되고 있지 않으며 Windows에서 Linux 컨테이너를 직접 실행할 수 없습니다.

참고 URL : https://stackoverflow.com/questions/42158596/can-windows-containers-be-hosted-on-linux

반응형