WWDC 26で発表された container、記事がQiitaでも徐々に増えてきてますね。
こういった記事を読んで、container を使ってみたところ、管理者権限なしで色々できることに気づきました。
で、Dockerの代わりにならないかと思ってAIに相談し、紹介してもらったのが「mocker」。
homebrewでインストールできるようだし、これは試してみるしかない!
インストール
パターン1, 2のどちらかの方法で信頼するようにしてから、brew install mockerを実行。
# パターン1: このformula(mocker)だけを信頼する場合
brew trust --formula us/tap/mocker
# パターン2: このtap全体(us/tap配下の全パッケージ)を信頼する場合
brew trust us/tap
# mockerをインストール
brew install mocker
docker コマンドのエイリアス設定
.bashrc または .zshrc に以下を追記して、docker コマンドのエリアスとして mocker を設定します。
alias docker='mocker'
設定したら、 source .bashrc か source .zshrc を実行。
Dockerfileを準備
Dockerfileの内容は以下の通り。
# 軽量な Alpine Linux ベースの Nginx イメージを使用
FROM nginx:alpine
# HTML ファイルを Nginx の公開ディレクトリにコピー
COPY index.html /usr/share/nginx/html/index.html
# 80番ポートを開放
EXPOSE 80
# Nginx をフォアグラウンドで起動
CMD ["nginx", "-g", "daemon off;"]
Dockerfileと同じディレクトリに、以下のファイルも作っておきます。
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello Docker</title>
</head>
<body>
<h1>httpd が正常に動いています!</h1>
</body>
</html>
いざ実行
以下のようにして仮想環境を構築
% docker build -t my-http-app .
Building my-http-app...
[+] Building 9.5s (7/7) FINISHED
=> [resolver] fetching image...docker.io/library/nginx:alpine 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 358B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 210B 0.0s
=> oci-layout://docker.io/library/nginx:alpine@sha256:4a73073bd557c65b759505da037898b61f1be6cbcc3c2c3aeac22d2a470c1752 0.9s
=> => resolve docker.io/library/nginx:alpine@sha256:4a73073bd557c65b759505da037898b61f1be6cbcc3c2c3aeac22d2a470c1752 0.1s
=> => sha256:ba4be3b26f08037fa63337d7a425d3253b887bff559447733e71759f65b0f8c8 1.40kB / 1.40kB 0.0s
=> => sha256:c4a042f5cf717d2e64d2176a41624344a2f1ad0475f6ac6dae092aefbbd07b37 405B / 405B 0.0s
=> => sha256:e1f13a453c9dd406f331a3efefeb846cd18b068d73177c0d57c6f3d5169eacb4 1.21kB / 1.21kB 0.0s
=> => sha256:d0e9565ba4ff139c848073b3358bb2c9b31a93cb9b744a5b0903b22f5a3ddc0f 956B / 956B 0.0s
=> => sha256:e42993d4c6ecb26b388e945cbe5f03be1f7858226750c1f8375883db2aae1243 626B / 626B 0.0s
=> => sha256:7b1fb50ff9dc606dba8c8c0e8eb4e98c650c5b289506f01724309ebf71a69d45 1.91MB / 1.91MB 0.0s
=> => sha256:977aedb192ade9f4f62ce4c6df02d8f62abe1e8710e006854398f8a7cda030e7 19.85MB / 19.85MB 0.4s
=> => sha256:5de55e5ef9c033997441461efe7ba23a986db059c0bb78b38f84ee0d72b99167 4.18MB / 4.18MB 0.1s
=> => extracting sha256:5de55e5ef9c033997441461efe7ba23a986db059c0bb78b38f84ee0d72b99167 0.1s
=> => extracting sha256:7b1fb50ff9dc606dba8c8c0e8eb4e98c650c5b289506f01724309ebf71a69d45 0.1s
=> => extracting sha256:e42993d4c6ecb26b388e945cbe5f03be1f7858226750c1f8375883db2aae1243 0.0s
=> => extracting sha256:d0e9565ba4ff139c848073b3358bb2c9b31a93cb9b744a5b0903b22f5a3ddc0f 0.0s
=> => extracting sha256:c4a042f5cf717d2e64d2176a41624344a2f1ad0475f6ac6dae092aefbbd07b37 0.0s
=> => extracting sha256:e1f13a453c9dd406f331a3efefeb846cd18b068d73177c0d57c6f3d5169eacb4 0.0s
=> => extracting sha256:ba4be3b26f08037fa63337d7a425d3253b887bff559447733e71759f65b0f8c8 0.0s
=> => extracting sha256:977aedb192ade9f4f62ce4c6df02d8f62abe1e8710e006854398f8a7cda030e7 0.3s
=> [linux/arm64/v8 1/2] COPY index.html /usr/share/nginx/html/index.html 0.3s
=> exporting to oci image format 0.4s
=> => exporting layers 0.0s
=> => exporting manifest sha256:2d08f45864cc7b275622e97c0595ae3f82c1b503161fa7fe065e10f268bd6478 0.0s
=> => exporting config sha256:b2eb16d1a7c35a7133d2808b40756d97ec65f9e4226a344fdf9b71f0a766fadc 0.0s
=> => exporting manifest list sha256:3d79ecedeedcea24ad8403134e757aa5b2d8263318596a1a6ec15f271631035e 0.0s
=> => sending tarball 0.4s
my-http-app:latest
Successfully built sha256:3d79e
Successfully tagged my-http-app
そして実行!
% docker run -d -p 8080:80 --name running-app my-http-app
running-app
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
running-app my-http-app 1分前 Up 8080:80/tcp running-app
起動できた!
% curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello Docker</title>
</head>
<body>
<h1>httpd が正常に動いています!</h1>
</body>
</html>
まとめ
Dockerの代わりになるのかはまだ分からないけれど、管理者権限のない業務用のMacでカジュアルに使えるDocker互換環境として面白いですね。