Apple ContainerでLAMP環境を作る
先日リリースされたmacOS TahoeからContainer機能が正式に使えるようになったので、ちょこちょこと遊んでいました。
OCI(Open Container Initiative)準拠ということで既存のコンテナイメージも使えるし、Dockerfileもdockerと同じように記述してイメージを作成できます。 CLIもdockerと似たようなインターフェースになっているので、戸惑わずに使えるのがいい感じです。
ただし、docker composeに対応する機能は現時点ではまだありません。 私はdocker compose経由でコンテナを操作することがほとんどで、dockerコマンドを直接打つことはあまりないので、composeがないときついなぁと思っていたのですが、 今回、composeの代用としてシェルスクリプトで簡単に環境構築できるようにしてみました。
試しにLAMP環境を構築するシェルスクリプトを作成しました。
https://github.com/kztomita/apple-container-lamp
コンテナ構成図
このリポジトリのシェルスクリプトでは以下のようなコンテナ環境を構築します。

- Nginx, PHP-FPM, MySQLの3つのコンテナを作成(*1)
- DocumentRootはホスト(macOS)上のディレクトリをNginx, PHP-FPMコンテナからそれぞれバインドマウントして共有
- MySQLコンテナ用にボリュームを作成して /var/lib/mysql にマウント
使い方
使い方などは以下のREADMEに書いてあるのでそちらを参照してください。
https://github.com/kztomita/apple-container-lamp/blob/main/README-ja.md
スクリプトの中はたいしたことはしていないので、app.shの中を見ればすぐに内容は理解できるはずです。
事前に以下のようにコンテナ用DNSドメインの作成をしておく必要がありますのでご注意ください(*2)。
% sudo container system dns create box % container system dns default set box
これで起動する各コンテナのホスト名は "<コンテナ名>.box" となり、このホスト名でコンテナにアクセスできるようになります。
参考: https://github.com/apple/container/blob/0.4.1/docs/tutorial.md#set-up-a-local-dns-domain-optional
Dockerとの違い
環境を作りながら気づいた点が何点かあります。
(1) コンテナのIPアドレスは指定できない
現状、container runに--ipオプションがないので、Apple ContainerではコンテナのIPアドレスを直接指定はできないようです。 基本的にホスト名でアクセスすることになるのでしょう。このためコンテナのDNSドメインはあらかじめ設定しておいた方が無難かと思います。
(2) ファイルをbind mountできない
Dockerでは以下のようにファイルを指定してbind mountすることで、ファイル単体をコンテナ内に送り込むことができました。
$ docker run php:8.4-apache --rm --mount type=bind,source=./php.ini,target=/usr/local/etc/php/php.ini
Apple Containerの場合はファイルを指定してbind mountしようとするとエラーになるようです。
Error: invalidArgument: "path 'xxxxx/php-container/php.ini' is not a directory"
これは、ディレクトリ単位でbind mountするか、ディレクトリごとbind mountすることで見えなくなって困るファイルがあるのであれば、Dockerfileで個別にコピーするようにするしかなさそうです。
Apple Containerを使ってみた感想
このスクリプトでボリューム等のリソース作成やコンテナ作成処理を行う雛形を作れました。作成する環境が変わってもスクリプトを少し修正するだけで対応できそうなのでcomposeがなくてもとりあえずは使っていけそうな感じです。
私は普段はVMWare Fusion上にLinux Desktop環境を構築してそこで作業しています。 PHPなどはRemiを使えば複数バージョンを同時にインストールのは可能ですし、コンテナは
- 複数バージョンのMySQL,Postgres等のDBサーバーを入れて使い分けたい
- 少し古いバージョンのPHPを入れたい
等、限られた場合のみVMのLinux上にコンテナを作って対応していました。
コンテナはそれほど多用する方ではないのですが、Dockerもコンテナイメージなどで結構ディスクを使用するので、VMの中だとVMに割り当てたディスクが不足気味になることがままあり、VM自体の設定変更(ディスクの割り当て、再起動等)が面倒だなぁと感じることもたまにありました。この点、Apple ContainerならホストOS上のメモリやディスクを自由に使えるのでストレスが減りそうです。
また、今回のようにmacOS上に直接コンテナで環境を構築できれば、JetBrainsのIDE(PhpStorm等)もmacOSにインストールして開発できるのがよいですね(*3)。
個人的にはmacOS上にいろいろなファイルをまき散らすのが嫌で、全てVMの中に放り込んでおけば他のMacに移行したりするのもやりやすいのでまだVMも捨てがたいのですが、Apple Containerもなかなか魅力的な環境を提供してくれると感じました。
(*1) LAMPといいつつ、フロントはApacheではなくNginxです。
(*2) 今回は現時点で最新版のv0.4.1を使っていますが、Apple Containerのリポジトリを見ていると、v0.5.0からデフォルト設定は "container system property set dns.domain xxx" のように文法が変わるようなので注意が必要です。
(*3) JetBrainsのIDEは容量が結構大きいので、いくつも入れるとVMのディスクがすぐにいっぱいになるのです。
投稿日:2025/10/08 01:27