터미널이나 PoswerShell, Git bash 등 make 또는 docker-compose 명령을 실행하면 컨테이너는 Windows 용 Docker 엔진을 돌린다. WSL 안에서 만든 컨테이너와는 완전히 별개다. 겉보기에는 Windows 에서 컨테이너를 띄우는 것 같지만, 실제로는 WSL2 Linux 커널 위에서 컨테이너가 돌아가고 있다.
Docker Desktop 의 작동 구조 때문에 그렇다.
Docker 는 리눅스 컨테이너 기술이 원래 Linux 커널 기능(Cgroups, Namespaces 등) 에 의존한다. Windows 에는 Linux 커널이 없으니, 예전엔 Hyper-V VM 으로 리눅스 환경을 흉내 냈었다. 하지만 지금의 Docker Desktop 은 성능 때문에 WSL2 기반 경량 Linux VM 을 사용한다. 즉, Windows 에서 MySQL 컨테이너를 실행해도, 백그라운드에서 WSL2 가 내부 리눅스 OS 를 돌려주고 그 안에서 MySQL 이 실행되는 거다.
흐름은 이렇게 된다.
Windows (명령 실행)
↓
Docker CLI / Desktop
↓
WSL2 Linux VM (Docker Engine 실행)
↓
MySQL 컨테이너 (Linux 기반)
WSL 안에서 make 또는 docker-compose 명령을 실행하면 WSL 내부에서 Docker 가 설치되어 있거나, Docker Desktop 이 WSL 통합을 켰을 경우 컨테이너는 WSL 내부 환경에서 돌아간다. WSL 내에서만 접근 가능한 네트워크, 파일 시스템 등을 활용 가능
구분 | Windows에서 실행 | WSL에서 실행 |
---|---|---|
도커 엔진 위치 | Windows용 Docker Desktop 엔진 (Windows 커널 + Linux VM 위) | WSL2의 Linux 커널 위 (Docker Desktop 통합 또는 WSL 전용 도커) |
파일 경로 | Windows 파일 시스템(C:\...) | Linux 파일 시스템(/home/user/...) |
네트워크 환경 | Windows 네트워크 기준 | WSL 내부 네트워크 기준 |
성능 | Windows ↔ Linux VM 간 파일 I/O가 느릴 수 있음 | WSL 내부 실행 시 Linux 네이티브와 유사한 속도 |
볼륨 마운트 | C:\ 경로 마운트 시 성능 저하 | /home 등 WSL 내부 경로 마운트 시 빠름 |
Windows에서 실행
실제로는 Docker Desktop이 내부적으로 WSL2 VM을 사용하지만, Windows 경로를 마운트하면 I/O가 느려진다.
대규모 코드 변경, DB 데이터 파일 등에서 병목 가능
WSL에서 실행
WSL의 Linux 파일시스템에서 직접 실행하면 거의 리눅스 서버와 같은 속도
파일 접근이 빠르고, 개발 환경이 리눅스와 동일해 배포 테스트가 정확함
Windows 는 파일시스템(C:...) 에 볼륨 마운트 → 리눅스 VM ↔ 윈도우 NTFS 파일시스템 변환 과정 때문에 느림
WSL 은 내부 경로(/home/user/...) 에 볼륨 마운트 → 리눅스 네이티브 ext4 파일시스템으로 변환 과정이 없음 → 속도 빠름
Windows
윈도우 경로 기반으로 IDE, 툴과 연동이 쉬움
하지만 서버 환경(리눅스)와 미묘하게 다를 수 있음
WSL
서버 환경과 거의 100% 동일
배포 시 발생할 수 있는 경로/권한 문제를 미리 발견 가능
단, IntelliJ에서 WSL 프로젝트를 열 때 설정이 조금 번거로울 수 있음
Windows에서 실행 → 편하지만 성능, 환경 차이로 서버와 100% 동일하지 않음.
가벼운 테스트나 빠른 실행은 Windows에서 실행 추천
WSL에서 실행 → 리눅스 서버와 동일, 성능 좋음, 배포 전 테스트에 유리.
로컬에서 DB, 로그, 빌드 아티팩트처럼 I/O가 많은 데이터는 WSL에서 실행 추천