- Mac에서 Linux 컨테이너를 경량 가상 머신 형태로 생성·실행하는 도구
- WWDC26에서 새로 추가된 Container Machine 은 홈 디렉토리와 저장소가 자동으로 마운트된 빠르고 경량이며 영속적인 Linux 환경을 실행 가능
- 기존 애플리케이션 단위 컨테이너와 달리 Linux 환경 전체를 모델링 (WSL2와 비슷)
- 이미지의 init 시스템을 실행해 장기 실행 서비스 등록 또는 프로세스 관리자 하에서 애플리케이션 테스트 가능
- systemd가 설치된 이미지에서 systemctl start postgresql 같은 실제 Linux 서비스 실행 가능
- 사용자명과 홈 디렉터리를 자동 매핑해 저장소·dotfile을 macOS·Linux 양쪽에서 공유함
- 저장소가 macOS $HOME에 위치하며 내부 /Users/<username>에 마운트, macOS 에디터·IDE로 편집하면서 내부에서 빌드·실행
- 프로파일러·브라우저·GUI 디버거 등 macOS 네이티브 도구가 동일 파일 인식, 빌드와 검사 사이 복사 단계가 필요없음
- alpine, ubuntu, debian 등 대상 배포판 수만큼 Container Machine 생성 가능, 각각 동일한 $HOME·dotfile 공유로 여러 배포판에서 빠른 테스트
- /sbin/init을 포함하는 모든 Linux 이미지를 직접 Container Machine 이미지로 사용 가능
- OCI 호환 컨테이너 이미지를 소비·생성하므로 표준 컨테이너 레지스트리에서 도커 이미지도 pull·push 가능
- 다른 OCI 호환 애플리케이션에서도 해당 이미지 실행 가능
- 저수준 컨테이너·이미지·프로세스 관리는 Containerization Swift 패키지에 의존
- 실행에 Apple silicon 탑재 Mac 필요, macOS 26에서 지원
- macOS 26의 가상화·네트워킹 신규 기능 및 개선 사항 활용, 이전 버전 macOS는 미지원
- Apache-2.0 라이선스
동작 명령들
container machine create alpine:latest --name dev
container machine run -n dev whoami # your host username, not root
container machine run -n dev pwd # /home/<you> — your Mac home dir, mounted in
container machine run -n dev # interactive shell; cd into your repos in $HOME
container machine ls # list all container machines
container machine inspect dev # JSON detail for one
container machine stop dev # stop the container machine
container machine rm dev # delete, including its persistent storage
container machine set -n dev cpus=4 memory=8G
container machine stop dev
container machine run -n dev -- nproc
- Containerization은 WWDC 25에서 오픈소스로 공개된 Swift 프레임워크로, macOS에서 Linux 컨테이너를 실행하기 위한 기반임
- 각 컨테이너에 가상 머신 기반 격리를 제공하도록 설계됐으며, 경량 가상 머신이라 빠른 성능과 1초 미만의 시작 시간을 제공
- Container machine은 Containerization 위에 구축된 새 기능으로, 컨테이너의 사용성과 속도에 가상 머신의 지속성을 결합하고, 통합 기능을 통해 Linux 환경이 macOS의 확장처럼 느껴지게 함
-
설계 원칙
- Container machine은 기존 워크플로에 통합될 수 있도록 빠르고 가벼워야 함
- macOS와 Linux 사이를 쉽게 전환할 수 있어야 함
- 사용자가 새 환경을 빠르게 만들고 커스터마이즈할 수 있어야 하며, 이를 통해 여러 프로젝트가 의존성이나 툴체인 충돌 걱정 없이 전용 환경을 가질 수 있음
- 개발 생명주기 동안 필요한 도구와 의존성이 달라질 수 있으므로, 지속적인 환경에서 도구를 추가하고 시간이 지나도 다시 사용할 수 있어야 함
- 여러 플랫폼을 대상으로 개발할 때 큰 문맥 전환이나 새 도구 학습이 필요하지 않아야 함