가이드: 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: 설치 패키지로 설치 (권장)

  1. GitHub Release 페이지 방문
  2. 최신 .pkg 서명 설치 파일 다운로드
  3. .pkg 파일을 더블클릭하고 설치 마법사를 따라 설치 완료
  4. 설치 중 관리자 비밀번호 입력 필요, 설치 경로는 /usr/local

방법 2: 소스 코드에서 빌드

최신 버전을 체험하거나 기여하고 싶다면, 소스 코드에서 빌드할 수 있습니다:

BASH
# 저장소 클론
git clone https://github.com/apple/container.git
cd container

# BUILDING.md 참고하여 빌드
# Xcode Command Line Tools와 Swift 5.10+ 필요

시스템 서비스 시작

설치 완료 후, container의 시스템 서비스를 시작합니다:

BASH
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를 입력하면 자동으로 다운로드 및 설치가 진행됩니다. 설치가 완료되면 서비스가 정상적으로 실행되는지 확인합니다:

BASH
$ container list --all
ID    IMAGE    OS     ARCH    STATE    IP

빈 목록이 표시되면 서비스 준비 완료, 언제든 컨테이너를 생성할 수 있습니다.


빠른 시작: 첫 번째 컨테이너

1. 컨테이너 이미지 빌드

Dockerfile부터 시작해 간단한 Python 웹 서버 이미지를 빌드해보겠습니다.

BASH
# 작업 디렉토리 생성
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 .

빌드가 완료되면 로컬 이미지 목록을 확인합니다:

BASH
$ container image list
NAME         TAG       DIGEST
python       alpine    b4d299311845
web-test     latest    25b99501f174

2. 컨테이너 실행

BASH
container run --name my-web-server --detach --rm web-test

매개변수 설명: - --name: 기억하기 쉬운 컨테이너 이름 지정 - --detach: 백그라운드 실행, 터미널 블록하지 않음 - --rm: 컨테이너 중지 후 자동 정리

실행 중인 컨테이너 확인:

BASH
$ 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 서비스를 제공하므로, 호스트명으로 컨테이너에 직접 접근할 수 있습니다. 먼저 로컬 도메인을 구성합니다:

BASH
sudo container system dns create test

구성 완료 후, 컨테이너에 접근하는 두 가지 방법:

BASH
# 방법 1: IP 주소로 접근
open http://192.168.64.3

# 방법 2: 호스트명으로 접근 (더 세련됨!)
open http://my-web-server.test

이것이 container의 주요 하이라이트입니다. 포트를 수동으로 매핑할 필요 없이, DNS가 컨테이너 이름을 해당 IP로 자동 해결해 줍니다.

4. 컨테이너 리소스 사용량 확인

BASH
# 실시간 통계 확인 (top과 유사)
container stats my-web-server

# 단일 스냅샷 확인
container stats --no-stream my-web-server

출력 예시:

TEXT
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

고급 기능: 일상 개발 워크플로

컨테이너 내부에서 명령어 실행

BASH
# 실행 중인 컨테이너에서 명령어 실행
container exec my-web-server cat /content/index.html

# 컨테이너의 인터랙티브 셸 진입
container exec -it my-web-server /bin/sh

컨테이너 생명주기 관리

BASH
# 컨테이너 중지
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

이미지 관리

BASH
# 로컬 이미지 전체 목록
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는 여러 레지스트리 소스 구성을 지원합니다:

BASH
# 구성된 레지스트리 목록
container registry list

# 프라이빗 레지스트리 추가
container registry add --name my-private --url https://my-registry.example.com

실전 시나리오

시나리오 1: 로컬 개발 환경

Docker Desktop의 추가 오버헤드 없이 container로 로컬 개발 환경을 구축합니다:

BASH
# 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 환경을 시뮬레이션합니다:

BASH
# CI 환경용 이미지 빌드
container build --tag ci-test --file Dockerfile.ci .

# 테스트 실행
container run --rm ci-test make test

# 테스트 통과 후 프로덕션 이미지 빌드
container build --tag my-app:prod .

시나리오 3: 마이크로서비스 디버깅

container로 로컬 디버깅용 마이크로서비스 세트를 빠르게 시작합니다:

BASH
# 도메인 구성
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 클러스터만큼 편리합니다.


업그레이드 및 제거

업그레이드

내장 스크립트로 원클릭 업그레이드:

BASH
# 기존 서비스 중지
container system stop

# 업그레이드 스크립트 실행
/usr/local/bin/update-container.sh

# 재시작
container system start

특정 버전으로 다운그레이드

BASH
container system stop

# 현재 버전 제거 (-k 옵션으로 사용자 데이터 유지)
/usr/local/bin/uninstall-container.sh -k

# 특정 버전 설치
/usr/local/bin/update-container.sh -v 0.3.0

container system start

완전 제거

BASH
# 제거 및 사용자 데이터 삭제
/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 명령어는 매우 유사하여 거의无缝(이음새 없이) 전환할 수 있습니다:

BASH
# 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 패키지