무엇을 어떻게 측정했나
세 앱 모두 같은 Mac에서 실행했습니다. Apple M5 Max, 메모리 36 GiB, macOS 27.2입니다. 각각 CPU 8개와 12 GiB로 설정하고 자체 명령으로 새로 시작해 단독 실행했습니다. 다른 앱은 종료하고 프로세스가 남아 있지 않은지 확인했습니다. 유휴 수치는 안정화에 45초를 기다린 뒤 60초 동안 측정했으며, 앱과 보조 프로세스, Linux 시스템을 포함한 엔진 등 제품의 모든 프로세스를 집계했습니다. 컨테이너 수치는 워밍업 후 5회 표본의 중앙값이며, 차이가 10 % 이내면 동등한 것으로 봅니다.
Oxcart 0.1.2는 2026-10-10에 포함된 docker 29.9 클라이언트로 측정했습니다. OrbStack 2.2.3과 Docker Desktop 4.94.0은 같은 날 더 이른 시간에 같은 Mac과 측정 도구에서 docker 29.4로 측정했습니다. 각 제품은 자체 Linux 커널을 실행합니다. 이는 한 대의 기기에서 제품마다 한 차례 실행한 측정이지 연구가 아니며, 방법은 모두 같습니다.
컨테이너가 없을 때 메모리 사용량
| 앱 | 유휴 시 메모리 사용량 |
|---|---|
| Oxcart 0.1.2 | 776 MiB |
| OrbStack 2.2.3 | 792 MiB |
| Docker Desktop 4.94.0 | 1,745 MiB |
컨테이너 앱이 단지 준비된 상태를 유지하는 데 쓰는 메모리입니다. 작업 사이의 휴식이나 회의 중, 또는 앱을 하루 종일 열어 두는 노트북에서도 발생합니다. 여기서는 Oxcart와 OrbStack이 비슷하고, Docker Desktop은 두 배 넘게 유지합니다.
컨테이너 모니터링 부하
대시보드, 터미널 모니터, 코딩 에이전트는 컨테이너 통계를 계속 조회하므로, 이를 읽을 때의 부하는 생각보다 중요합니다.
| 측정 항목 | Oxcart | OrbStack | Docker Desktop |
|---|---|---|---|
스트리밍 docker stats 클라이언트 하나의 CPU 사용량 | 1.29% | 3.81% | 5.45% |
docker stats --no-stream | 1,038 ms | 2,050 ms | 2,054 ms |
CPU는 코어 하나의 백분율입니다. Oxcart 0.1.2는 2026-10-10에 포함된 docker 29.9 클라이언트로 측정했고, OrbStack 2.2.3과 Docker Desktop 4.94.0은 같은 날 더 이른 시간에 같은 Mac과 측정 도구에서 docker 29.4로 측정했습니다.
컨테이너 20개를 실행할 때 Oxcart 자체 메뉴 막대 항목은 코어 하나의 0.0004%를 사용하고 초당 0.033회의 깨우기를 발생시킵니다. 이 수치는 앱만 포함하며 엔진은 제외합니다.
부하가 있을 때: 비슷한 수준
컨테이너가 실제 작업을 시작하면 작업 자체의 비중이 커져 앱들의 수치가 비슷해집니다. 같은 측정에서 얻은 두 항목입니다.
| 측정 항목 | Oxcart | OrbStack | Docker Desktop |
|---|---|---|---|
| 컨테이너 내부 CPU 1초당 Mac CPU 사용량 | 1.10× | 1.11× | 1.09× |
| 256 MiB에 접근하는 컨테이너당 Mac 메모리 | 235 MiB | 266 MiB | 236 MiB |
실제로 CPU에 성능이 제한되는 빌드나 테스트는 세 앱 어디서나 Mac CPU를 비슷하게 사용하며, 256 MiB를 사용하는 컨테이너는 Mac에서도 대략 그만큼을 차지합니다. 차이는 작업 주변의 처리에 있습니다. 각 docker run, stop, 정리에 걸리는 시간에서 Oxcart가 앞섭니다 (Docker Desktop과 비교, OrbStack과 비교).
작업이 끝나면 메모리는 macOS로
Oxcart 0.1.3부터 마지막 컨테이너가 멈춘 뒤 약 30 s 후 Oxcart가 Linux 측을 재시작하고 메모리를 macOS에 돌려줍니다. 마지막 컨테이너가 멈춘 뒤 32 s 후 3,319 MiB에서 570 MiB로 감소했습니다 (두 번째 실행: 3,352에서 579 MiB). 실행 중인 컨테이너가 없을 때만 일어납니다. 백그라운드에서 처리되므로, 재시작 중 도착한 Docker 명령은 완료될 때까지 기다리기만 하면 됩니다.
Oxcart 0.1.3에서 측정했습니다.
자신의 Mac에서 컨테이너 앱의 메모리 측정하기
- 부하가 없는 Mac에서 시작하세요. 다른 컨테이너 앱을 종료하고 컨테이너를 멈춘 뒤, 앱을 시작하고 1분 동안 기다려 시작 작업이 마무리되게 하세요.
- 앱이 실행하는 모든 프로세스를 찾으세요. 활성 상태 보기에서 메모리 탭을 열고 앱 이름을 검색하세요. Linux 측을 실행하는 프로세스가 보통 가장 큽니다. 터미널에서는
ps -axo pid,rss,comm | grep -i <app>로 목록을 볼 수 있습니다. - macOS가 집계하는 메모리를 확인하세요. 활성 상태 보기의 메모리 열이나 각 프로세스에 대한
footprint <pid>를 사용하고 값을 합하세요. 상주 크기(RSS)만으로는 공유 메모리와 압축 메모리를 과다 또는 과소 집계할 수 있습니다. - 작업 부하가 실행 중일 때 측정하세요. 평소 사용하는 Compose 스택을 시작해 몇 분간 사용한 뒤 같은 수치를 다시 확인하세요.
docker stats --no-stream은 Linux 측에서 각 컨테이너가 사용하는 양을 보여 줍니다. - 중지한 뒤 측정하세요. 모두 중지하고 1분 후 수치를 다시 확인하세요. 이것이 작업 사이에 앱이 유휴 상태로 유지하는 메모리입니다.
중요한 설정
- 앱 제한. 각 앱은 Linux 측이 사용할 수 있는 CPU와 메모리를 제한합니다. Oxcart에서는 Settings › Resources 또는
oxcart config set cpus=6과oxcart config get을 사용합니다. 값은 다음 시작 시 적용됩니다. 스택에 필요한 양보다 훨씬 높은 제한은 이점이 없습니다. - 컨테이너별 제한.
docker run의--memory,--cpus,--pids-limit또는 Compose의mem_limit,cpus,pids_limit은 통제되지 않는 서비스 하나가 모든 자원을 차지하는 것을 막습니다. - 사용하지 않는 것은 중지하세요. 다시 사용할 스택에는
docker compose stop을, 그렇지 않은 스택에는docker compose down을 사용하세요. Oxcart에서는 마지막 컨테이너를 멈추는 것이 메모리를 macOS로 돌려주는 조건이기도 합니다. - 적은 부하로 모니터링하세요. 스크립트에서는
docker stats --no-stream을 우선 사용하고, 코딩 에이전트에는 원시 통계 대신 요약 도구를 제공하세요 (AI 코딩 에이전트를 위한 Docker).
질문
Docker는 Mac에서 메모리를 얼마나 사용하나요?
앱과 컨테이너의 작업에 따라 다릅니다. 12 GiB로 설정한 Apple Silicon Mac 한 대에서 실행 중인 컨테이너 없이 각 제품의 모든 프로세스를 집계했을 때 Oxcart 776 MiB, OrbStack 792 MiB, Docker Desktop 1,745 MiB를 측정했습니다. 컨테이너가 실행되면 메모리는 작업 부하에 따라 달라집니다.
Docker Desktop은 왜 메모리를 많이 사용하나요?
Mac의 모든 컨테이너 앱은 Linux 시스템을 실행하며, 작업 부하가 접근하는 메모리는 Mac에서 하나의 큰 프로세스로 나타납니다. 이번 측정에서 Docker Desktop은 유휴 사용량도 세 앱 중 가장 높았으며, 컨테이너 없이 1,745 MiB였습니다. 설정에서 메모리 제한을 낮추고 필요 없는 컨테이너를 중지한 뒤, 같은 Mac에서 유휴 상태로 776 MiB를 사용한 Oxcart 같은 대안과 비교해 보세요.
Oxcart는 메모리를 macOS에 돌려주나요?
네, 실행 중인 컨테이너가 없으면 돌려줍니다. Oxcart 0.1.3부터 마지막 컨테이너가 멈춘 뒤 약 30 s 후 Linux 측을 재시작해 메모리를 macOS에 반환합니다. 출시 전 버전의 측정에서는 마지막 컨테이너가 멈춘 뒤 32 s 후 3,319 MiB에서 570 MiB로 줄었습니다. 실행 중인 컨테이너가 없을 때만 일어납니다.
컨테이너의 메모리와 CPU를 어떻게 제한하나요?
컨테이너별로 docker run --memory 512m --cpus 1.5 …을 사용하거나 Compose 서비스에 mem_limit과 cpus를 설정하세요. Oxcart는 docker update로 메모리, CPU, 프로세스 수 제한 변경을 적용하며, 재시작으로 컨테이너가 다시 생성되어도 유지합니다.
Oxcart가 사용할 CPU 수와 메모리를 어떻게 설정하나요?
Settings › Resources에서 설정하거나 터미널에서 oxcart config set cpus=4를 사용하세요. oxcart config get으로 실제 값과 Mac의 한도를 확인할 수 있습니다. 새 값은 다음 시작 시 적용됩니다.
docker stats가 Mac을 느리게 만드나요?
실시간 docker stats 스트림은 모든 앱에서 CPU를 사용합니다. 코어 하나 기준으로 Oxcart 1.3 %, OrbStack 3.8 %, Docker Desktop 5.5 %를 측정했으며, Oxcart가 가장 낮았습니다. 컨테이너 20개에 대한 일회성 docker stats --no-stream은 Oxcart에서 1.0 s가 걸렸고, 나머지 둘의 약 절반이었습니다.
출처와 방법
- Oxcart 0.1.2, OrbStack 2.2.3, Docker Desktop 4.94.0을 2026-10-10에 같은 Mac(Apple M5 Max, 36 GiB, macOS 27.2)에서 측정했습니다. 각각 CPU 8개와 12 GiB로 설정하고 한 번에 한 제품만 실행했습니다.
- 마지막 컨테이너 중지 후 메모리 반환: Oxcart 0.1.3.
- 메뉴 막대의 부하: 2026-10-09에 Oxcart에서 측정했습니다.