TL;DR
- WSLC는 Windows에서 Linux 컨테이너를 실행하는 플랫폼으로, 사용자별 세션 프로세스와 다양한 저장소 옵션, Consommé 네트워킹 모델을 제공함.
- 권한이 높은
wslservice.exe가 가상 머신을 직접 관리하는 대신 사용자 권한으로 실행되는wslcsession.exe를 생성해 세션 작업을 처리함. - 세션마다 자체 가상 하드 디스크(VHD)를 사용하며, 컨테이너 볼륨은 Windows 경로 공유 또는 VHD 기반 저장소로 구성됨.
- Windows 경로를 공유하는 볼륨은 가상 머신 안에서
virtiofs를 통해 마운트되며,virtiofs는 Plan 9보다 약 2배 빠름. - Consommé는 이더넷 프레임을 가상 머신에서 Windows 사용자 프로세스로 전달해 DNS, UDP·TCP 라우팅, 포트 매핑을 제공하고 VPN·방화벽 호환성을 지원함.
세션 모델
- WSL과 마찬가지로 클라이언트 프로세스는 권한이 높은 Windows 서비스인
wslservice.exe를 호출하며, 이 서비스는 HCS를 통해 가상 머신을 만들고 Linux 워크플로를 실행할 수 있음. - WSL 아키텍처와 달리
wslservice.exe는 가상 머신을 직접 소유하지 않고, 호출한 사용자를 대신해 실행되는 자식 프로세스wslcsession.exe를 생성함. wslcsession.exe는 컨테이너 생성, 디렉터리 마운트, 네트워크 포트 바인딩 등 세션 작업을 사용자 대신 수행함.- 세션마다 별도 프로세스를 사용해 세션 간 강한 격리를 제공하고, 권한이 더 낮은 프로세스에서 세션 작업을 실행해 보안 경계를 강화함.
저장소
- WSLC 세션 내부 또는 Windows 저장소 스택에 데이터를 저장하는 여러 기본 기능을 제공함.
세션 가상 하드 디스크
- 각 WSLC 세션은 사용 가능한 이미지, 컨테이너, 네트워크, 볼륨 등의 세션 상태를 저장하는 자체 가상 하드 디스크(VHD)를 사용함.
wslc.exe를 사용할 때 VHD는%AppData%\Local\wslc\sessions에 저장됨.
컨테이너 볼륨
- 컨테이너 볼륨은 컨테이너가 스크래치 공간 외부에 데이터를 저장하도록 하며, 컨테이너를 삭제해도 해당 데이터는 폐기되지 않음.
- Windows 경로를 컨테이너와 공유하는 간단한 사용 방식은
wslc container run -v C:\Windows\System32\drivers\etc:/volume -it debian:latest ls /volume임. - 이 명령은 컨테이너의
/volume에서hosts,hosts.ics,lmhosts.sam,networks,protocol,services파일을 확인함. - 이러한 볼륨은 Linux 가상 머신 내부에
virtiofs공유를 마운트한 뒤 컨테이너에 제공하는 방식으로 구현됨. - 가상 머신 내부 마운트 지점은
/mnt아래에 생성되고, 이후 바인드 마운트로 컨테이너에 연결됨. - Windows 측에서는 하이퍼바이저와 가상 머신 간 상호 운용을 위해 설계된 고성능 파일 시스템인
virtiofs를 통해 마운트 지점에 접근함. virtiofs의 속도는 Plan 9보다 약 2배 빠름.
VHD 볼륨
- VHD 볼륨은 Windows 경로 대신 VHD를 기반으로 하는 특수한 컨테이너 볼륨임.
- 컨테이너에 기본 Linux 파일 시스템이 필요하거나 볼륨 크기 제한을 적용하려는 경우에 유용함.
wslc volume create --driver vhd -o SizeBytes=200000000 my-volume my-volume명령으로 200,000,000바이트 크기의 VHD 볼륨을 생성함.- 생성한 볼륨은 이름으로 지정해 하나 이상의 컨테이너에 마운트할 수 있으며, 예를 들어
wslc container run -v my-volume:/volume -it debian:latest findmnt /volume명령은/volume이/dev/sdf의ext4파일 시스템으로 마운트됐음을 표시함.
네트워킹
- WSLC는 Consommé라는 새로운 네트워킹 모델을 통해 연결을 제공함.
- Consommé는 포트 매핑과 호스트 루프백 같은 고급 시나리오에 필요한 Linux 가상 머신 네트워크 동작을 세밀하게 제어하면서 Windows 네트워킹 스택과 통합함.
- Linux 가상 머신의 모든 트래픽은 이더넷 프레임으로
virtio큐에 전달되며, 사용자 대신 실행되는 Windows 프로세스가 이를 읽음. - 해당 프로세스가 가상 머신에 제공하는 네트워크 서비스는 다음과 같음.
- DNS 쿼리 응답
- UDP 및 TCP 트래픽 라우팅
- 포트 매핑
- 가상 머신에서 외부로 라우팅되는 트래픽은 WSLC 세션 소유자를 대신해 전송되므로 일반 Windows 프로세스가 생성한 트래픽처럼 흐르며, VPN 및 방화벽과 폭넓게 호환됨.
- 컨테이너에서 Nginx를 실행하고 호스트의 8000번 포트를 컨테이너의 80번 포트에 매핑하는 흐름을 예시로 제시함.
자세히 알아보기
- WSLC는 오픈 소스이며,
microsoft/WSL에서 코드를 확인하고 직접 빌드하거나 기여할 수 있음.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요