그것은 실행할 수 있습니다 윈도우 컨테이너 에 리눅스 ? 이 시나리오는 .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 사용)의 도움을 받아야하며 동일한 운영 체제를 실행할 수 있어야합니다.
Windows 용 Docker는 Hyper-v를 기반으로하는 유사한 앱으로 Windows에서 Linux Docker 컨테이너를 실행하는 데 도움이됩니다. 그러나 내가 아는 한 리눅스에서 Windows 컨테이너를 실행하는 데 도움이되는 것은 없습니다.
답변
컨테이너는 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 컨테이너간에 쉽게 전환 할 수 있습니다.
헤드리스 방랑자 상자 만들기
$ 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)
답변
해결 방법 1-VirtualBox 사용
이 게시물 에서 Muhammad Sahputra이 제안한 것처럼 Docker 컨테이너 내에서 VirtualBox 내에서 VBoxHeadless-less 그래픽 인터페이스를 사용하여 Windows OS 를 실행할 수 있습니다 .
또한 VM 네트워크 구성 내부의 NAT 설정은 포트 포워딩을 수행하여 Docker 컨테이너로 들어오고 나가는 트래픽을 전달할 수 있습니다. 결국 넓은 관점에서 Linux 시스템에서 모든 Windows 기반 서비스를 실행할 수 있습니다.
어쩌면 이것은 Docker 컨테이너의 일반적인 사용 사례는 아니지만 문제에 대한 흥미로운 접근법입니다.
해결 방법 2-와인 사용
간단한 적용과 복잡한 경우 에는 도커 컨테이너 내부에서 와인을 사용해보십시오 .
이 도커 허브 페이지 는 목표 달성에 도움이 될 수 있습니다.
Docker가 몇 년 전에 Windows에서 docker-machine을 사용했던 것처럼 곧 네이티브 솔루션을 출시하기를 바랍니다.
답변
가상 시스템 내에서 Windows 컨테이너를 사용할 수 있습니다 (게스트 OS는 Windows 10 Pro 또는 Windows 2016 요구 사항과 일치해야 함).
예를 들어 VirtualBox를 사용할 수 있으며 시스템 / 가속화 / 반 가상화 인터페이스 내에서 Hyper-V를 활성화하면됩니다.
그 후 오류로 인해 Docker가 시작되지 않으면 설정에서 “Windows 컨테이너로 전환 …”을 사용하십시오.
(이 답변은 수락 된 답변에 대한 의견으로 이동할 수는 있지만 평판이 충분하지 않습니다.)
답변
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 공급 업체 잠금 가격 지불 : 비용과 스토리지 공간 모두.