macOS에서 Linux 컨테이너를 실행할 수 있는 Swift 패키지

3 days ago 4

  • Containerization은 macOS에서 Linux 컨테이너를 실행할 수 있게 해주는 Swift 기반 오픈소스 도구임
  • Apple Silicon 기반 Mac에서 작동하며, Virtualization.framework를 활용하여 가벼운 가상 머신 안에 각 컨테이너를 격리 실행함
  • OCI 이미지 관리, 원격 레지스트리 연동, ext4 파일 시스템 생성, 컨테이너 환경 제어 등 다양한 기능을 포함함
  • Rosetta 2를 활용해 Apple Silicon에서도 x86_64 프로세스 실행 지원 가능함
  • 초단시간 부팅, 경량 환경 제공, 커널 버전 커스터마이징 등으로 개발자 유연성과 성능을 높임

프로젝트 개요

  • Containerization은 애플리케이션이 Linux 컨테이너를 사용할 수 있도록 도와주는 Swift 패키지임

  • Swift 언어로 구현되어 있으며, Apple Silicon 기반의 Mac에서 Virtualization.framework를 활용해 동작함

  • API를 통해 아래와 같은 기능을 제공함

    • OCI 이미지 관리
    • 원격 컨테이너 레지스트리 연동
    • ext4 파일 시스템 생성 및 배치
    • Netlink 소켓 패밀리와의 상호작용
    • 빠른 부팅을 위한 최적화된 Linux 커널 제공
    • 경량 가상 머신 생성 및 관리
    • 가상 머신의 실행 환경 제어
    • 컨테이너화된 프로세스 생성 및 제어
    • Rosetta 2를 활용한 Apple Silicon에서 x86_64 프로세스 실행
  • API 문서는 별도의 공식 페이지에서 확인 가능함

디자인 및 구조

  • Linux 컨테이너는 독립된 가상 머신 내에서 실행됨
  • 컨테이너별 전용 IP 주소를 할당할 수 있어, 포트 포워딩 없이도 네트워크 관리가 간편함
  • 최적화된 커널 설정과 경량 루트 파일 시스템 덕분에 1초 미만의 컨테이너 부팅이 가능함
  • vminitd는 Containerization의 서브프로젝트로, 가상 머신 내에서 초기 프로세스로 동작하는 경량 init 시스템
    • GRPC API를 통해 실행 환경을 설정하고, 컨테이너 프로세스 운영 관리를 지원함
    • 입출력, 시그널, 이벤트 처리를 호출한 프로세스에 전달함

요구사항

  • Apple Silicon Mac 기기가 필요함
  • 패키지 빌드를 위해서는
    • macOS 15 이상 및 Xcode 26 Beta
    • 또는 macOS 26 Beta 1 이상이 필요함
  • macOS 15에서 사용하는 경우, 아래 기능은 제한됨
    • 비격리 컨테이너 네트워킹: 같은 vmnet 네트워크 상의 컨테이너 간 통신 불가

사용 예시

  • cctl 실행 파일 제공: API의 다양한 기능을 실험해볼 수 있는 playground 형태임
    • 주요 명령 예시
      • OCI 이미지 조작
      • 컨테이너 레지스트리 로그인
      • 루트 파일 시스템 블록 생성
      • 간단한 Linux 컨테이너 실행

Linux 커널 구성

  • 컨테이너용 경량 가상 머신 실행을 위해 Linux 커널이 필요함
  • Containerization에서 제공하는 최적화 커널 설정은 kernel 디렉터리에 위치함
  • 해당 설정은 최소한의 기능만 담아 빠른 부팅과 경량 환경을 제공함
  • 필요에 따라 컨테이너별 커널 설정과 버전을 다르게 지정할 수 있는 API가 마련됨
    • 다양한 커널 버전 및 설정을 테스트 가능함
  • Kata Containers 프로젝트에서 제공하는 vmlinux.container 등 사전 컴파일된 커널 사용 가능
    • 단, VIRTIO 드라이버가 커널에 내장(compiled-in)되어 있어야 함

개발 및 테스트 프로세스 요약

  • Swift, Static Linux SDK 등 환경 준비 필요
  • 소스 코드 빌드 및 테스트 가능 (make all, make test integration 명령어 등)
    • 통합 테스트 실행을 위해 커널 이미지 필요
  • gRPC/Protobuf 관련 특정 버전을 사용하는 의존성 구성 지원
  • API 문서 자동 생성 및 로컬 미리보기 기능 탑재

오픈소스 기여 및 프로젝트 현황

  • 기여 환영
  • 0.1.0 버전이 첫 공식 릴리스이며, 소스 안정성은 마이너 버전 범위 내에서만 보장됨
  • 향후 마이너 릴리스에서 정책 변경 가능성 존재

요약

  • Containerization은 macOS에서 개발자들이 최적화된 환경으로 Linux 컨테이너를 관리, 실행, 개발할 수 있게 해주는 혁신적인 Swift 패키지
  • 각 컨테이너를 가벼운 전용 가상 머신에서 구동함으로써 격리, 성능, 네트워킹, 커널 커스터마이징 장점을 제공함
  • 오픈소스 컨테이너 환경을 macOS 네이티브 경험으로 확장하려는 개발자들에게 적합한 솔루션임

Read Entire Article