본문 바로가기
DEV & DevOps/Backend

Docker 환경 구축 — OrbStack vs Docker Desktop vs Colima 비교 [Mac Mini 홈서버 완전 정복 3/10]

by Hoft 2026. 3. 24.

🖥️ Mac Mini 홈서버 완전 정복 시리즈

3/10 — Docker 환경 구축

OrbStack vs Docker Desktop vs Colima 비교

2편에서 Mac Mini를 24/7 헤드리스 서버로 최적화했습니다. 이제 그 위에 Docker를 올릴 차례입니다. 문제는 macOS에서 Docker를 돌리는 방법이 여러 가지라는 것입니다. Docker Desktop, OrbStack, Colima — 어떤 걸 써야 할까요? 이 글에서는 macOS에서 Docker가 돌아가는 원리를 먼저 이해하고, 세 가지 도구를 성능·메모리·편의성 기준으로 비교한 후, OrbStack 기반으로 첫 컨테이너를 띄우는 것까지 진행합니다.

📌 이런 분들에게 추천합니다

  • Mac Mini에 Docker를 처음 설치하려는데 어떤 도구를 쓸지 모르겠는 분
  • Docker Desktop이 무겁다고 느끼고 대안을 찾는 분
  • Apple Silicon에서 Docker 이미지 호환성 문제를 겪고 있는 분
  • Docker Compose의 기본 사용법을 빠르게 익히고 싶은 분


1. macOS에서 Docker가 돌아가는 원리

Docker를 이해하려면 한 가지 핵심 사실을 알아야 합니다. Docker 컨테이너는 Linux 커널 기능(cgroups, namespaces)에 의존합니다. 즉, Docker는 본질적으로 Linux에서만 네이티브로 실행됩니다.

그러면 macOS에서 Docker는 어떻게 돌아가는 걸까요?

macOS에서 Docker의 구조

macOS → 경량 Linux VM → Docker Engine → 컨테이너들

Docker Desktop이든, OrbStack이든, Colima든 — 결국 macOS 위에 작은 Linux 가상머신(VM)을 띄우고, 그 안에서 Docker Engine을 실행하는 구조입니다. 차이는 이 VM을 얼마나 효율적으로 관리하느냐에 있습니다.

각 도구가 사용하는 가상화 기술을 보면 성능 차이가 왜 나는지 이해됩니다.

도구 VM 기술 파일 공유 x86 에뮬레이션
Docker Desktop Apple Virtualization
Framework
VirtioFS QEMU + Rosetta
OrbStack Apple Virtualization
Framework (최적화)
VirtioFS
(동적 캐싱)
Rosetta (네이티브)
Colima Lima + Apple VZ
또는 QEMU
VirtioFS / 9P QEMU + Rosetta

💡 핵심 포인트 — Linux에서 Docker를 돌릴 때는 VM 오버헤드가 없습니다. macOS에서는 어떤 도구를 쓰든 VM 위에서 돌아가므로, 네이티브 Linux 대비 약간의 성능 차이가 있습니다. 다만 Apple Silicon + Apple Virtualization Framework 조합은 매우 효율적이어서, 체감 차이는 거의 없는 수준입니다.

2. OrbStack vs Docker Desktop vs Colima — 3파전 비교

항목 OrbStack Docker Desktop Colima
🚀 시작 시간 약 2초 15~30초 10~20초
💾 유휴 RAM 약 200~300MB 2~4GB 약 400MB
⚡ 유휴 CPU ~0.1% 1~5% 0.5~2%
🖥️ GUI 네이티브 macOS 앱 풀 GUI 대시보드 CLI만
🐳 Docker 호환 완전 호환 공식 Docker 완전 호환
☸️ Kubernetes 내장 (경량) 내장 지원 (옵션)
🐧 Linux VM 15개 배포판 지원 제한적 Lima 기반
💰 가격 개인 무료
상업 $8/월
개인 무료
Pro $9/월
완전 무료
(오픈소스)
🖥️ 플랫폼 macOS 전용 macOS, Windows macOS, Linux
🎯 적합한 사람 macOS 사용자
성능 중시
팀 협업
크로스 플랫폼
미니멀리스트
CLI 선호

각 도구의 핵심 특징

🔵 OrbStack — "macOS 네이티브 경험"

Swift로 만든 네이티브 macOS 앱입니다. Apple Virtualization Framework를 극한까지 최적화해서, 2초 만에 시작되고 유휴 상태에서 거의 리소스를 소비하지 않습니다. Docker CLI, Docker Compose가 완전 호환되어 기존 워크플로를 그대로 사용할 수 있습니다. x86 이미지를 Rosetta로 효율적으로 에뮬레이션하는 것도 장점입니다.

개인용은 무료이고, 상업용은 월 $8(연 $96)입니다. 홈서버는 개인용이므로 무료로 사용 가능합니다.

🟢 Docker Desktop — "공식 + 풀 기능"

Docker 공식 도구입니다. 가장 풍부한 기능(GUI 대시보드, 이미지 관리, 볼륨 브라우저, Extensions 마켓플레이스)을 제공합니다. macOS와 Windows 모두 지원해서 크로스 플랫폼 팀에 적합합니다.

단점은 리소스 소비입니다. 유휴 상태에서도 2~4GB RAM을 점유하고, 가끔 CPU 스파이크가 발생합니다. 24/7 돌아가는 홈서버에서 이 오버헤드는 부담이 됩니다. 개인/소규모 기업(250인 미만, 매출 $10M 미만)은 무료이고, Pro는 월 $9입니다.

🟠 Colima — "미니멀리스트의 선택"

Lima VM 위에 Docker 런타임만 올린 초경량 도구입니다. GUI 없이 CLI만으로 동작하며, 유휴 RAM이 약 400MB로 가볍습니다. 완전 오픈소스(무료)이고, 설정을 세밀하게 제어할 수 있어서 자동화나 스크립팅에 좋습니다.

단점은 부팅 시 자동 시작이 기본 지원되지 않아 별도 설정이 필요하고, 네트워킹이 Docker Desktop/OrbStack보다 복잡할 수 있습니다.

🏆 이 시리즈의 선택: OrbStack

홈서버 용도에서 OrbStack을 추천하는 이유는 명확합니다.

24/7 서버에서 리소스 효율이 가장 중요 — OrbStack의 유휴 RAM 200~300MB vs Docker Desktop의 2~4GB

개인 홈서버는 무료 — 상업용 라이선스가 필요 없습니다

Docker CLI/Compose 완전 호환 — 기존 Docker 명령어와 Compose 파일을 그대로 사용합니다

부팅 시 자동 시작 — 서버 재시작 후 수동 개입 없이 Docker가 올라옵니다

💡 OrbStack이 아닌 다른 도구를 선택하더라도 이후 시리즈의 Docker Compose 명령어나 설정 파일은 모두 동일하게 작동합니다. 도구 선택은 "Docker Engine을 어떻게 띄우느냐"의 차이이지, Docker 자체의 사용법은 같습니다.

3. OrbStack 설치 및 기본 설정

3-1. 설치

Homebrew로 한 줄이면 됩니다. 2편에서 이미 Homebrew를 설치했으므로 바로 진행합니다.

brew install orbstack

또는 orbstack.dev에서 .dmg를 다운받아 설치할 수도 있습니다. 설치 후 Applications에서 OrbStack을 실행하면 초기 설정이 자동으로 진행됩니다.

3-2. Docker CLI 확인

OrbStack은 Docker CLI를 자동으로 세팅합니다. 터미널에서 바로 사용 가능합니다.

# Docker 버전 확인
docker version

# Docker Compose 버전 확인
docker compose version

# Docker 컨텍스트 확인 (orbstack이면 정상)
docker context ls

💡 Docker Desktop에서 마이그레이션하는 경우 — 기존에 Docker Desktop을 쓰고 있었다면, OrbStack 설치 후 docker context use orbstack 명령으로 컨텍스트만 전환하면 됩니다. 기존 이미지와 볼륨을 가져오려면 orb migrate docker를 실행하세요.

3-3. 부팅 시 자동 시작 설정

홈서버는 전원이 들어오면 Docker도 자동으로 올라와야 합니다. OrbStack은 이 설정을 기본 지원합니다.

OrbStack 앱 → 설정(⌘,) → General → "Start at Login" 체크

2편에서 설정한 자동 로그인과 합치면, 정전 → 자동 부팅 → 자동 로그인 → OrbStack 자동 시작 → Docker 컨테이너 자동 복구까지 전 과정이 무인으로 동작합니다.

3-4. 리소스 할당

OrbStack은 기본적으로 macOS와 동적으로 리소스를 공유합니다. Docker Desktop처럼 고정 메모리/CPU를 할당하지 않아서, 시스템 전체 리소스를 효율적으로 사용합니다.

💡 Mac Mini를 순수 서버로만 쓴다면 별도의 리소스 제한이 필요 없습니다. 만약 개발 작업도 병행한다면, Docker가 사용하는 메모리를 docker stats로 모니터링하면서 필요에 따라 컨테이너별 리소스 제한(mem_limit, cpus)을 걸 수 있습니다.

4. ARM64 이미지 호환성 이슈 + 해결법

Mac Mini M4는 ARM64(AArch64) 아키텍처입니다. Docker 이미지 대부분은 원래 x86(amd64)용으로 만들어졌는데, 최근 몇 년간 멀티 아키텍처 이미지가 빠르게 늘면서 상황이 많이 좋아졌습니다. 하지만 여전히 문제가 될 수 있는 경우가 있습니다.

현재 상황 (2025~2026년 기준)

✅ ARM64 네이티브 지원 (대부분의 인기 이미지)

  • Nginx, Apache, Caddy (웹서버)
  • PostgreSQL, MySQL, MariaDB, MongoDB, Redis (데이터베이스)
  • Node.js, Python, Go, Java (런타임)
  • Grafana, Prometheus, Uptime Kuma (모니터링)
  • Portainer, Homepage (관리 도구)
  • Jellyfin, Immich, AdGuard Home (셀프호스팅)

⚠️ 주의가 필요한 경우

  • 소규모/개인 프로젝트의 니치한 이미지 — x86 전용일 수 있음
  • 오래된 이미지 버전 — 최신 버전은 ARM64 지원, 옛 버전은 미지원
  • 상용 소프트웨어 이미지 — 라이선스 관련 제약으로 ARM 빌드가 늦을 수 있음

문제 발생 시 대처법

no matching manifest for linux/arm64 에러가 나오면 해당 이미지가 ARM64를 지원하지 않는 것입니다.

방법 1: Rosetta 에뮬레이션으로 실행 (빠른 해결)

# --platform 플래그로 amd64 에뮬레이션 강제
docker run --platform linux/amd64 이미지이름:태그

OrbStack은 Rosetta를 활용해서 QEMU보다 훨씬 빠르게 x86 이미지를 에뮬레이션합니다. 가벼운 서비스라면 체감 성능 차이가 크지 않습니다.

방법 2: ARM64 대안 이미지 찾기 (권장)

# 이미지의 아키텍처 지원 현황 확인
docker manifest inspect 이미지이름:태그

Docker Hub에서 같은 기능의 ARM64 지원 이미지를 찾는 것이 성능 면에서 최선입니다. 예를 들어 linuxserver/ 시리즈 이미지는 대부분 멀티 아키텍처를 지원합니다.

방법 3: Docker Compose에서 플랫폼 지정

# docker-compose.yml에서 특정 서비스만 amd64로 실행
services:
  legacy-app:
    image: legacy-image:latest
    platform: linux/amd64

💡 이 시리즈에서 사용하는 모든 이미지(Portainer, Uptime Kuma, Homepage, Nginx Proxy Manager, Grafana, Prometheus 등)는 ARM64를 네이티브 지원합니다. 에뮬레이션 걱정 없이 진행할 수 있습니다.

5. Docker Compose 기본 사용법

Docker Compose는 여러 컨테이너를 하나의 YAML 파일로 정의하고, 한 번에 시작/중지하는 도구입니다. 홈서버에서는 거의 모든 서비스를 Docker Compose로 관리하게 됩니다.

핵심 명령어 7가지

명령어 기능 자주 쓰는 옵션
docker compose up -d 컨테이너 생성 및 백그라운드 실행 -d (detached)
docker compose down 컨테이너 중지 및 삭제 -v (볼륨도 삭제)
docker compose ps 실행 중인 컨테이너 상태 확인  
docker compose logs 로그 확인 -f (실시간 추적)
docker compose pull 최신 이미지 다운로드  
docker compose restart 컨테이너 재시작 서비스명 지정 가능
docker compose exec 실행 중 컨테이너에 명령 실행 서비스명 bash

docker-compose.yml 기본 구조

# docker-compose.yml 기본 구조 예시
services:
  웹서버:
    image: nginx:latest          # 사용할 이미지
    container_name: my-nginx     # 컨테이너 이름
    ports:
      - "8080:80"                # 호스트:컨테이너 포트 매핑
    volumes:
      - ./html:/usr/share/nginx/html  # 볼륨 마운트
    environment:
      - TZ=Asia/Seoul            # 환경 변수
    restart: unless-stopped      # 재시작 정책

⚠️ restart: unless-stopped은 홈서버에서 가장 중요한 설정 중 하나입니다. Docker가 재시작되면(서버 재부팅 포함) 컨테이너도 자동으로 다시 올라옵니다. 수동으로 중지한 경우에만 다시 올라오지 않습니다.

6. 첫 컨테이너 띄우기 — Hello World에서 Nginx까지

6-1. Hello World

Docker가 정상 동작하는지 확인합니다.

docker run --rm hello-world

Hello from Docker! 메시지가 나오면 Docker Engine이 정상 작동 중입니다.

6-2. Nginx 웹서버 띄우기 (Docker Compose)

실전에서 사용하는 방식으로 Nginx를 Docker Compose로 띄워봅니다.

# 홈랩 기본 디렉토리 생성
mkdir -p ~/homelab/nginx
cd ~/homelab/nginx

# 테스트 HTML 파일 생성
mkdir -p html
echo "<h1>Mac Mini 홈서버 작동 중! 🖥️</h1>" > html/index.html

docker-compose.yml 파일을 만듭니다.

# ~/homelab/nginx/docker-compose.yml
services:
  nginx:
    image: nginx:latest
    container_name: test-nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped

실행합니다.

# 백그라운드로 실행
docker compose up -d

# 상태 확인
docker compose ps

# 로그 확인
docker compose logs

웹 브라우저에서 http://localhost:8080 또는 같은 네트워크의 다른 기기에서 http://Mac의IP:8080으로 접속하면 "Mac Mini 홈서버 작동 중!" 메시지가 보입니다.

성공! 이제 Mac Mini에서 Docker 컨테이너가 돌아가고 있습니다. 테스트가 끝나면 docker compose down으로 정리할 수 있습니다.

7. 네트워크·볼륨 기본 개념

4편에서 여러 서비스를 한번에 띄우기 전에, Docker 네트워크와 볼륨의 기본 개념을 이해해야 합니다.

7-1. Docker 네트워크

Docker 컨테이너는 기본적으로 격리된 네트워크에서 실행됩니다. 같은 Docker Compose 파일에 정의된 서비스들은 자동으로 같은 네트워크에 속하며, 서비스 이름으로 서로 통신할 수 있습니다.

# 예: 같은 Compose 안의 서비스 간 통신
services:
  web:
    image: nginx
    depends_on:
      - api
  api:
    image: node:20
    # web 컨테이너에서 http://api:3000 으로 접근 가능

여러 Compose 파일의 서비스가 서로 통신해야 할 때는 외부 네트워크를 만들어 공유합니다. 이 부분은 4편에서 실제로 다룹니다.

# 외부 네트워크 생성
docker network create homelab

7-2. Docker 볼륨

컨테이너는 삭제되면 내부 데이터도 사라집니다. 데이터를 유지하려면 볼륨(Volume)을 사용합니다.

바인드 마운트

호스트의 디렉토리를 컨테이너에 직접 연결합니다. 설정 파일이나 데이터를 호스트에서 직접 편집할 수 있어 편합니다.
./data:/app/data

Named 볼륨

Docker가 관리하는 볼륨입니다. 데이터 무결성이 중요한 DB 등에 적합합니다. 호스트 경로를 몰라도 되지만, 직접 접근이 불편합니다.
db_data:/var/lib/postgresql/data

💡 이 시리즈의 전략 — 설정 파일은 바인드 마운트(호스트에서 편집 가능), DB 데이터는 Named 볼륨(안정성 우선)을 사용합니다. 모든 데이터는 ~/homelab/ 하위에 서비스별로 정리합니다.

7-3. 디렉토리 구조 미리보기

4편부터 본격적으로 사용할 홈랩 디렉토리 구조입니다. 지금 미리 만들어두면 편합니다.

# 홈랩 기본 구조 생성
mkdir -p ~/homelab/{portainer,homepage,uptime-kuma,nginx-proxy-manager}

# 구조 확인
tree ~/homelab -L 1

# ~/homelab/
# ├── homepage/
# ├── nginx/            ← 방금 테스트에서 만든 것
# ├── nginx-proxy-manager/
# ├── portainer/
# └── uptime-kuma/

🖥️ Mac Mini 홈서버 완전 정복 시리즈

✅ 1편. 왜 Mac Mini인가? — 홈서버 하드웨어 선택 가이드

✅ 2편. macOS 서버 초기 세팅 — 헤드리스 최적화 완벽 가이드

✅ 3편. Docker 환경 구축 — OrbStack vs Docker Desktop vs Colima 비교 (현재 글)

📌 4편. 홈서버 필수 서비스 한방에 띄우기 — Docker Compose 실전편

📌 5편. 리버스 프록시 구축 — Nginx Proxy Manager로 도메인 + HTTPS

📌 6편. 외부 접속 — Cloudflare Tunnel로 포트포워딩 없이 공개

📌 7편. 보안 강화 — SSH 키 인증 + Fail2Ban + 방화벽

📌 8편. 스토리지 & 백업 전략

📌 9편. 실전 서비스 배포 — 미디어 + 사진 + 스마트홈

📌 10편. 종합 모니터링 & 운영 자동화

이 글에서는 macOS에서 Docker가 돌아가는 원리를 이해하고, OrbStack을 설치하고, 첫 컨테이너(Nginx)를 Docker Compose로 띄워봤습니다. 네트워크와 볼륨의 기본 개념도 잡았으니, 다음 편에서 본격적으로 홈서버의 핵심 서비스들을 배포할 준비가 됐습니다.

다음 4편에서는 하나의 Docker Compose 파일로 4개 필수 서비스를 한번에 띄웁니다 — Homepage(대시보드), Portainer(Docker 웹 관리), Watchtower(자동 업데이트), Uptime Kuma(상태 모니터링). 서비스 간 네트워크 설계와 .env 파일 관리까지 실전 수준으로 다룹니다.

도움이 됐다면 공감 ❤️ 부탁드려요! 시리즈 알림 받으시려면 구독도 부탁합니다.

반응형

▲ TOP