Docker Sandbox는 비결정론적이고 자율적으로 동작하는 AI 에이전트를 안전하게 실행하기 위해 Docker가 제공하는 MicroVM 기반 샌드박싱 솔루션이다. VM 수준의 격리 강도와 컨테이너 수준의 빠른 기동 속도를 동시에 달성한다.
왜 AI 에이전트에 격리가 필요한가
기존 소프트웨어는 허용된 액션만 실행하지만, AI 에이전트는 비결정론적이다 — 환각과 프롬프트 인젝션에 취약하다. 쓰기 권한을 부여하면 rm -rf 같은 위험한 명령도 실행할 수 있다. “격리(isolation)”가 에이전트 실행 환경의 핵심 요건인 이유다.
기존 격리 방식의 한계
| 방식 | 파일 격리 | 프로세스 격리 | 네트워크 격리 | 기동 속도 | 특이사항 |
|---|---|---|---|---|---|
| chroot | ✓ | ✗ | ✗ | 즉각 | root 탈출 위험 |
| systemd-nspawn | ✓ | ✓ | ✓ | <1초 | Linux 전용, 커뮤니티 협소 |
| 컨테이너(Docker) | ✓ | ✓ | ✓ | 밀리초 | DinD(Docker-in-Docker) 시 특권 모드 필요 → 격리 약화 |
| VM | ✓✓ | ✓✓ | ✓✓ | 30~60초 | 10개 에이전트에 ~40GB RAM 소요 |
| gVisor | ✓ | ✓✓ | ✓ | 빠름 | Linux 전용, 커뮤니티 협소 |
에이전트가 다른 컨테이너를 필요에 따라 생성하는 “에이전트 플랫폼” 시나리오에서, 표준 Docker는 Docker-in-Docker 패턴을 사용해야 하고 이는 --privileged 플래그를 요구해 격리가 크게 약화된다.
Docker Sandbox: MicroVM 접근법
MicroVM은 전통 VM의 강한 격리와 컨테이너의 빠른 기동을 결합한다. Amazon의 Firecracker(2018)가 MicroVM 아키텍처를 처음 오픈소스화했으나 Linux 전용이었다. Docker Sandbox는 이를 macOS·Windows·Linux 모두에서 네이티브 동작하도록 구현했다.
3중 격리 구조
1. 하이퍼바이저 격리
샌드박스마다 자체 Linux 커널을 갖는다. 샌드박스 내부의 커널 이슈가 호스트나 다른 샌드박스에 영향을 주지 않는다.
2. 네트워크 격리
각 샌드박스는 독립 네트워크를 갖는다. 샌드박스 간 통신 불가, 호스트와의 통신 불가. 네트워크 정책으로 허용/차단을 세밀히 제어한다.
3. Docker 엔진 격리
각 샌드박스가 자체 Docker 엔진을 갖는 것이 가장 큰 특징이다. docker pull, docker compose 등 모든 Docker 명령이 내부 엔진에 대해 실행된다. 에이전트는 자신의 샌드박스 내 컨테이너만 볼 수 있다. Docker-in-Docker가 특권 모드 없이 안전하게 동작한다.
기존 VM vs 컨테이너 vs Docker Sandbox 비교
| 속성 | 전통 VM | 컨테이너 | Docker MicroVM |
|---|---|---|---|
| 격리 강도 | 강 (전용 커널) | 약 (공유 커널) | 강 (전용 커널) |
| 기동 시간 | 수 분 | 밀리초 | 초 (첫 이미지 풀 이후) |
| 공격 표면 | 크다 | 중간 | 최소 |
설치
# macOS
brew install docker/tap/sbx
# Windows
winget install Docker.sbx활용 시나리오
- 자율 코딩 에이전트: Claude Code, OpenCode 등을 YOLO 모드(자동 승인)로 실행할 때 호스트 보호
- 에이전트 플랫폼: 에이전트가 실행 시 새 컨테이너를 생성하는 시나리오에서 특권 모드 없이 안전하게 DinD 운영
- 다중 에이전트 팀: 각 에이전트를 별도 샌드박스에서 실행해 서로 간섭 없이 독립적으로 운영
- 신뢰할 수 없는 코드 실행: 외부 코드·AI 생성 코드를 호스트 영향 없이 테스트
관련 문서
- docker-model-runner-tips-local-image — Docker Model Runner로 로컬 이미지 생성하기
참고 자료
- Comparing Sandboxing Approaches for AI Agents — Docker Blog (2026-05-07)
- Why MicroVMs: The Architecture Behind Docker Sandboxes — Docker Blog