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


238

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

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

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

편집하다:

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


4
불가능-Windows 컨테이너를 빌드하고 실행하려면 컨테이너를 지원하는 Windows 시스템이 필요합니다.
ajtrichards

5
그러나 왜 Windows가 Linux 컨테이너를 실행할 수 있습니까? 지금은 그 반대가 없습니까?
Sebastian 506563

10
docker가 Linux 컨테이너를 Windows에서 실행하도록 백그라운드에서 VirtualBox 가상화를 실행하기 때문에 @ Sebastian506563. 이론적으로 그것은 다른 방법으로도 가능할 것이라고 추측 할 것입니다. 도커는 그것을 구현하지 않았습니다.
그레고리 수발 리안

5
VM을 사용하면 각 vm에 고유 한 운영 체제가 있습니다. 컨테이너에는 기본 OS 이미지가 있으며 각 컨테이너는 기본 위에 새로운 얇은 레이어를 추가합니다. 도커 에서이 기본 OS 리눅스 기반. 즉, Windows 컨테이너는베이스가 다르기 때문에 사용자를 사용할 수 없습니다. blog.risingstack.com/…
xen-

3
@PanagiotisKanavos 답변 작성
Sebastian 506563

답변:


162

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 환경에서 이러한 방식으로 실행하는 것이 가장 좋은 아이디어는 아닙니다.

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


12
링크 된 답변은 실제로 이것에 대한 세부 정보를 제공하지는 않습니다. Windows에서 Linux 컨테이너를 실행하는 방법 (역)을 설명합니다. Windows VM 내에서 Docker를 실행할 수 있지만이를 위해서는 중첩 된 가상화 지원이 필요합니다. 즉, VMware에서는 작동하지만 Virtualbox에서는 작동하지 않습니다.
Ralf

3
답변에 많은 단어가 있지만 질문에 대답하지 않는 것 같습니다.
Kyberias

2
질문에 대한 답이 아닙니다. 순위가 너무 높아야합니다
Amorphous

2
이것은이 질문에 대한 답이 아닙니다. Linux에서 docker를 실행하는 것은 Windows에서 docker를 실행하는 것과 현저히 다릅니다. 왜 이것이 답변으로 표시됩니까? \
Ani

컨테이너 = 특정 OS 용으로 작성된 diff 격리 된 응용 프로그램을 효율적으로 실행하고 메모리, 디스크 공간, 오버 헤드, 더 효율적인 하드웨어 사용률 VM = 사용 사례 .. 다양한 사용 사례에 대한 전체 OS 실행 ..., 하드웨어 사용률이 좋습니다 (각 OS마다 diff 머신을 구입할 필요는 없습니다. 실제로 사용 사례에 여러 OS가 필요한 경우) 컨테이너에 비해 하드 활용률이 크지 않습니다. Joyent CTO의 멋진 비디오 : youtube.com/watch?v=coFIEH3vXPw
cacoder

16

아니요, 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와 창을 변경할 수 있습니다.

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

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


13
OP는 대신 Linux 서버에서 Windows 컨테이너를 실행하려고하므로 질문에 대답하지 않습니다. 그러나 나는 의견없이 공의를하는 사람들을 좋아하지 않기 때문에 공의를 주겠다
데이지

1
@Karthikeyan V : 질문에 대한 답이 아니기 때문입니다.
Stefan Steiger

나는 그것이 전에 무엇을 말했는지 잘 모르겠지만 첫 번째 진술은 당신에게 캔트를 말하고 두 번째 진술은 할 수 있다고 말합니다. 아마도 누락되었거나 혼란스러운 것입니다.
StingyJack

9

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

Windows에서는 컨테이너의 운영 체제와 동일한 운영 체제를 갖도록 가상화 (Hyper-v 사용)의 도움을 받아야하며 동일한 운영 체제를 실행할 수 있어야합니다.

Windows 용 Docker는 Hyper-v를 기반으로하는 유사한 앱으로 Windows에서 Linux Docker 컨테이너를 실행하는 데 도움이됩니다. 그러나 내가 아는 한 리눅스에서 Windows 컨테이너를 실행하는 데 도움이되는 것은 없습니다.


9

컨테이너는 OS 커널을 사용합니다. Windows 컨테이너는 프로세스를 사용하여 실행합니다. 이론적으로 말하자면 Windows 컨테이너는 Linux에서 실행할 수 없습니다.

그러나 VMstyle 솔루션을 활용하는 해결 방법이 있습니다.

Mac에서 Vagrant 및 Packer를 사용하는이 솔루션을 찾았으므로 Linux에서도 작동해야합니다. https://github.com/StefanScherer/windows-docker-machine

이 Vagrant 환경은 Windows 컨테이너를 사용하여 MacBook에서 작동하는 Docker Machine을 만듭니다. Docker for Mac Linux 컨테이너와 Windows 컨테이너간에 쉽게 전환 할 수 있습니다.

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

헤드리스 방랑자 상자 만들기

$ 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

도커 머신 생성

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

Windows 컨테이너로 전환

$ eval $(docker-machine env 2019)

7

해결 방법 1-VirtualBox 사용

이 게시물 에서 Muhammad Sahputra이 제안한 것처럼 Docker 컨테이너 내에서 VirtualBox 내에서 VBoxHeadless-less 그래픽 인터페이스를 사용하여 Windows OS 를 실행할 수 있습니다 .

또한 VM 네트워크 구성 내부의 NAT 설정은 포트 포워딩을 수행하여 Docker 컨테이너로 들어오고 나가는 트래픽을 전달할 수 있습니다. 결국 넓은 관점에서 Linux 시스템에서 모든 Windows 기반 서비스를 실행할 수 있습니다.

어쩌면 이것은 Docker 컨테이너의 일반적인 사용 사례는 아니지만 문제에 대한 흥미로운 접근법입니다.


해결 방법 2-와인 사용

간단한 적용과 복잡한 경우 에는 도커 컨테이너 내부에서 와인을 사용해보십시오 .

이 도커 허브 페이지 는 목표 달성에 도움이 될 수 있습니다.


Docker가 몇 년 전에 Windows에서 docker-machine을 사용했던 것처럼 곧 네이티브 솔루션을 출시하기를 바랍니다.


6

가상 시스템 내에서 Windows 컨테이너를 사용할 수 있습니다 (게스트 OS는 Windows 10 Pro 또는 Windows 2016 요구 사항과 일치해야 함).

예를 들어 VirtualBox를 사용할 수 있으며 시스템 / 가속화 / 반 가상화 인터페이스 내에서 Hyper-V를 활성화하면됩니다.

그 후 오류로 인해 Docker가 시작되지 않으면 설정에서 "Windows 컨테이너로 전환 ..."을 사용하십시오.

(이 답변은 수락 된 답변에 대한 의견으로 이동할 수는 있지만 평판이 충분하지 않습니다.)


3

Docker for Windows는 Linux 컨테이너를 완벽하게 실행할 수 있지만 이론적으로는 가능하지만 실제적인 이유로 인해 대화가 구현되지 않습니다.

가장 확실한 것은 Docker for Windows가 Linux VM을 자유롭게 실행할 수있는 반면 Docker for Linux는 VM 내에서이를 실행하려면 Windows 라이센스가 필요하다는 것입니다.

또한 Linux는 완벽하게 사용자 정의 할 수 있으므로 Docker for Windows에서 사용하는 Linux VM은 컨테이너를 실행하는 데 필요한 최소값 만 포함하는 몇 MB로 줄어든 반면 사용 가능한 최소 Windows 배포는 약 1.5GB입니다. 실용적이지 않을 수도 있지만 Windows의 Linux보다 훨씬 번거 롭습니다.

누군가가 Windows 라이센스와 함께 번들로 제공되고 Linux에서 Windows 컨테이너를 실행할 준비가 된 Linux 용 Docker 변형을 판매 할 수는 있지만 (그러한 제품이 존재하는지 여부는 알 수 없음) 결론은 피할 수 없다는 것입니다 Windows 공급 업체 잠금 가격 지불 : 비용과 스토리지 공간 모두.


0

현재 Linux에서 MSSQL 및 .NET Core를 실행할 수 있으므로 현재 Linux 컨테이너에서 실행할 수 있습니다.

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

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

물론 리눅스를 위해 특별히 컴파일 된 버전이 없다면 대답에 대한 직접적인 질문은 아닙니다.


3
이것은 사실이지만 질문과 관련이 없습니다. 또한 MS-SQL은 단순한 엔진 이상입니다 (리눅스에서는 파일 스트림이나 R이 제공되지 않으므로 전체 엔진도 아닙니다).
Stefan Steiger

한발 앞서 생각해야하는데 ... 왜 물어 보니? 그가 다음 중 하나를 실행하기를 원하기 때문에 묻는다면 : voila.
dagelf

2
가능한. 그러나 IMHO, 그는 이미 그 일을했기 때문에 질문을하고있을 것입니다. 이제 Linux에서 SSRS / SSAS 또는 ReportViewer와 같은 웹 양식 컨트롤과 같은 것을 실행해야합니다.
Stefan Steiger

Docker 이미지 microsoft / dotnet은 .Net Core 용입니다. 이는 .Net 4.x와 완전히 다른 것이므로 .Net Core에서 이전 .Net 용으로 설계된 앱을 실행할 수 없습니다.
j123b567

3
그들은 지원 .NET Core하고 있지 않습니다 .NET -이들은 완전히 다른 환경입니다.
Slavik Meltser

-1

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


6
좀 더 정교하게 할 수 있습니까?
Matthieu

18
승리 10
Kugel

2
나는 당시에 그것이 사실이라고 생각하기 때문에이 사람을 투표했습니다. 그러나 이제 Windows의 Docker에서 Linux 컨테이너를 실행할 수 있습니다 (Docker는 MobyLinux라는 VM에서 실행 됨).
JakeJ

실제로 창은 작은 Linux VM을 실행하여 Linux 컨테이너를 실행합니다. hyper-v 리소스를 확인하십시오
Tuğrul Karakaya
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.