devAlice
← Windows

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 DesktopWSL2 네이티브 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-world

A.4 리소스 제한

Settings → Resources → 메모리·CPU 슬라이더. 기본은 호스트의 50%. 노트북이면 4GB·2 CPU로 줄여도 충분.

// .wslconfig (Docker Desktop과는 별도, WSL 전체 리소스)
[wsl2]
memory=8GB
processors=4
swap=2GB

A.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-plugin

B.2 systemd 활성화 (WSL2 기본 OFF)

WSL2는 기본적으로 systemd 미사용 → docker daemon 자동 시작 불가. 활성화:

# /etc/wsl.conf 편집 (sudo 필요)
sudo tee /etc/wsl.conf > /dev/null <<'EOF'
[boot]
systemd=true
EOF

Windows 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-world

B.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 Desktop4.8초~1.2GB (docker desktop process)
WSL2 네이티브4.6초~150MB (dockerd만)
Podman4.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 build

2.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
  • .dockerignorenode_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.


다음 단계

참고 링크

변경 이력

  • 2026-05-12 — 초안 (devAlice M2 시드 확장)

댓글