はじめに
Apple が提供する、Mac(Apple Silicon)向けの新しいコンテナ実行ツール Container を試してみました。
このツールは、Linux の OCI 準拠コンテナイメージを扱いつつ、Swift 言語で実装されており、各コンテナを 軽量な仮想マシン(VM) として起動します。Docker などの従来のコンテナとは異なり、Kata Containers を基盤とした分離実行環境が特徴です。
本記事では、Container の導入から、Ubuntu コンテナの起動、ネットワークの調整、簡単な Web サーバーの実行までを試してみます。
Apple Container のインストール
Container はまだ正式リリース段階ではなく、GitHub の Releases ページ からバイナリを取得してインストールします。(Apple Silicon / macOS 15 以降が前提です)
Apple Container の実行
Apple Conntainer を動作させていく
1. コンテナサービスの起動
最初にコンテナサービスを起動します
container system start
初回起動時には kata のランタイムなどの構成が必要になるため、以下のようなログが表示されます。
Verifying apiserver is running...
Installing base container filesystem...
No default kernel configured.
Install the recommended default kernel from [https://github.com/kata-containers/kata-containers/releases/download/3.17.0/kata-static-3.17.0-arm64.tar.xz]? [Y/n]: y
Installing kernel...
2. Ubuntu コンテナの起動
container run -ti --rm ubuntu /bin/bash
コンテナ内で ifconfig を実行して、ホストとコンテナのネットワーク構成を確認してみます。
ifconfig
bridge100 インターフェースが 192.168.106.1/24 を使っているのが確認できます。
bridge100: flags=8a63<UP,BROADCAST,SMART,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
options=63<RXCSUM,TXCSUM,TSO4,TSO6>
ether 82:a9:97:31:d4:64
inet 192.168.106.1 netmask 0xffffff00 broadcast 192.168.106.255
inet6 fe80::80a9:97ff:fe31:d464%bridge100 prefixlen 64 scopeid 0x17
inet6 fdbb:e645:f4df:3ab:8fa:61c2:4599:2e76 prefixlen 64 autoconf secured
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x0
member: vmenet0 flags=10803<LEARNING,DISCOVER,PRIVATE,CSUM>
ifmaxaddr 0 port 22 priority 0 path cost 0
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
3. コンテナのネットワークを合わせる
コンテナに設定されているネットワークを container ls
コマンドで確認すると 192.168.1.2
となっていました。このままではコンテナ内部からインターネットに接続ができませn。
container ls
ID IMAGE OS ARCH STATE ADDR
fc65ac22-d996-466d-9300-b611c7d98d13 docker.io/library/ubuntu:latest linux arm64 running 192.168.1.2
コンテナを終了して、ネットワーク設定を合わせます。
container system stop
defaults write com.apple.container.defaults network.subnet 192.168.106.1/24
container system start
コンテナを再起動します
container run -ti --rm ubuntu /bin/bash
コンテナのアドレスを再確認します
container ls
これでホストと同一のサブネット内に配置され、インターネットへのアクセスが可能になります。
ID IMAGE OS ARCH STATE ADDR
f7160b1b-c7e2-49ee-a163-611034619615 docker.io/library/ubuntu:latest linux arm64 running 192.168.106.2
コンテナ内でWebサーバーを実行
pythonをインストールします
apt-get update & apt-get install -y python3
Webサーバーを起動します
python3 -m http.server 80 --bind 0.0.0.0
ホスト側からコンテナ内のWebサーバーにアクセス確認します
curl 192.168.106.2
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Directory listing for /</title>
</head>
<body>
<h1>Directory listing for /</h1>
...
</body>
</html>
おわりに
Apple Container は、従来の Docker とは一線を画す macOS ネイティブのコンテナランタイムであり、セキュリティや分離性の高い開発環境を求めるユーザーにとって魅力的な選択肢になりそうです。
今後のアップデートにも注目したいと思います
次回の記事では、コンテナへの CPU およびメモリの割り当て方法、そして amd64(x86_64)用コンテナイメージの実行方法について確認します。最終的には、M3 MacBook Pro 上で Chromium のビルドに挑戦します。
参考資料
containerのバイナリを入手してインストールする
https://github.com/apple/container/releases
containerのチュートリアル
https://github.com/apple/container/blob/main/docs/tutorial.md
containerのツール入門ガイド
https://qiita.com/1amageek/items/76a52fddbae6a89b5c5a