macOS 컨테이너 머신 (Container Machines)
요약
macOS에서 빠르고 가벼운 Linux 환경을 제공하는 컨테이너 머신 기술을 소개합니다. OCI 이미지를 기반으로 호스트의 사용자 및 홈 디렉토리를 자동으로 공유하여, macOS의 에디터와 도구를 그대로 사용하면서 Linux 내부에서 빌드 및 실행이 가능합니다.
핵심 포인트
- macOS 홈 디렉토리와 사용자 계정 자동 매핑 지원
- OCI 이미지를 기반으로 한 빠르고 지속적인 Linux 환경 제공
- macOS 네이티브 툴링을 통한 Linux 아티팩트 직접 검사 가능
- systemd 지원을 통한 실제 Linux 시스템 서비스 테스트 가능
- 다양한 배포판(Alpine, Ubuntu 등)별 독립적 환경 구축
컨테이너 머신 (Container machine)은 Mac에서 원활하게 작동하는 고도로 통합된 Linux 환경을 제공합니다. 컨테이너 머신은 빠르고, 가볍고, 지속적 (persistent)입니다. 이는 빌드하고 공유할 수 있는 표준 OCI 이미지 (OCI images)를 기반으로 합니다. 자동 사용자 및 홈 디렉토리 공유와 같은 호스트 통합 (Host integrations) 기능은 터미널의 어느 위치에 있든 Linux 환경에 빠르고 쉽게 접근할 수 있도록 해줍니다.
컨테이너 (Containers)는 일반적으로 애플리케이션을 모델로 합니다. 컨테이너 머신은 Linux 환경을 모델로 합니다. 이는 이미지의 init 시스템 (init system)을 실행하여 장기 실행 서비스 (long running services)를 등록하거나 프로세스 감독자 (process supervisor) 하에서 애플리케이션을 테스트할 수 있게 합니다. 컨테이너 머신은 사용자의 사용자 이름과 홈 디렉토리를 Linux 환경으로 자동으로 매핑합니다. 사용자의 리포지토리 (repositories)와 도트파일 (dotfiles)은 두 플랫폼 모두에서 사용할 수 있습니다. macOS에서 에디터와 도구를 직접 사용하면서 동시에 Linux 환경 내부에서 애플리케이션을 빌드하고 실행하십시오.
Mac에서 편집하고, 내부에서 빌드하십시오.
사용자의 리포지토리는 macOS의 $HOME에 존재하며, 컨테이너 머신 내부의 /Users/<username>에 마운트 (mounted)됩니다. macOS 에디터나 IDE를 사용하십시오. 컴파일과 실행은 컨테이너 머신 내부에서 수행합니다.
Linux 아티팩트 (artifacts)에 대해 macOS 네이티브 툴링을 사용하십시오.
Mac의 프로파일러 (Profilers), 스크린샷 도구, 브라우저, GUI 디버거는 모두 컨테이너 머신이 보는 것과 동일한 파일을 봅니다. 즉, "빌드했다"와 "검사 중이다" 사이에 복사 단계가 필요 없습니다.
테스트를 위한 실제 Linux 서비스.
데이터베이스나 스택에 필요한 무엇이든 시스템 서비스 (system service)로 실행하십시오. systemd가 설치된 이미지에서는 systemctl start postgresql 명령이 작동합니다.
대상 배포판당 하나의 환경.
대상 배포판 (target distros)의 수만큼 많은 컨테이너 머신을 생성하십시오 — alpine, ubuntu, debian 등. 각 머신은 Mac의 동일한 $HOME과 동일한 도트파일 (dotfiles)을 가집니다. 다양한 배포판에서 애플리케이션을 빠르게 테스트하십시오.
container machine create alpine:latest --name dev
container machine run -n dev whoami # root가 아닌 호스트 사용자 이름
container machine run -n dev pwd # /home/<you> — 마운트된 Mac 홈 디렉토리
...
container machine run은 쉘 (shell)을 얻거나 단일 명령어를 실행하는 방법입니다. 컨테이너 머신 (container machine)이 중지된 상태라면, run이 먼저 이를 부팅 (boot)합니다.
명령어를 전달하지 않으면, container machine run은 호스트 계정과 일치하는 사용자로 대화형 쉘 (interactive shell)을 엽니다:
container machine run -n dev
한 번 실행하고 종료하려면 명령어를 전달하십시오:
container machine run -n dev uname -a
container machine run -n dev -- cat /proc/cpuinfo
-n 플래그 (flag)를 생략할 수 있도록 기본 컨테이너 머신을 선택하십시오:
container machine set-default dev
container machine run # dev에서 동작
container machine ls # 모든 컨테이너 머신 목록 표시
container machine inspect dev # 특정 머신의 JSON 상세 정보
container machine stop dev # 컨테이너 머신 중지
...
container machine은 m이라는 별칭 (alias)을 가지므로, m ls, m run 등이 모두 작동합니다.
container machine set은 디스크 상의 설정을 업데이트합니다. 변경 사항은 다음 중지 및 시작 이후에 적용됩니다:
container machine set -n dev cpus=4 memory=8G
container machine stop dev
container machine run -n dev -- nproc
메모리 (memory)는 기본적으로 호스트 메모리의 절반으로 설정됩니다. 홈 마운트 (home-mount)는 rw (읽기/쓰기, 기본값), ro (읽기 전용), 또는 none (없음)으로 설정할 수 있습니다.
/sbin/init을 포함하는 모든 Linux 이미지 (image)는 컨테이너 머신으로 작동합니다. 예를 들어, 다음 Dockerfile은 systemd와 일반적인 커맨드라인 도구 (command-line tools)를 포함하는 Ubuntu 24.04 컨테이너 머신 이미지를 빌드합니다:
FROM ubuntu:24.04
ENV container container
RUN apt-get update && \
...
이를 빌드하고 해당 이미지로부터 컨테이너 머신을 생성하십시오:
container build -t local/ubuntu-machine:latest .
container machine create local/ubuntu-machine:latest --name ubuntu
기본적으로, container
기본적으로, container는 첫 부팅 시 내장된 설정 스크립트 (setup script)를 실행하여 위에서 설명한 사용자를 프로비저닝 (provision) 합니다. 대신 본인만의 설정을 사용하려면, 이미지의 /etc/machine/create-user.sh 경로에 실행 가능한 스크립트를 추가하세요.
이 스크립트는 첫 부팅 시 root 권한으로 단 한 번 실행되며, 다음과 같은 변수들이 설정됩니다:
CONTAINER_GID
CONTAINER_HOME
CONTAINER_MACHINE_ID
CONTAINER_UID
CONTAINER_USER
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Posts의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기