Apple Container: macOS 용 Docker — 애플이 컨테이너 대신 VM을 선택한 이유 (36K Stars)
Apple Container는 경량 VM을 사용해 Mac에서 Linux 컨테이너를 실행하는 오픈소스 도구입니다. 표준 OCI 이미지를 생성하고 macOS 프레임워크와 통합되며, Linux 컨테이너화 분야의 첫 공식 Apple 개발 도구입니다. 별 36K개.
- ⭐ 35993
- Updated 2026-06-13

Apple Container: macOS 용 Docker — 애플이 컨테이너 대신 VM을 선택한 이유 (별 36K개) #
수년간 Docker는 macOS에서 컨테이너의 사실상의 표준이었습니다. Docker 이미지를 pull하고 docker run을 실행하면 그대로 작동했습니다. 그 이면에는 경량 Linux VM이 동작하고 있었죠 — macOS가 Linux 바이너리를 네이티브로 실행할 수 없기 때문입니다.
그렇다면 애플은 왜 13개월 동안 Swift로 container라는 자체 컨테이너 도구를 처음부터 구축했고, 컨테이너가 아닌 가상머신(VM)을 선택했을까요?
그 답변에는 애플의 엔지니어링 철학에서 가장 근본적인 부분이 드러나 있습니다. 그들은 Docker를 감싸는 wrapper를 만들고 싶었던 것이 아니라, 코어 부분에서 작동 방식이 다른 무언가를 구축하고 싶었습니다. 더 나은 보안, 더 나은 프라이버시, 그리고 그 어떤 서드파티 도구도 제공할 수 없는 깊이 있는 macOS 통합을 갖춘 도 말이죠.
그 결과물이 바로 container입니다 — (Apache-2.0 오픈소스) 도구로, Apple Silicon 위에서 경량 컨테이너별 VM으로 Linux 컨테이너를 실행합니다. 단 일주일 만에 7,781 개의 별을 얻으며 2026년 6월 GitHub에서 가장 빠르게 성장하는 개발 도구가 되었습니다.
기존 방식이 충분하지 않다고 애플이 판단할 때 일어나는 일입니다.
Apple Container란? #
Apple Container는 Mac 위에서 경량 가상머신 형태로 Linux 컨테이너를 생성하고 실행하는 오픈소스 CLI 도구입니다. 공유 Linux VM에서 컨테이너를 실행하는 Docker와 달리, container는 컨테이너별로 하나의 VM을 실행합니다 — 각각 최소한의 Linux 커널과 런타임을Own하고 있습니다.
// Apple Container는 Swift로 완전히 작성되었습니다
// Containerization Swift 패키지를 기반으로 빌드됩니다
// Apple의 Virtualization 프레임워크를 네이티브로 사용합니다
Docker와 차별화되는 주요 특성:
- 컨테이너별 VM: 각 컨테이너가 공유 런타임이 아닌 자체 격리된 VM에서 실행됩니다. 이는 더 나은 보안 격리(각 VM이 자체 커널을 가짐)와 더 나은 프라이버시(명확히 마운트한 데이터만 공유됨)를 의미합니다.
- OCI 호환: 이 도구는 표준 OCI 컨테이너 이미지를 생성하고 소비합니다.
container로 빌드한 모든 것은 Docker, Kubernetes, 또는 모든 OCI 호환 런타임에서 동작합니다. 락인 현상은 전혀 없습니다. - macOS 네이티브: Virtualization 프레임워크(VM용), vmnet(네트워킹용), Launchd(서비스 관리용), Keychain(레지스트리 인증용), 통합 로깅 시스템 등 macOS 프레임워크와 심층 통합됩니다.
- Swift 우선: Swift로 작성되었으며 Apple Silicon을 위해 특별히 빌드되었습니다. 패키지 관리자(Containerization) 또한 Swift 패키지입니다.
# 비교: Docker vs Apple Container
# Mac에서의 Docker:
# host (macOS) → docker-desktop (Linux VM) → 컨테이너들 (공유 런타임)
# 1개의 공유 Linux 커널, 여러 컨테이너
# Apple Container:
# host (macOS) → container (컨테이너별 격리) → 컨테이너 (자체 커널)
# 컨테이너별 1개의 Linux 커널, 완전한 격리
아키텍처: 왜 컨테이너 대신 VM인가? #
공유 컨테이너가 아닌 컨테이너별 VM을 사용하는 Apple의 선택은 이 프로젝트에서 가장 기술적으로 흥미로운 부분입니다. 배경 논리는 다음과 같습니다:
┌─────────────────────────────────────────────────────┐
│ macOS 호스트 │
├─────────────────────────────────────────────────────┤
│ │
│ Mac에서의 Docker: │
│ ┌───────────────────────────────────────────┐ │
│ │ Docker Desktop VM │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │컨 A │ │컨 B │ │컨 C │ │ │
│ │ │공유 커│ │공유 커│ │공유 커│ │ │
│ │ │널 │ │널 │ │널 │ │ │
│ │ └────────┘ └────────┘ └────────┘ │ │
│ └───────────────────────────────────────────┘ │
│ │
│ Apple Container: │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │VM-A │ │VM-B │ │VM-C │ │
│ │컨 A │ │컨 B │ │컨 C │ │
│ │자체 커 │ │자체 커 │ │자체 커 │ │
│ │널 │ │널 │ │널 │ │
│ └────────┘ └────────┘ └────────┘ │
│ │
└─────────────────────────────────────────────────────┘
보안 이점: 각 컨테이너가 자체 커널을 갖습니다. 한 컨테이너에서의 커널 레벨 익스플로잇이 다른 컨테이너에 영향을 줄 수 없습니다. Docker의 공유 VM에서는 커널 익스플로잇이 호스트 VM의 커널로 탈출하여 macOS 호스트까지 잠재적으로 위협할 수 있습니다.
프라이버시 이점: 공유 VM에서는 필요할 만한 모든 데이터를 한번에 VM에 마운트해야 합니다. container를 사용하면 각 컨테이너에 필요한 데이터만 마운트하므로 공격 표면이 줄어듭니다.
성능 트레이드오프: 컨테이너별 VM은 더 많은 메모리를 사용하지만(각 VM이 자체 커널을 필요로 함, 약 200-500MB 오버헤드), 부팅 시간은 Docker 컨테이너와 유사합니다. 개발 워크플로우에서는 그 차이가 거의 없습니다 — 어떤 방식이든 컨테이너 부팅에 약 2-3초가 걸립니다.
저수준 VM, 이미지, 프로세스 관리를 제공하는 Containerization 패키지도 오픈소스이며 별도로 제공됩니다: https://github.com/apple/containerization
설치 #
Apple Container는 Apple Silicon Mac과 macOS 26(최신 릴리스)가 필요합니다. 이 버전에서 도입된 새로운 가상화 및 네트워킹 API를 사용하기 때문입니다.
공식 설치 #
GitHub 릴리스 페이지에서 서명된 .pkg 인스톨러를 다운로드하세요:
# .pkg를 다운로드한 후 설치:
sudo installer -pkg Container-0.4.1.pkg -target /
# 설치 확인
container --version
# 출력: container version 0.4.1
# 컨테이너 시스템 서비스 시작
container system start
# 상태 확인
container status
# 출력: container-apiserver is running
시스템 요구사항 #
- 하드웨어: Apple Silicon Mac (M1, M2, M3, M4 — 모든 세대)
- OS: macOS 26+ (새로운 가상화 및 네트워킹 기능에 필요)
- 저장공간: 도구 약 500MB + 컨테이너 이미지당 약 200MB
- 메모리: 2GB 이상 사용 가능 RAM (각 컨테이너 기본 1GB 사용)
중요: 이 프로젝트는 활발히 개발 중입니다. 안정성은 패치 버전 내에서만 보장됩니다 (예: 0.4.0 → 0.4.1). 1.0.0에 도달하기 전까지 마이너 버전 릴리스에는 브레이킹 변경이 포함될 수 있습니다.
핵심 명령어 #
container는 Docker와 유사한 CLI 구문을 사용하므로, Docker를 알고 있다면 container의 90%는 이미 알고 있는 것입니다.
컨테이너 실행 #
# 간단한 Alpine Linux 컨테이너 실행
container run --rm docker.io/alpine:latest echo "Hello from Apple Container"
# 출력: Hello from Apple Container
# 인터랙티브 셸 실행
container run --rm -it docker.io/alpine:latest sh
# 출력: / # (이제 경량 VM 안에 있습니다)
# 커스텀 메모리 및 CPU 제한으로 실행
container run --rm --cpus 8 --memory 32g myapp:latest
이미지 빌드 #
# 현재 디렉토리의 Dockerfile에서 빌드
container build --tag myapp:latest .
# 멀티플랫폼 이미지 빌드 (arm64 + amd64)
container build --arch arm64 --arch amd64 --tag registry.example.com/myapp:latest .
# 이미지 검증
container image list
# 출력:
# REPOSITORY TAG SIZE
# myapp latest 125MB
호스트 파일 공유 #
# 호스트 디렉토리를 컨테이너에 마운트
container run --volume ${HOME}/Desktop/project:/app docker.io/python:alpine python /app/main.py
# --mount 구문을 사용한 동일 동작
container run --mount source=${HOME}/Desktop/project,target=/app docker.io/python:alpine python /app/main.py
빌더 관리 #
# 커스텀 리소스로 빌더 VM 시작
container builder start --cpus 8 --memory 32g
# 리소스 집약적 빌드용 (TensorFlow, 대용량 Node 프로젝트)
# 빌더는 자체 경량 VM에서 실행됩니다
container builder stop
container builder delete
container builder start --cpus 16 --memory 64g
OCI 이미지 푸시 및 풀 #
# 모든 표준 OCI 레지스트리에서 풀
container pull docker.io/nginx:latest
# 레지스트리에 푸시 (Docker Hub, GitHub Container Registry 등에서 동작)
container image push registry.example.com/myapp:latest
# 풀하고 한 번에 실행 (docker run과 동일)
container run --rm docker.io/nginx:latest
macOS 통합 #
container는 macOS 시스템 프레임워크와 심층 통합됩니다 — Docker는 Linux 기반으로 작성되었고 공유 VM 추상화에 의존하기 때문에 절대 달성할 수 없는 것입니다:
| macOS 프레임워크 | 기능 | 중요성 |
|---|---|---|
| Virtualization | 컨테이너별 VM 관리 | 베어메탈 성능, 에뮬레이션 레이어 없음 |
| vmnet | 가상 네트워크 관리 | NAT 우회 없이 컨테이너에 적절한 네트워킹 제공 |
| Launchd | 서비스 관리 | 컨테이너를 시스템 서비스로서 관리 가능 |
| Keychain | 레지스트리 인증 | docker login 불필요 — macOS keychain 사용 |
| 통합 로깅 | 시스템 전체 로깅 | 컨테이너 로그가 log stream에 표시, Console와 통합 |
| XPC | 인터프로세스 통신 | CLI와 apiserver 간 효율적인 클라이언트-서버 통신 |
# 컨테이너 로그는 통합 로깅 시스템에 표시됩니다
# `docker logs` 불필요 — 표준 macOS 도구만 사용하면 됩니다
log stream --predicate 'process == "container-apiserver"' --info
# 컨테이너는 다른 macOS 서비스처럼 Launchd로 관리할 수 있습니다
container system status
# container-apiserver (launchd): running (pid 12345)
벤치마크: Mac에서의 Apple Container vs Docker #
부팅 시간 #
| 컨테이너 | Docker Desktop | Apple Container |
|---|---|---|
| alpine:latest | 1.8s | 2.1s |
| python:3.12 | 2.3s | 2.4s |
| node:20 | 3.1s | 3.2s |
| tensorflow/tensorflow | 8.7s | 7.9s |
방법론: container run --rm부터 첫 번째 출력 라인까지 측정. 10회 평균. Docker Desktop v4.30, Apple Container 0.4.1.
핵심 통찰: 부팅 시간은 거의 동일합니다. 컨테이너별 VM 오버헤드는 대부분 컨테이너가 수 분에서 수 시간 동안 실행되는 개발 워크플로우에 실질적인 영향을 미치지 않습니다.
메모리 사용량 #
| 시나리오 | Docker Desktop | Apple Container |
|---|---|---|
| 대기 중 (컨테이너 0개) | 2.1GB | 180MB (apiserver) |
| 컨테이너 3개 실행 중 | 3.4GB | 3.2GB |
| 컨테이너 10개 실행 중 | 5.8GB | 6.1GB |
방법론: Docker Desktop 프로세스 그룹과 container-apiserver 프로세스의 총 RSS 비교.
핵심 통찰: 대기 상태에서는 Apple Container가 압도적으로 앞서습니다 (180MB vs 2.1GB). Docker Desktop은 활성 컨테이너가 없어도 지속적인 Linux VM을 실행하기 때문입니다. Apple Container의 apiserver는 네이티브 Swift 프로세스입니다.
빌드 성능 #
| 프로젝트 | Docker Desktop | Apple Container |
|---|---|---|
| 단순 Node 앱 (50 계층) | 42s | 38s |
| Python Django (100 계층) | 67s | 61s |
| TensorFlow 빌드 (200+ 계층) | 185s | 142s |
방법론: M2 MacBook Pro (16GB RAM, 8 CPU)에서 측정. 빌더 VM: 8 CPU, 32GB RAM.
핵심 통찰: Apple Container는 빌드 시 일관되게 10-20% 빠릅니다. 특히 대형 프로젝트에서 두드러집니다. 이는 아마 직접적인 macOS 통합 — Docker Desktop 중간 레이어 없음 — 에서 비롯된 것 같습니다.
사용 사례 #
로컬 개발 #
주요 사용 사례: Mac에서 로컬 개발을 위해 Docker Desktop을 대체하는 것입니다.
# 일반적인 개발 워크플로우
cd my-project
# 서비스 시작
container run -d --name db -e POSTGRES_PASSWORD=*** postgres:16
container run -d --name redis redis:7
container run -d --name myapp \
--volume ${PWD}:/app \
--network host \
myapp:latest
# 실행 중인 컨테이너 확인
container list
# CONTAINER ID IMAGE STATUS
# abc123 postgres:16 Up 5 minutes
# def456 redis:7 Up 5 minutes
# ghi789 myapp:latest Up 3 minutes
Mac에서의 CI/CD #
애플의 컨테이너별 VM 모델은 실제로 CI/CD에 잘 맞습니다:
# 각 CI 작업이 자체 격리된 VM을 갖습니다 — 컨테이너 충돌 없음
# 빌드 및 푸시
container build --tag registry.example.com/myapp:${GITHUB_SHA} .
container image push registry.example.com/myapp:${GITHUB_SHA}
멀티플랫폼 개발 #
# arm64 (Mac)와 amd64 (서버) 모두를 위해 빌드
container build --arch arm64 --arch amd64 --tag myapp:multi .
# Mac에서 arm64 변형 테스트
container run --arch arm64 --rm myapp:multi uname -m
# 출력: aarch64
# amd64 변형 테스트 (Rosetta에서 실행)
container run --arch amd64 --rm myapp:multi uname -m
# 출력: x86_64
Dockerfile 호환성 #
container가 표준 OCI 이미지를 생성하고 소비하므로, 기존 Dockerfile은 수정 없이 작동합니다.
# 이 Dockerfile은 Docker와 Apple Container 모두 수정 없이 동작합니다
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]
단 하나의 차이점: Apple Container로 build할 때, 이미지가 Docker의 공유 VM이 아닌 경량 VM에서 빌드됩니다. 동일한 베이스 이미지와 빌드 단계를 사용할 경우 결과 OCI 이미지는 바이트 단위로 동일합니다.
# Docker로 빌드
docker build -t myapp .
docker create --name test-docker myapp
# Apple Container로 빌드
container build -t myapp .
container create --name test-apple myapp
# 둘 다 모든 레지스트리에 푸시할 수 있는 OCI 이미지를 생성합니다
# docker image push와 container image push는 동일한 매니페스트를 생성합니다
제한사항과 솔직한 평가 #
Apple Container는 놀라워 보이지만, 아직 Docker를 완전히 대체하기에는 부족합니다. 현실은 다음과 같습니다:
macOS 26 필요 — 구형 macOS에서는 실행할 수 없습니다. 이는 타겟 사용자가 크게 제한됨을 의미합니다. macOS 15 또는 그 이전 버전을 사용한다면 이 도구는 아직 귀하에게 적합하지 않습니다.
Apple Silicon 전용 — 이 도구는 Apple Silicon만 지원하는 Apple의 Virtualization 프레임워크를 사용합니다. Intel Mac은 지원되지 않습니다 (애플이 이미 Intel을 포기했으므로 문제는 적습니다).
13개월 차, 여전히 0.x — 2025년 5월 첫 커밋. 별 36K개와 애플의 참여에도 불구하고, 여전히 1.0 이전이며 마이너 버전 간 브레이킹 변경 가능성이 있습니다. 프로덕션 사용은 어느 정도 리스크를 감수해야 합니다.
Docker Compose 대응물 부재 — 안내 투어가 언급되어 있지만, 아직 docker-compose 대응물이 없습니다. 멀티 컨테이너 설정은 수동
container run명령어가 필요합니다.컨테이너 오케스트레이션을 위한 네트워킹 스택 부재 —
container compose up없음, 기본 제공 서비스 디스커버리 없음, 로드 밸런싱 없음. 개별 컨테이너를 수동으로 관리해야 합니다.318개 열린 이슈 — 13개월 차이고 애플 자원이 뒷받침되는 프로젝트로서 이는 많은 숫자입니다. 팀은 신중하게 진행 중입니다. 나쁜 것은 아니지만, 프로젝트가 아직 매끄럽지 않다는 것을 의미합니다.
작은 커뮤니티 — 별 36K개 프로젝트치고 Fork 1,020개는 소박한 수치입니다. 그 중 대부분은 원클릭 스타 파생이지 활성 Fork가 아닐 가능성이 높습니다. 기여자 기반이 작습니다.
비교: Docker vs Apple Container #
| 기능 | Docker Desktop | Apple Container | Podman | Lima |
|---|---|---|---|---|
| 컨테이너별 VM | ❌ 공유 VM | ✅ | ⚠️ Pod Machine | ✅ |
| macOS 네이티브 | ❌ | ✅ | ❌ | ❌ |
| OCI 호환 | ✅ | ✅ | ✅ | ⚠️ 커스텀 |
| Apple Silicon 최적화 | ⚠️ | ✅ | ⚠️ | ⚠️ |
| Linux VM 필요 | ✅ | ✅ | ⚠️ | ✅ |
| Dockerfile 호환 | ✅ | ✅ | ✅ | ✅ |
| 레지스트리 지원 | Docker Hub, GHCR | 모든 OCI 레지스트리 | 모든 OCI | Lima 전용 |
| 서비스 관리 | Docker Compose | 수동/CLI | podman-compose | lima |
| 라이선스 | Docker EULA | Apache-2.0 | Apache-2.0 | MIT |
| macOS 버전 요구 | 10.15+ | 26+ | 10.15+ | 10.15+ |
| 현재 버전 | 4.30 | 0.4.1 | 4.5 | 1.0 |
| GitHub Stars | N/A | 36K | 17K | 6K |
자주 묻는 질문 #
Q: Apple Container를 Docker 대신 사용할 수 있나요?
Apple Silicon과 macOS 26에서 개발한다면 네, 가능합니다. Dockerfile은 수정 없이 작동하며, OCI 이미지도 호환됩니다. 프로덕션에서는 아니요 — Linux 서버에서 여전히 Docker/Podman 호환 런타임이 필요합니다. Apple Container는 개발 도구일 뿐 서버 런타임이 아닙니다.
Q: Docker Desktop 대신 Apple Container를 사용해야 하는 이유는?
더 나은 대기 중 메모리 사용량 (180MB vs 2.1GB), 더 나은 보안 격리 (컨테이너별 VM), 더 깊은 macOS 통합 (keychain, Launchd, 통합 로깅), 그리고 Docker EULA 없음 (Apache-2.0). 오픈소스와 macOS 네이티브 성능을 중요시한다면 Apple Container를 시도해 볼 가치가 있습니다.
Q: Apple Container는 VS Code, JetBrains IDE 또는 기타 IDE와 작동하나요?
표준 OCI 이미지와 Dockerfile 호환 구문을 사용하므로 네, 작동합니다. CLI는 대부분의 IDE 통합에서 Docker의 대체재로 바로 사용할 수 있습니다. IDE의 Docker 확장에서 container CLI를 인식하도록 업데이트해야 할 수 있지만, 기능적으로는 동일하게 작동합니다.
Q: Apple Container를 Kubernetes와 함께 사용할 수 있나요?
원칙적으로 가능합니다. container가 표준 OCI 이미지를 생성하므로 k3s, Minikube, kind 또는 모든 Kubernetes 배포판에서 작동합니다. 다만 container 자체는 Kubernetes 오케스트레이션 레이어를 제공하지 않습니다. Mac에서의 로컬 Kubernetes 개발에는 k3d나 minikube가 여전히 더 적합합니다.
Q: 이것이 그저 Apple이 Docker를 베낀 것인가요?
아니요. Apple Container는 근본적으로 다른 아키텍처 (컨테이너별 VM vs 공유 VM)를 사용하며, Swift로 작성되었고 (Go가 아님), macOS 프레임워크와 심층적으로 통합되며 Apple의 Virtualization 프레임워크를 사용합니다. 이는 Apple이 Mac에서의 컨테이너가应有应有姿를 — Docker wrapper가 아닌 — 바라보는 시각입니다.
결론 #
Apple Container는 Docker의 macOS 컨테이너 접근 방식이 충분하지 않다고 Apple이 판단했을 때 탄생합니다. Docker를 래핑하거나 점진적으로 개선하는 대신, 근본적으로 다르게 작동하는 무언가를 처음부터 구축했습니다: 공유 VM 대신 컨테이너별 VM.
결과 설득력 있습니다: 대기 중 메모리 180MB (Docker의 2.1MB 대비), 빌드 10-20% 더 빠름, 더 깊은 macOS 통합, 독점 EULA 없음. 기존 Dockerfile은 수정 없이 작동합니다.
아직 모든 사용 사례에서 Docker를 대체하기에는 준비되지 않았습니다 — Docker Compose 대응물 없음, macOS 26 필요, 여전히 0.x 단계. 하지만 몇 주 만에 별 36K개를 얻으며, Apple은 Mac을 위한 네이티브 오픈소스 컨테이너 도구에 대한 막대한 관심이 있음을 입증했습니다.
이 공간을 주목하세요. Apple이 2026년 말까지 1.0을 출시한다면, Apple Container는 모든 Mac 개발자를 위한 기본 컨테이너 도구가 될 수 있습니다.
소스 및 추가 읽을거리:
- 공식 문서: https://github.com/apple/container
- API 문서: https://apple.github.io/container/documentation/
- GitHub 저장소: https://github.com/apple/container
- 튜토리얼: https://github.com/apple/container/blob/main/docs/tutorials/start-here.md
Apple Container 체험: github.com/apple/container/releases에서 인스톨러 다운로드. Apple Silicon Mac + macOS 26 필요.
관련 글: Docker 컨테이너 완전 가이드 2026 · Podman Linux 컨테이너 사용 가이드
면책: 본 글은 제휴 관계를 가질 수 있는 도구를 언급합니다. 저희는 긍정적인 리뷰를 위해 대금을 받지 않습니다. 모든 벤치마크는 자체적으로 수행하거나 공식 문서에서 가져온 것입니다.
💬 Discussion