컨테이너는 필수적인 도구가 되었습니다. 컨테이너는 이식성, 일관성, 효율성을 제공하여 개발자가 다양한 환경에서 애플리케이션을 안정적으로 구축하고 배포할 수 있도록 합니다. 수년 동안 Docker는 macOS에서 사실상의 표준이었지만, Apple에서 탄생한 새로운 경쟁자가 Apple Silicon 개발자에게 보다 네이티브하고 통합적이며 간소화된 경험을 제공할 준비가 되어 있습니다: container
.
container
는 Mac에서 표준 OCI 호환 Linux 컨테이너를 생성하고 실행할 수 있게 해주는 Apple의 새로운 오픈 소스 도구입니다. 전적으로 Swift로 작성되었으며 Apple Silicon에 최적화된 이 도구는 다른 컨테이너 런타임에 대한 경량의 고성능 대안으로 설계되었습니다. macOS 자체의 가상화 기술을 활용하여 컨테이너를 최소한의 격리된 가상 머신으로 실행함으로써 더 나은 보안과 더 작은 공간을 약속합니다.
이 기사는 Apple의 container
프로젝트에 대한 심층 분석을 제공합니다. 아키텍처, 주요 이점, 그리고 첫 번째 컨테이너화된 애플리케이션을 구축, 실행 및 공유하는 방법에 대한 포괄적인 튜토리얼을 살펴보겠습니다. 숙련된 백엔드 개발자이든 호기심 많은 Mac 사용자이든 관계없이 이 흥미로운 새 도구를 시작하는 데 필요한 모든 것을 찾을 수 있습니다.
최대 생산성으로 개발 팀이 함께 작업할 수 있는 통합된 올인원 플랫폼을 원하십니까?
Apidog는 귀하의 모든 요구 사항을 충족하며 Postman을 훨씬 더 저렴한 가격으로 대체합니다!
새로운 컨테이너 도구가 필요한 이유? container
의 비전
기존 플레이어가 지배하는 환경에서 Apple은 왜 자체 컨테이너 도구를 구축하기로 결정했을까요? 그 답은 자체 하드웨어 및 소프트웨어에서 깊이 통합되고 성능이 뛰어나며 개발자 친화적인 경험을 제공하려는 비전에 있습니다. container
는 단순한 또 다른 Docker 클론이 아닙니다. Mac에서 컨테이너화가 무엇인지 재해석한 것입니다.
Apple Silicon에서의 네이티브 성능
더 무거운 Linux 가상 머신이나 크로스 플랫폼 호환성 레이어에 의존할 수 있는 다른 솔루션과 달리, container
는 Apple Silicon을 위해 처음부터 구축되었습니다. Apple의 네이티브 Virtualization.framework
와 직접 통신하는 Swift 애플리케이션입니다. 이는 상당한 성능 이점을 가져옵니다. 런타임 자체에 Rosetta 2와 같은 에뮬레이션 레이어가 없으며, 각 컨테이너는 자체의 경량 VM에서 실행되어 완전한 가상 머신을 시작하는 데 걸리는 시간의 일부만 소요됩니다.
독특하게 안전한 아키텍처
보안은 container
설계의 초석입니다. 기술 개요는 핵심 아키텍처 결정을 보여줍니다. 단일 공유 Linux VM 내에서 모든 컨테이너를 실행하는 대신, container
는 각 컨테이너를 위해 전용의 최소 마이크로 VM을 시작합니다.
이 "컨테이너당 하나의 VM" 모델은 강력한 하드웨어 수준 격리를 제공합니다. 컨테이너를 탈출한 프로세스는 다른 컨테이너에 접근할 수 있는 공유 환경이 아닌, 엄격하게 제한된 단일 목적 VM 내부에 있게 됩니다. 이는 잠재적인 공격 표면을 크게 줄이고 개발 환경의 전반적인 보안 상태를 향상시킵니다.
OCI 준수: 다른 도구와의 원활한 연동
독특한 아키텍처에도 불구하고 container
는 개방형 표준을 완전히 수용합니다. Open Container Initiative (OCI) 호환 이미지를 사용하고 생성합니다. 이는 독점적인 생태계에 갇히지 않는다는 의미에서 중요한 기능입니다. Docker Hub에서 표준 이미지를 가져와 container
로 실행하고, 새 이미지를 빌드하여 GitHub Container Registry (ghcr.io)와 같은 모든 OCI 호환 레지스트리로 다시 푸시할 수 있습니다. container
로 빌드된 이미지는 다른 도구와 프로덕션 CI/CD 파이프라인에서 원활하게 작동합니다.
깊이 있는 macOS 통합
container
는 macOS에서 훌륭하게 작동합니다. 핵심 시스템 기술과 통합되어 원활한 사용자 경험을 제공합니다:
- 가상화 및 네트워킹: 효율적인 VM 및 네트워크 관리를 위해
Virtualization.framework
및vmnet
을 사용합니다. - 서비스 관리:
container-apiserver
데몬은 macOS에서 서비스를 관리하는 표준 방식인launchd
에 의해 관리됩니다. - 보안: 레지스트리 자격 증명을 안전하게 저장하기 위해 Keychain 서비스를 활용합니다.
- 로깅: macOS 통합 로깅 시스템과 통합되어 모든 진단 출력이 익숙한 위치에 있습니다.
내부 살펴보기: 간략한 기술 심층 분석
container
명령줄 도구(container
)는 백그라운드 서버 프로세스인 container-apiserver
와 통신하는 클라이언트입니다. container system start
명령으로 시작하는 이 서버가 모든 것을 관리합니다.
container run
과 같은 명령을 실행하면 API 서버는 해당 특정 컨테이너를 위한 전용 런타임 헬퍼(container-runtime-linux
)를 시작합니다. 이 헬퍼는 Virtualization.framework
를 사용하여 컨테이너 프로세스를 호스팅하는 새롭고 최소한의 Linux VM을 시작합니다. 이 아키텍처는 우아하고 견고하며 보안과 성능을 위해 설계되었습니다.
새로운 프로젝트인 만큼 container
에는 몇 가지 제한 사항이 있다는 점에 유의해야 합니다. 최신 버전의 macOS(macOS 15 필요, 최신 macOS 26 Beta 1에서 최상의 성능)가 필요합니다. 컨테이너와 호스트 간의 네트워킹에는 몇 가지 특정 해결 방법이 있으며, 메모리 벌루닝과 같은 고급 기능은 아직 개발 중입니다. 그러나 기반은 견고하며 프로젝트는 빠르게 발전하고 있습니다.
container
사용 방법: 단계별 튜토리얼
실습을 시작해 보겠습니다. 이 튜토리얼은 간단한 웹 서버용 이미지를 구축하고, 실행하고, 상호 작용하고, 게시하는 등 컨테이너의 전체 수명 주기를 안내합니다.
단계 1: 설치 및 설정
먼저 요구 사항을 충족하는지 확인하십시오: 최신 버전의 macOS가 실행되는 Apple Silicon Mac.
container
설치: 프로젝트 GitHub 릴리스 페이지에서 최신 서명된 설치 패키지를 다운로드하십시오. .pkg
파일을 두 번 클릭하고 설치 지침을 따르십시오.
서비스 시작: 터미널을 열고 container
시스템 서비스를 시작하십시오.
container system start
이 명령을 처음 실행하면 기본 Linux 커널을 다운로드하고 설치하라는 메시지가 표시될 수 있습니다. y
를 입력하고 Enter를 눌러 진행하십시오.
설치 확인: 사용 가능한 모든 컨테이너를 나열하여 서비스가 실행 중인지 확인하십시오 (이 시점에는 아무것도 없어야 합니다).
container ls -a
# You should see empty headers:
# ID IMAGE OS ARCH STATE ADDR
단계 2: 첫 번째 이미지 빌드
이제 간단한 Python 웹 서버용 컨테이너 이미지를 만들어 보겠습니다.
프로젝트 디렉터리 생성:
mkdir web-test
cd web-test
Dockerfile
생성: web-test
디렉터리 안에 다음 내용으로 Dockerfile
(또는 Containerfile
)이라는 파일을 생성하십시오. 이 파일은 이미지에 대한 "레시피"를 정의합니다.
# Start from a lightweight Python base image
FROM docker.io/python:alpine
# Set the working directory inside the container
WORKDIR /content
# Add the 'curl' utility for testing
RUN apk add curl
# Create a simple HTML file
RUN echo '<!DOCTYPE html><html><head><title>Hello from Container</title></head><body><h1>Hello, Apple Container!</h1></body></html>' > index.html
# The command to run when the container starts
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]
이미지 빌드: 이제 container
에게 Dockerfile
에서 이미지를 빌드하도록 지시하십시오. 이미지 이름은 web-test
로 태그를 지정하겠습니다.
container build --tag web-test --file Dockerfile .
끝에 있는 .
는 빌더에게 현재 디렉터리를 컨텍스트로 사용하도록 지시합니다.
이미지 나열: 빌드가 완료되면 로컬 이미지 저장소에서 새 이미지를 볼 수 있습니다.
container images list
# You should see your `web-test` image and the `python:alpine` base image.
# NAME TAG DIGEST
# python alpine b4d299311845...
# web-test latest 25b99501f174...
단계 3: 컨테이너 실행
이미지를 빌드했으니 이제 실행해 보겠습니다.
웹 서버 실행: container run
명령을 사용하여 web-test
이미지에서 컨테이너를 시작하십시오.
container run --name my-web-server --detach --rm web-test
플래그를 살펴보겠습니다:
-name my-web-server
: 컨테이너에 기억하기 쉬운 이름을 지정합니다.-detach
(또는d
): 컨테이너를 백그라운드에서 실행합니다.-rm
: 컨테이너가 중지될 때 컨테이너 기록을 자동으로 제거하여 깔끔하게 유지합니다.
실행 중인 컨테이너 확인: 활성 컨테이너를 나열하십시오.
container ls
my-web-server
컨테이너가 running
상태로 표시되며, ADDR
열에 할당된 IP 주소(예: 192.168.64.3
)도 함께 표시됩니다.
웹 서버 접속: 웹 브라우저를 열고 이전 단계에서 표시된 IP 주소로 이동하십시오. "Hello, Apple Container!" 메시지가 표시될 것입니다.
# IP 주소를 `container ls`에서 얻은 주소로 바꾸십시오
open <http://192.168.64.3>
단계 4: 컨테이너와 상호 작용
container
는 실행 중인 컨테이너와 상호 작용할 수 있는 강력한 도구를 제공합니다.
명령 실행: container exec
를 사용하여 컨테이너 내부에서 직접 명령을 실행할 수 있습니다. 웹 서버의 콘텐츠 디렉터리에 있는 파일을 나열해 보겠습니다.
container exec my-web-server ls /content
# 출력: index.html
대화형 셸 열기: 더 복잡한 디버깅을 위해 컨테이너 내부에서 대화형 셸을 얻을 수 있습니다.
container exec -it my-web-server sh
-it
플래그(--interactive
및 --tty
)는 터미널을 컨테이너 내부의 셸에 연결하는 데 중요합니다. 컨테이너의 WORKDIR
내부 셸 프롬프트로 이동됩니다. 주변을 살펴보고 프로세스를 확인한 다음 exit
를 입력하여 Mac의 터미널로 돌아갈 수 있습니다.
단계 5: 이미지 게시
작업을 공유하는 것은 쉽습니다. 이미지를 컨테이너 레지스트리로 푸시해 보겠습니다. 이 예제는 Docker Hub를 사용하지만 모든 OCI 레지스트리도 작동합니다. (이는 사용자 이름 fido
로 Docker Hub 계정이 있다고 가정합니다).
레지스트리 로그인:
# 사용자 이름과 비밀번호/토큰을 입력하라는 메시지가 표시됩니다
container registry login docker.io
게시를 위한 이미지 태그 지정: 레지스트리는 이미지가 registry/username/image:tag
형식으로 이름이 지정되어야 합니다. 이미지에 새 태그를 만들어 보겠습니다.
container images tag web-test docker.io/fido/web-test:latest
이미지 푸시:
container images push docker.io/fido/web-test:latest
이제 이미지는 다른 사용자가 모든 OCI 호환 플랫폼에서 가져와 실행할 수 있습니다!
단계 6: 정리
작업을 마쳤으면 컨테이너를 중지하고 서비스를 종료할 수 있습니다.
# 컨테이너 중지
container stop my-web-server
# 모든 컨테이너 서비스 중지
container system stop
기본 사항 그 이상
튜토리얼은 핵심 워크플로를 다루지만, container
는 더 많은 것을 할 수 있습니다. 다음은 how-to.md
문서에 있는 몇 가지 기능입니다:
리소스 관리: 컨테이너에 할당된 리소스를 제어할 수 있습니다. 메모리 집약적인 빌드의 경우 빌더에게 더 많은 RAM과 CPU를 할당할 수 있습니다:
container builder start --cpus 8 --memory 16g
파일 공유: -volume
플래그를 사용하여 Mac의 디렉터리를 컨테이너에 마운트할 수 있습니다. 이는 호스트에서 코드를 편집하고 컨테이너에서 변경 사항을 실시간으로 확인하려는 개발 워크플로에 필수적입니다.
container run --volume ${HOME}/my-project:/app my-image
멀티 플랫폼 빌드: 단일 명령으로 Apple Silicon(arm64
) 및 Intel(amd64
) 아키텍처 모두에서 실행되는 이미지를 빌드할 수 있어 다양한 서버 환경에 배포하는 데 적합합니다.
container build --arch arm64 --arch amd64 --tag my-multi-arch-image .
고급 검사: container inspect
명령은 컨테이너 및 이미지에 대한 상세한 JSON 정보를 제공하여 스크립팅 및 자동화에 유용합니다.
결론
Apple의 container
는 단순한 새로운 도구 이상입니다. 그것은 선언입니다. 이는 클라우드 네이티브 개발의 현대 시대를 위한 일류의 통합 개발 도구를 제공하겠다는 약속을 나타냅니다. Apple은 경량의 안전하고 성능이 뛰어난 컨테이너 런타임을 OS에 직접 구축함으로써 Mac에서의 컨테이너화 진입 장벽을 낮추고 기존 솔루션에 대한 매력적인 대안을 제공하고 있습니다.
이 프로젝트는 아직 초기 단계이지만, 그 기반은 견고하고 아키텍처는 안정적이며 개방형 표준 준수는 더 넓은 컨테이너 생태계에서 가치 있는 플레이어가 될 것임을 보장합니다. Apple Silicon Mac 개발자라면 오늘 container
를 주목하고 시도해 봐야 할 프로젝트입니다.
최대 생산성으로 개발 팀이 함께 작업할 수 있는 통합된 올인원 플랫폼을 원하십니까?
Apidog는 귀하의 모든 요구 사항을 충족하며 Postman을 훨씬 더 저렴한 가격으로 대체합니다!