가이드: 2026년, Apple은
container프로젝트를 공식 오픈소스로 공개했습니다. Apple Silicon Mac을 위해 설계된 네이티브 Linux 컨테이너 런타임입니다. Swift로 작성되었으며, macOS 내장 가상화 기능을 활용해 초경량 가상 머신에서 OCI 호환 컨테이너를 실행합니다. 이 글에서는 Apple Container와 Docker Desktop의 차이점부터 설치, 일상 사용, 고급 활용법까지 차근차근 알려드립니다.
Apple Container란?
container는 Apple이 공식으로 개발한 CLI 도구로, Mac에서 Linux 컨테이너를 생성하고 실행하는 데 사용됩니다. 핵심 특징은 다음과 같습니다:
- Swift 네이티브로 작성, Apple Silicon(M 시리즈 칩)에 최적화
- 경량 가상 머신 기반, macOS 26의 가상화 및 네트워킹 강화 기능 활용
- OCI 호환, 표준 컨테이너 이미지를 풀, 빌드, 푸시 가능하며 Docker Hub 및 GitHub Container Registry 등과 연동
- 오픈소스 무료, GitHub 저장소에서 커뮤니티 기여 환영
Docker Desktop과의 차이점
| 항목 | Apple Container | Docker Desktop (Mac) |
|---|---|---|
| 기반 기술 | macOS 네이티브 가상화 + Swift | Linux VM (HyperKit/VMware) |
| 리소스 사용 | 초경량, 필요 시 할당 | 무거움, 항상 백그라운드 프로세스 실행 |
| 네트워크 통합 | 내장 DNS 서비스, 호스트명으로 컨테이너 직접 접근 | 포트 매핑 또는 복잡한 네트워크 설정 필요 |
| Apple Silicon 최적화 | 네이티브 ARM64 지원 | Rosetta 2로 AMD64 이미지 변환 |
| 오픈소스 | ✅ 완전 오픈소스 (Apache 2.0) | ❌ 상용 소프트웨어 |
| 시스템 요구사항 | macOS 26 + Apple Silicon | macOS 12+ (Intel/Apple Silicon) |
간단히 말해, Apple Silicon Mac을 사용하고 있고 로컬에서 Linux 컨테이너를 실행해 개발하는 것이 주요 목적이라면, Apple Container는 더 가볍고 네이티브하며 투명한 선택입니다.
시스템 요구사항
⚠️ Apple Container 필요 조건: - Apple Silicon 탑재 Mac (M1/M2/M3/M4) - macOS 26 이상 - Intel Mac 및 구형 macOS는 지원하지 않음
Apple Container 설치
방법 1: 설치 패키지로 설치 (권장)
- GitHub Release 페이지 방문
- 최신
.pkg서명 설치 파일 다운로드 .pkg파일을 더블클릭하고 설치 마법사를 따라 설치 완료- 설치 중 관리자 비밀번호 입력 필요, 설치 경로는
/usr/local
방법 2: 소스 코드에서 빌드
최신 버전을 체험하거나 기여하고 싶다면, 소스 코드에서 빌드할 수 있습니다:
# 저장소 클론
git clone https://github.com/apple/container.git
cd container
# BUILDING.md 참고하여 빌드
# Xcode Command Line Tools와 Swift 5.10+ 필요
시스템 서비스 시작
설치 완료 후, container의 시스템 서비스를 시작합니다:
container system start
처음 시작할 때 container는 권장 Linux 커널(Kata Containers 기반) 설치를 자동으로 안내합니다:
$ container system start
Verifying apiserver is running...
Installing base container filesystem...
No default kernel configured.
Install the recommended default kernel from
https://github.com/kata-containers/kata-containers/releases/download/3.17.0/kata-static-3.17.0-arm64.tar.xz?
[Y/n]: y
Installing kernel...
y를 입력하면 자동으로 다운로드 및 설치가 진행됩니다. 설치가 완료되면 서비스가 정상적으로 실행되는지 확인합니다:
$ container list --all
ID IMAGE OS ARCH STATE IP
빈 목록이 표시되면 서비스 준비 완료, 언제든 컨테이너를 생성할 수 있습니다.
빠른 시작: 첫 번째 컨테이너
1. 컨테이너 이미지 빌드
Dockerfile부터 시작해 간단한 Python 웹 서버 이미지를 빌드해보겠습니다.
# 작업 디렉토리 생성
mkdir web-test && cd web-test
# Dockerfile 생성
cat > Dockerfile << 'EOF'
FROM docker.io/python:alpine
WORKDIR /content
RUN apk add curl
RUN echo '<!DOCTYPE html><html><head><title>Hello</title></head><body><h1>Hello from Apple Container!</h1></body></html>' > index.html
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]
EOF
# 이미지 빌드
container build --tag web-test --file Dockerfile .
빌드가 완료되면 로컬 이미지 목록을 확인합니다:
$ container image list
NAME TAG DIGEST
python alpine b4d299311845
web-test latest 25b99501f174
2. 컨테이너 실행
container run --name my-web-server --detach --rm web-test
매개변수 설명:
- --name: 기억하기 쉬운 컨테이너 이름 지정
- --detach: 백그라운드 실행, 터미널 블록하지 않음
- --rm: 컨테이너 중지 후 자동 정리
실행 중인 컨테이너 확인:
$ container ls
ID IMAGE OS ARCH STATE IP
buildkit ghcr.io/apple/... linux arm64 running 192.168.64.2
my-web-server web-test:latest linux arm64 running 192.168.64.3
3. 컨테이너의 웹 서비스에 접근
container는 내장 DNS 서비스를 제공하므로, 호스트명으로 컨테이너에 직접 접근할 수 있습니다. 먼저 로컬 도메인을 구성합니다:
sudo container system dns create test
구성 완료 후, 컨테이너에 접근하는 두 가지 방법:
# 방법 1: IP 주소로 접근
open http://192.168.64.3
# 방법 2: 호스트명으로 접근 (더 세련됨!)
open http://my-web-server.test
이것이 container의 주요 하이라이트입니다. 포트를 수동으로 매핑할 필요 없이, DNS가 컨테이너 이름을 해당 IP로 자동 해결해 줍니다.
4. 컨테이너 리소스 사용량 확인
# 실시간 통계 확인 (top과 유사)
container stats my-web-server
# 단일 스냅샷 확인
container stats --no-stream my-web-server
출력 예시:
Container ID Cpu % Memory Usage Net Rx/Tx Block I/O Pids
my-web-server 0.23% 12.45 MiB / 1.00 GiB 856 KiB / 1.2 KiB 2.10 MiB / 512 KiB 2
고급 기능: 일상 개발 워크플로
컨테이너 내부에서 명령어 실행
# 실행 중인 컨테이너에서 명령어 실행
container exec my-web-server cat /content/index.html
# 컨테이너의 인터랙티브 셸 진입
container exec -it my-web-server /bin/sh
컨테이너 생명주기 관리
# 컨테이너 중지
container stop my-web-server
# 중지된 컨테이너 시작
container start my-web-server
# 컨테이너 로그 확인
container logs my-web-server
# 컨테이너 강제 종료
container kill my-web-server
# 컨테이너 삭제
container rm my-web-server
# 컨테이너 상세 정보 확인
container inspect my-web-server
이미지 관리
# 로컬 이미지 전체 목록
container image list
# Docker Hub에서 이미지 풀
container image pull ubuntu:latest
# 이미지 태그 지정
container image tag web-test:latest my-registry.example.com/web-test:v1.0
# 원격 레지스트리에 이미지 푸시
container image push my-registry.example.com/web-test:v1.0
레지스트리 구성
container는 여러 레지스트리 소스 구성을 지원합니다:
# 구성된 레지스트리 목록
container registry list
# 프라이빗 레지스트리 추가
container registry add --name my-private --url https://my-registry.example.com
실전 시나리오
시나리오 1: 로컬 개발 환경
Docker Desktop의 추가 오버헤드 없이 container로 로컬 개발 환경을 구축합니다:
# PostgreSQL 이미지 풀
container image pull postgres:17-alpine
# 데이터베이스 컨테이너 실행
container run --name dev-db --detach --env POSTGRES_PASSWORD=dev123 postgres:17-alpine
# 애플리케이션 컨테이너 실행 및 데이터베이스 연결
container run --name my-app --detach my-app-image
DNS 도메인을 통해 애플리케이션에서 dev-db.test로 데이터베이스에 직접 접근할 수 있으며, 포트 매핑을 설정할 필요가 없습니다.
시나리오 2: CI/CD 로컬 검증
코드를 푸시하기 전, container로 CI 환경을 시뮬레이션합니다:
# CI 환경용 이미지 빌드
container build --tag ci-test --file Dockerfile.ci .
# 테스트 실행
container run --rm ci-test make test
# 테스트 통과 후 프로덕션 이미지 빌드
container build --tag my-app:prod .
시나리오 3: 마이크로서비스 디버깅
container로 로컬 디버깅용 마이크로서비스 세트를 빠르게 시작합니다:
# 도메인 구성
sudo container system dns create local
# Redis 캐시 시작
container run --name cache --detach redis:7-alpine
# 메시지 브로커 시작
container run --name broker --detach rabbitmq:3-management
# 애플리케이션 시작
container run --name api-service --detach --env REDIS_URL=redis://cache.local:6379 my-api
각 서비스는 cache.local, broker.local 같은 호스트명으로 서로 접근할 수 있어, Kubernetes 클러스터만큼 편리합니다.
업그레이드 및 제거
업그레이드
내장 스크립트로 원클릭 업그레이드:
# 기존 서비스 중지
container system stop
# 업그레이드 스크립트 실행
/usr/local/bin/update-container.sh
# 재시작
container system start
특정 버전으로 다운그레이드
container system stop
# 현재 버전 제거 (-k 옵션으로 사용자 데이터 유지)
/usr/local/bin/uninstall-container.sh -k
# 특정 버전 설치
/usr/local/bin/update-container.sh -v 0.3.0
container system start
완전 제거
# 제거 및 사용자 데이터 삭제
/usr/local/bin/uninstall-container.sh -d
명령어 빠른 참조표
| 명령어 | 설명 |
|---|---|
container system start/stop |
시스템 서비스 시작/중지 |
container build |
Dockerfile에서 이미지 빌드 |
container run |
컨테이너 실행 |
container ls |
컨테이너 목록 |
container exec |
컨테이너 내부에서 명령어 실행 |
container stop/start/kill/rm |
컨테이너 생명주기 관리 |
container logs |
컨테이너 로그 확인 |
container stats |
리소스 사용량 확인 |
container image list/pull/push/tag |
이미지 관리 |
container system dns create |
로컬 DNS 도메인 구성 |
container inspect |
컨테이너 상세 정보 확인 |
Docker CLI와의 호환성
Docker 명령어에 익숙하다면, container 명령어는 매우 유사하여 거의无缝(이음새 없이) 전환할 수 있습니다:
# Docker → Apple Container
docker build → container build
docker run → container run
docker ps → container ls
docker exec → container exec
docker stop/rm → container stop/rm
docker images → container image list
docker pull/push → container image pull/push
docker logs → container logs
docker inspect → container inspect
유일한 차이는 명령어 접두사가 docker에서 container로 바뀌었고, 시스템 관리 명령어(container system)는 Docker에 없다는 점입니다.
기술 아키텍처
Apple Container의 하부 의존성은 Apple 자체 개발 Containerization Swift 패키지입니다:
- 컨테이너 런타임: 경량 가상 머신(microVM) 기반으로 Linux 컨테이너 실행
- 이미지 관리: OCI 이미지 스펙 완전 구현
- 네트워킹 스택: 가상 네트워크 + 내장 DNS 해결
- 프로세스 격리: macOS sandbox 메커니즘 활용
기존 Docker 아키텍처(컨테이너 실행을 위해 Linux 가상 머신 필요)와 달리, container는 macOS에서 직접 경량 가상 머신을 통해 컨테이너를 실행하여 이중 가상화 오버헤드를 제거합니다. 이것이 더 가볍고 빠른 이유입니다.
요약
Apple Container는 Apple이 오픈소스 커뮤니티에 내놓은 중요한 한 걸음으로, Apple Silicon Mac 사용자에게 가볍고, 네이티브하며, 오픈소스인 컨테이너 런타임 솔루션을 제공합니다.
Apple Container 사용에 적합한 상황: - ✅ Apple Silicon Mac 사용자 - ✅ 로컬에서 Linux 컨테이너 개발 및 테스트 - ✅ 경량 마이크로서비스 디버깅 - ✅ Docker Desktop의 무거운 백그라운드 실행을 원치 않는 경우
현재 적합하지 않은 상황: - ❌ Intel Mac 사용자 (macOS 26 + Apple Silicon 필요) - ❌ Docker Compose 등 다중 컨테이너 오케스트레이션 필요 (현재 container는 주로 단일 컨테이너 대상) - ❌ 프로덕션 환경 배포 (프로젝트 아직 활발한 개발 중, API가 1.0 수준으로 안정화되지 않음)
Apple Container GitHub 저장소: github.com/apple/container
관련 링크: - Container 공식 튜토리얼 - 명령어 참조 매뉴얼 - 기술 아키텍처 개요 - Containerization Swift 패키지