1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOS標準のcontainerとmockerを使って、管理者権限なしで docker が使えるようにしてみた

1
Posted at

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互換環境として面白いですね。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?