Containerization Framework は Apple の OSS で提供される Mac 上で直接 Linux コンテナイメージの作成、ダウンロード、実行ができる API およびツールです。
キーノートでは一切触れられなかったけど、Newsroom の記事にこっそり載っており、Inductor さんのツイートで気づきました。
Containerization Framework
The Containerization framework enables developers to create, download, or run Linux container images directly on Mac. It’s built on an open-source framework optimized for Apple silicon and provides secure isolation between container images.
主なコードは以下の GitHub リポジトリで公開されています。
この記事では後者の container コマンドを利用してみます。
README 的にはリリースページからバイナリをダウンロードできるようになる予定らしいですが、現時点(2025/06/10)では以下の手順でインストールを行いました。
git clone --filter=blob:none https://github.com/apple/container
cd container
make
make install
container
OVERVIEW: A container platform for macOS
USAGE: container [--debug] subcommand>
OPTIONS:
--debug Enable debug output [environment: CONTAINER_DEBUG]
--version Show the version.
-h, --help Show help information.
CONTAINER SUBCOMMANDS:
create Create a new container
delete, rm Delete one or more containers
exec Run a new command in a running container
inspect Display information about one or more containers
kill Kill one or more running containers
list, ls List containers
logs Fetch container stdio or boot logs
run Run a container
start Start a container
stop Stop one or more running containers
IMAGE SUBCOMMANDS:
build Build an image from a Dockerfile
images, image, i Manage images
registry, r Manage registry configurations
SYSTEM SUBCOMMANDS:
builder Manage an image builder instance
system, s Manage system components
container system start
を実行するとコンテナの実行や作成ができるようになります。
Dockerfile からコンテナイメージの作成ができます。
container build . -t nginx
[+] Building 8.6s (4/4) FINISHED
=> [resolver] fetching image...docker.io/library/nginx 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [linux/arm64/v8 1/1] FROM docker.io/library/nginx:latest@sha256:fb39280b7b9eba5727c884a3c7810002e69e8f961cc373b89c92f14961d903a0 3.3s
=> => resolve docker.io/library/nginx:latest@sha256:fb39280b7b9eba5727c884a3c7810002e69e8f961cc373b89c92f14961d903a0 2.0s
=> => sha256:b16f1b16678093d11ecfece1004207a40f9bc1b7d9d1d16a070c1db552038818 28.07MB / 28.07MB 0.9s
=> => sha256:5c242ffc14bb4ca8740c858cc9c1a3efdb2fdd16170bf1ecbb04c28bba4a4df3 629B / 629B 0.2s
=> => sha256:c9a20772aff432be3d6f1d387ba4e04324ffc462018bbecac77da3b2777d6571 40.76MB / 40.76MB 1.3s
=> => sha256:99f78d9a3fb110d051d699e1a03dac4de9c223e528eb3e123d5f6b36af64dc0d 1.40kB / 1.40kB 0.5s
=> => sha256:bf2e7af999d2a5102cb712353946abf19b5477ae9b1b7b243b01ed7e37e23ec3 955B / 955B 0.4s
=> => sha256:5cbad98902925c3029f8aab8dde441ff2fb39265909385453cb6fa545cba6b1e 405B / 405B 0.2s
=> => sha256:4cf85f4d417b9405944634427415aaec4c52a312997fe9ab099b69fd7f5c8756 1.21kB / 1.21kB 0.2s
=> exporting to oci image format 1.8s
=> => exporting layers 0.0s
=> => exporting manifest sha256:ddfc3f9b1de49b3459bcd82976efc6cefd4c6da848cc261265ece07441b04895 0.0s
=> => exporting config sha256:356fe26062d80cafa5fc28a8a122ca8011bf1102bd1d5b0167cb2a5e39dad727 0.0s
=> => exporting manifest list sha256:63382f07f7595568ba1425745cf88aab8337f33d0277be773f09e91ead958906 0.0s
=> => sending tarball 0.5s
Successfully built nginx:latest
cat Dockerfile
FROM nginx:stable
コンテナの実行は container run
で行います。
オプションも基本的には Docker と同様みたいですね。
container run -ti --rm nginx
container ls
を実行することでアドレスを確認できます。
container ls
ID IMAGE OS ARCH STATE ADDR
buildkit ghcr.io/apple/container-builder-shim/builder:0.1.0 linux arm64 running 192.168.64.2
bf5b2544-1ce6-4987-b72d-59a014425a4d nginx:latest linux arm64 running 192.168.64.3
デフォルトでは 192.168.64.1/24
の範囲にアドレスが割り当てられて、上記の場合は 192.168.64.3
にアクセスすることで Nginx へのアクセスが確認できました。
より詳しい使い方や詳細についてはWWDCのビデオとドキュメントを参照してください。
所感としては、ツール的には Docker など他のツールをすでに使っていれば乗り換えるほどではないですが、肝としてはコンテナごとに隔離される CPU/メモリリソースの管理と Swift で提供される API だと思うので、リソースを厳密に分離したい際や macOS のアプリで Linux コンテナを利用したいといった時には便利な気はします。
Views: 0