2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apple Container を使ってみる

Last updated at Posted at 2025-06-14

はじめに

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 のランタイムなどの構成が必要になるため、以下のようなログが表示されます。

container system start のログ
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 を使っているのが確認できます。

ifconfigのログ
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
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
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>

image.png

おわりに

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?