Windows의 Linux 컨테이너Linux containers on Windows

Linux 컨테이너는 전체 컨테이너 에코 시스템의 많은 비율을 구성 하며 개발자 환경 및 프로덕션 환경 모두에 대 한 기본입니다.Linux containers make up a huge percent of the overall container ecosystem and are fundamental to both developer experiences and production environments. 컨테이너는 컨테이너 호스트와 커널을 공유 하므로 Windows에서 직접 Linux 컨테이너를 실행 하는 것은 옵션이*아닙니다.Since containers share a kernel with the container host, however, running Linux containers directly on Windows isn't an option*. 이는 가상화가 그림에 제공 되는 위치입니다.This is where virtualization comes into the picture.

이제 Windows 및 Hyper-v 용 Docker를 사용 하 여 Linux 컨테이너를 실행 하는 두 가지 방법이 있습니다.Right now there are two ways to run Linux containers with Docker for Windows and Hyper-V:

  • 전체 Linux VM에서 Linux 컨테이너를 실행 하는 것은 일반적으로 현재는 Docker입니다.Run Linux containers in a full Linux VM - this is what Docker typically does today.
  • Linux 컨테이너를 hyper-v 격리 (LCOW)로 실행-Windows 용 Docker의 새로운 옵션입니다.Run Linux containers with Hyper-V isolation (LCOW) - this is a new option in Docker for Windows.

이 문서에서는 각 접근 방식의 작동 방식에 대해 설명 하 고 진행 중인 솔루션 및 공유를 선택 하는 경우에 대 한 지침을 제공 합니다.This article outlines how each approach works, provides guidance about when to choose which solution, and shares work in progress.

Moby VM의 Linux 컨테이너Linux containers in a Moby VM

Linux VM에서 Linux 컨테이너를 실행 하려면 Docker의 시작 가이드에 나와 있는 지침을 따르세요.To run Linux containers in a Linux VM, follow the instructions in Docker's get-started guide.

Docker는 Hyper-v에서 실행 되는 LinuxKit 기반 가상 컴퓨터를 사용 하 여 2016 (Windows에서 hyper-v 격리 또는 Linux 컨테이너를 사용할 수 있음)에서 처음 릴리스된 이후 windows 데스크톱에서 Linux 컨테이너를 실행할 수 있습니다.Docker has been able to run Linux containers on Windows desktop since it was first released in 2016 (before Hyper-V isolation or Linux containers on Windows were available) using a LinuxKit based virtual machine running on Hyper-V.

이 모델에서는 Docker 클라이언트가 Windows 데스크톱에서 실행 되지만 Linux VM에서 Docker 데몬을 호출 합니다.In this model, Docker Client runs on Windows desktop but calls into Docker Daemon on the Linux VM.

Moby VM을 컨테이너 호스트로

이 모델에서 모든 Linux 컨테이너는 단일 Linux 기반 컨테이너 호스트 및 모든 Linux 컨테이너를 공유 합니다.In this model, all Linux containers share a single Linux-based container host and all Linux containers:

  • Windows 호스트와 함께 커널을 공유 하 고 다른 Moby VM과 공유할 수 있습니다.Share a kernel with each other and the Moby VM, but not with the Windows host.
  • Linux VM에서 실행 되는 linux 컨테이너를 사용 하 여 저장소 및 네트워킹 속성의 일관성을 유지 합니다.Have consistent storage and networking properties with Linux containers running on Linux (since they are running on a Linux VM).

또한, Linux 컨테이너 호스트 (Moby VM)는 Docker 데몬 및 모든 Docker 데몬 종속성을 실행 해야 합니다.It also means the Linux container host (Moby VM) needs to be running Docker Daemon and all of Docker Daemon's dependencies.

Moby VM으로 실행 중인지 확인 하려면 Hyper-v 관리자 UI를 사용 하거나 관리자 권한 PowerShell 창에서 실행 Get-VM 하 여 moby vm에 대 한 hyper-v 관리자를 확인 하세요.To see if you're running with Moby VM, check Hyper-V Manager for Moby VM using either the Hyper-V Manager UI or by running Get-VM in an elevated PowerShell window.

Linux 컨테이너-V 격리Linux Containers with Hyper-V isolation

Windows에서 Linux 컨테이너 (LCOW)를 체험 하려면 windows 10의 linux컨테이너에서 linux 컨테이너 지침을 따르세요.To try Linux containers on Windows (LCOW), follow the Linux container instructions in Linux containers on Windows 10.

Hyper-v 격리를 사용 하는 linux 컨테이너는 컨테이너를 실행할 수 있을 만큼 충분 한 OS를 사용 하 여 최적화 된 Linux VM에서 각 Linux 컨테이너를 실행 합니다.Linux containers with Hyper-V isolation run each Linux container in an optimized Linux VM with just enough OS to run containers. Moby VM 방식과 대조적으로 각 Linux 컨테이너에는 고유한 커널과 VM 샌드박스가 있습니다.In contrast to the Moby VM approach, each Linux container has its own kernel and its own VM sandbox. 또한 Windows의 Docker에서 직접 관리 합니다.They're also managed by Docker on Windows directly.

Linux 컨테이너 (Hyper-v 격리) (LCOW)

LCOW 모델 컨테이너 관리는 Moby VM 방식과 LCOW 간에 컨테이너 관리가 어떻게 달라 지는 방식에 대해 자세히 살펴보고 각 LCOW 관리는 GRPC 및 containerd를 통해 수행 됩니다.Taking a closer look at how container management differs between the Moby VM approach and LCOW, in the LCOW model container management stays on Windows and each LCOW management happens via GRPC and containerd. 이는 LCOW에 사용 되는 Linux distro 컨테이너의 재고가 훨씬 작을 수 있다는 것을 의미 합니다.This means the Linux distro containers use for LCOW can have a much smaller inventory. 이제 최적화 된 distro 컨테이너에 대 한 LinuxKit를 사용 하 고 있지만 Kata 같은 다른 프로젝트는 비슷한 고도로 조정 된 Linux distros (Linux 지우기)도 구축 됩니다.Right now, we're using LinuxKit for the optimized distro containers use, but other projects like Kata are building similar highly-tuned Linux distros (Clear Linux) as well.

각 LCOW에 대해 자세히 살펴봅니다.Here's a closer look at each LCOW:

LCOW 아키텍처

LCOW를 실행 하 고 있는지 확인 하려면으로 C:\Program Files\Linux Containers이동 합니다.To see if you're running LCOW, navigate to C:\Program Files\Linux Containers. Docker가 LCOW를 사용 하도록 구성 된 경우 여기에 몇 가지 파일이 있으며, 여기에는 Hyper-v 격리에서 실행 되는 각 컨테이너에서 실행 되는 최소 LinuxKit distro 포함 됩니다.If Docker is configured to use LCOW, there will be a few files here containing the minimal LinuxKit distro that runs in each container running under Hyper-V isolation. 최적화 된 VM 구성 요소는 Moby VM의 LinuxKit image 보다 훨씬 작은 100 MB 미만입니다.Notice the optimized VM components are less than 100 MB, much smaller than the LinuxKit image in Moby VM.

작업 진행 중Work in progress

LCOW는 활성 개발 아래에 있습니다.LCOW is under active development. GitHub 에서 Moby 프로젝트의 진행 중인 진행률 추적Track ongoing progress in the Moby project on GitHub

마운트 바인딩Bind mounts

docker run -v ...으로 마운팅 볼륨을 바인딩하면 Windows NTFS 파일 시스템에서 파일을 저장하므로 POSIX 작업을 하려면 변환이 필요합니다.Bind mounting volumes with docker run -v ... stores the files on the Windows NTFS filesystem, so some translation is needed for POSIX operations. 일부 파일 시스템 작동이 현재 부분적으로 구현되거나 구현되지 않습니다. 이에 따라 일부 앱이 호환되지 않을 수 있습니다.Some filesystem operations are currently partially or not implemented, which may cause incompatibilities for some apps.

바인딩되어 탑재된 볼륨에 대해 이러한 작업은 현재 작동되지 않습니다.These operations are not currently working for bind-mounted volumes:

  • MkNodMkNod
  • XAttrWalkXAttrWalk
  • XAttrCreateXAttrCreate
  • LockLock
  • GetlockGetlock
  • AuthAuth
  • FlushFlush
  • INotifyINotify

완전히 구현되지 않는 다음과 같은 사항도 있습니다.There are also a few that are not fully implemented:

  • GetAttr – Nlink 개수가 항상 2개로 보고됩니다.GetAttr – The Nlink count is always reported as 2
  • Open – ReadWrite, WriteOnly, 및 ReadOnly 플래그만 구현됩니다.Open – Only ReadWrite, WriteOnly, and ReadOnly flags are implemented

이러한 응용 프로그램에는 모두 볼륨 매핑이 필요 하며, 제대로 시작 되거나 실행 되지 않습니다.These applications all require volume mapping and will not start or run correctly.

  • MySQLMySQL
  • PostgreSQLPostgreSQL
  • WordPressWordPress
  • JenkinsJenkins
  • MariaDBMariaDB
  • RabbitMQRabbitMQ

추가 정보Extra information

LCOW를 설명 하는 Docker 블로그Docker blog describing LCOW

Linux 컨테이너 비디오Linux Container Video

LinuxKit LCOW-커널 및 빌드 지침LinuxKit LCOW-kernel plus build instructions

Moby VM vs LCOW를 사용 하는 경우When to use Moby VM vs LCOW

Moby VM을 사용 하는 경우When to use Moby VM

지금 바로 다음의 사용자에 게 Linux 컨테이너를 실행 하는 Moby VM 메서드를 제공 하는 것이 좋습니다.Right now, we recommend the Moby VM method of running Linux containers to people who:

  • 안정적인 컨테이너 환경을 원하는 경우Want a stable container environment. 이것은 Windows 기본값에 대 한 Docker입니다.This is the Docker for Windows default.
  • Windows 또는 Linux 컨테이너를 실행 하지만 동시에는 거의 작동 하지 않습니다.Run Windows or Linux containers, but rarely both at the same time.
  • Linux 컨테이너 간에 복잡 하거나 사용자 지정 네트워킹 요구 사항이 있습니다.Have complicated or custom networking requirements between Linux containers.
  • Linux 컨테이너 간에는 커널 격리 (Hyper-v 격리)가 필요 하지 않습니다.Don't need kernel isolation (Hyper-V isolation) between Linux containers.

LCOW를 사용 하는 경우When to use LCOW

지금 바로 다음 사용자에 게 LCOW 것을 권장 합니다.Right now, we recommend LCOW to people who:

  • 최신 기술을 테스트 하고자 합니다.Want to test our newest technology.
  • 한 번에 Windows 및 Linux 컨테이너를 실행 합니다.Run Windows and Linux containers at the same time.
  • Linux 컨테이너 간에는 커널 격리 (Hyper-v 격리)가 필요 합니다.Need kernel isolation (Hyper-V isolation) between Linux containers.

고려 하는 다른 옵션Other options we considered

Windows에서 Linux 컨테이너를 실행 하는 방법을 살펴보면 WSL로 간주 됩니다.When we were looking at ways to run Linux containers on Windows, we considered WSL. 궁극적으로 Windows의 Linux 컨테이너가 Linux의 Linux 컨테이너와 일관성을 유지 하도록 가상화 기반 접근 방식을 선택 했습니다.Ultimately, we chose a virtualization-based approach so that Linux containers on Windows are consistent with Linux containers on Linux. Hyper-v를 사용 하면 LCOW 더욱 안전 해 집니다.Using Hyper-V also makes LCOW more secure. 나중에 다시 평가할 수 있지만 지금은 LCOW에서 Hyper-v를 사용 합니다.We may re-evaluate in the future, but for now, LCOW will continue to use Hyper-V.

생각이 있으면 GitHub 또는 UserVoice를 통해 피드백을 보내 주세요.If you have thoughts, please send feedback through GitHub or UserVoice. 관심 있는 특정 환경에 대 한 사용자 의견을 확인 하세요.We especially appreciate feedback about the specific experience you'd like to see.