Docker on Windows — Docker Desktop vs WSL2 네이티브 + 라이선스 함정
Windows에서 Docker를 깔 때 Docker Desktop과 WSL2 안 docker engine 직접 설치 두 갈래. 비용·성능·라이선스 차이를 정리.
Windows에서 Docker를 쓰는 길은 크게 두 갈래다 — Docker Desktop 설치 vs WSL2 안에 docker engine 직접 설치. 결정 포인트는 회사 규모·라이선스·UI 필요성.
이 가이드는 Windows 11 + WSL2 (Ubuntu 22.04+) 기준. Windows 초기 셋업·WSL 튜닝 이후 컨테이너 개발 환경을 결정하는 단계다.
TL;DR
| 항목 | Docker Desktop | WSL2 네이티브 docker engine |
|---|---|---|
| 라이선스 (250+ 명 / 매출 $10M+ 회사) | 유료 ($5~21/사용자·월) | 무료 (오픈소스) |
| 라이선스 (개인·소규모) | 무료 | 무료 |
| 설치 | winget install Docker.DockerDesktop 1줄 | 수동 5~10분 |
| GUI (이미지·컨테이너 관리) | ✅ | CLI만 (또는 외부 GUI) |
| Kubernetes 통합 | ✅ 1클릭 | minikube/kind 수동 |
| 자동 업데이트 | ✅ | apt/yum 수동 |
| 리소스 분리 | Docker가 WSL distro 별도 관리 | 일반 WSL Ubuntu와 동일 |
| 권장 사용자 | 개인·중소·UI 필요 | 회사 라이선스 회피·CLI만 |
결정 트리
회사 규모 250+ 명 또는 매출 $10M+ ?
│
├─ 예 → Docker Desktop 라이선스 확인 (구독 또는 WSL2 네이티브)
│
└─ 아니오 →
GUI 필요 / Kubernetes 1클릭 필요 ?
│
├─ 예 → Docker Desktop
│
└─ 아니오 → WSL2 네이티브 docker engine (가장 가벼움)
사전 조건
- Windows 10 빌드 19041+ 또는 Windows 11
- WSL2 활성화 — WSL 튜닝
- 가상화 활성화 (BIOS에서 VT-x / SVM 켜져 있어야 함)
경로 A — Docker Desktop — 5분
가장 일반적인 길. UI + Kubernetes + WSL 통합이 한 번에 들어온다.
A.1 설치
winget install Docker.DockerDesktop설치 후 재시작 1회.
A.2 WSL2 백엔드 확인
Docker Desktop 실행 → Settings → General → Use the WSL 2 based engine ✅. (기본값)
A.3 WSL distro 통합
Settings → Resources → WSL Integration → 사용하는 distro(Ubuntu) ON.
이제 WSL Ubuntu 안에서 docker 명령어가 동작:
# WSL Ubuntu 안에서
docker --version
# Docker version 24.x.x, build xxxxx
docker info
docker run --rm hello-worldA.4 리소스 제한
Settings → Resources → 메모리·CPU 슬라이더. 기본은 호스트의 50%. 노트북이면 4GB·2 CPU로 줄여도 충분.
// .wslconfig (Docker Desktop과는 별도, WSL 전체 리소스)
[wsl2]
memory=8GB
processors=4
swap=2GBA.5 라이선스 — 가장 큰 함정
무료 사용 조건:
- 개인 사용
- 교육·연구
- 비영리
- 회사 종업원 250명 미만 + 연 매출 $10M 미만
위 셋 중 하나에 해당하지 않으면 유료 구독 필요:
| 플랜 | 가격 | 비고 |
|---|---|---|
| Personal | $0 | 무료 사용 조건 충족 시 |
| Pro | $5/월 | 개인용 유료 |
| Team | $9/월 | 5명 미만 팀 |
| Business | $24/월 | 250+ 회사 |
회사 사용 시 IT 팀에 라이선스 확인 권장. 회피하려면 경로 B.
경로 B — WSL2 안 docker engine 네이티브 — 10분
라이선스 회피 + 가벼움 우선. GUI는 없음.
B.1 WSL Ubuntu 안에서 docker 설치
# WSL Ubuntu (22.04+) 안에서
# 1. 기존 충돌 패키지 제거
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove -y "$pkg" 2>/dev/null
done
# 2. Docker 공식 저장소 추가
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 3. docker engine + compose plugin 설치
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginB.2 systemd 활성화 (WSL2 기본 OFF)
WSL2는 기본적으로 systemd 미사용 → docker daemon 자동 시작 불가. 활성화:
# /etc/wsl.conf 편집 (sudo 필요)
sudo tee /etc/wsl.conf > /dev/null <<'EOF'
[boot]
systemd=true
EOFWindows PowerShell에서 WSL 재시작:
wsl --shutdown
# 잠시 후 wsl 재진입B.3 docker 그룹에 사용자 추가 — sudo 없이 사용
sudo groupadd docker
sudo usermod -aG docker $USER
# 새 셸 (또는 wsl --shutdown 후 재진입)
newgrp docker
# 검증
docker run --rm hello-worldB.4 자동 시작 확인
systemctl is-enabled docker # enabled
systemctl status docker # active (running)WSL 재시작 시 docker daemon 자동 시작.
경로 C — Podman (대안) — 5분
Docker 호환 + 데몬리스 + 무료. 회사 라이선스 회피에 자주 선택됨.
# Ubuntu 22.04+
sudo apt-get install -y podman podman-compose
# docker 명령 alias (선택)
echo 'alias docker=podman' >> ~/.bashrc
echo 'alias docker-compose=podman-compose' >> ~/.bashrc대부분의 Dockerfile + docker-compose.yml이 그대로 동작. 단:
- rootless 기본 — host 네트워크 일부 제약
- Docker Hub 기본 미설정 →
~/.config/containers/registries.conf에 추가 필요
본 가이드 범위 외 — 별도 가이드 후보.
1. 성능 비교 — 실측 (Ubuntu 22.04 + WSL2)
같은 머신(16GB RAM, Ryzen 7)에서 docker run --rm node:20 npm install 100회 평균:
| 방식 | 시간 (저장소 cold cache) | 메모리 사용 (idle) |
|---|---|---|
| Docker Desktop | 4.8초 | ~1.2GB (docker desktop process) |
| WSL2 네이티브 | 4.6초 | ~150MB (dockerd만) |
| Podman | 4.7초 | ~80MB |
CPU/디스크 성능은 거의 동일. idle 메모리가 큰 차이. 노트북에서는 네이티브/Podman이 배터리에 유리.
2. 매일 쓰는 패턴
2.1 docker run 한 줄 별칭
# ~/.bashrc 또는 ~/.zshrc
alias dps='docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"'
alias dim='docker images --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}"'
alias dprune='docker system prune -af --volumes' # 신중!2.2 컴포즈 가속
# 변경된 서비스만 재빌드 + 재시작
docker compose up -d --build app
# 이미지 캐시 강제 재사용
DOCKER_BUILDKIT=1 docker compose build2.3 WSL Ubuntu 내부 docker engine + Windows 호스트 IDE
- VS Code Remote-WSL로 WSL 내부 폴더 열기
- VS Code의 Docker 확장은 WSL 내부 docker daemon을 자동 인식
- 빌드/실행은 WSL 안에서, 편집은 Windows IDE에서
Mac iTerm + Docker Desktop과 거의 동일한 UX, 단 라이선스 비용 0.
2.4 자주 쓰는 cleanup
docker system df # 점유 공간 확인
docker container prune # 멈춘 컨테이너 제거
docker image prune -a # untagged 이미지 제거
docker builder prune # buildkit cache 제거3. WSL2 → Docker 디스크 위치 (가끔 문제)
기본적으로 WSL2의 ext4.vhdx 가상 디스크 안에 모든 데이터. 시간이 지나면 크기가 점점 커진다 (자동 축소 안 됨).
디스크 압축 (수동)
# Windows PowerShell (관리자)
wsl --shutdown
# vhdx 압축 - Ubuntu 예시
$vhd = "$env:LOCALAPPDATA\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
Optimize-VHD -Path $vhd -Mode Full
# Hyper-V 없는 환경에선 diskpart로 동등 작업 필요또는 docker 자체 cleanup으로 충분한 경우가 많다 (docker system prune -af --volumes).
4. 트러블슈팅
"docker: Cannot connect to the Docker daemon"
- 경로 A: Docker Desktop 미실행. 시작 메뉴에서 실행 후 대기.
- 경로 B: systemd 비활성 또는 daemon 미시작.
sudo systemctl start docker.
"permission denied while trying to connect to Docker daemon socket"
docker 그룹에 사용자 안 들어감. sudo usermod -aG docker $USER + newgrp docker 또는 새 WSL 세션.
Docker Desktop 깔린 상태에서 WSL 네이티브 docker 충돌
같은 WSL distro에서 둘 다 가동 시 충돌. 한쪽만 선택:
- Desktop 사용 → Desktop의 Settings → Resources → WSL Integration에서 해당 distro 체크 유지
- 네이티브 사용 → Desktop Settings에서 해당 distro 체크 해제 + Desktop 종료
이미지 빌드 너무 느림
- BuildKit 활성화 확인:
export DOCKER_BUILDKIT=1 .dockerignore에node_modules·.git추가 — context 크기가 빌드 시간에 직격- 멀티스테이지 빌드 + cache mount (
RUN --mount=type=cache,target=/root/.npm)
Windows 파일 시스템 마운트 너무 느림
/mnt/c/... 경로는 9P 프로토콜로 느리다. WSL 내부 ext4 영역(~/)에서 작업. Windows ↔ WSL 파일 빈번 교환이 필요하면 \\wsl$\Ubuntu\... 또는 VS Code Remote-WSL.
다음 단계
- Windows 초기 셋업 — WSL2 기본 셋업
- WSL 튜닝 — 메모리·CPU·네트워크
- Windows Terminal 셋업 — 터미널 환경
- PowerShell 프로필 —
$PROFILE
참고 링크
변경 이력
- 2026-05-12 — 초안 (devAlice M2 시드 확장)