【Mac】OrbStackでDocker動作環境を構築する方法
M2チップ搭載のMac miniを新しく購入したのでDockerを快適に利用できる環境を構築したいと思い、軽量と評判のOrbStackでDockerが動作する環境を構築しました。OrbStackの公式ページに従って構築していますが、一部公式ページには説明が載っていないところもあったの補足説明しながら進めます。
OrbStackとは
最初にOrbStackとは何かについてと、利用するメリットについてお伝えします。構築手順のみ知りたい方はこの章は飛ばしてください。
OrbStackはDockerコンテナとLinuxの動作環境を作成するツールで、高速・軽量・容易な操作が売りです。
公式ページに記載されているOrbStackの良い点のリストは以下です。(一部意訳)
- 数秒での高速起動が可能
- 低CPU利用率
- 低ディスク利用率
- バッテリー消費が少ない
- Docker Desktopの完全互換(比較表:OrbStack vs. Docker Desktop · OrbStack Docs)
- VPNやDNSが使われている環境でも動作する
使う上での注意点
OrbStackは基本有料です。かつてベータ版として提供されていた時は完全無料だったのですが、もうベータ版ではなくなりました。なのでビジネス利用や商用利用の場合は有料です。非営利団体の場合でも課金が必要です。(2024年4月現在 一人当たり月8ドル)
個人利用の場合は無料です。教育目的での利用や非営利目的でのオープンソース開発の場合は、承認を受ける必要があります。
詳細を知りたい方は以下のページをご確認ください。
Frequently asked questions · OrbStack Docs
環境構築手順
Homebrewを使ってOrbStackをインストールする方法を説明します。(使えない方はこちらのページからOrbStackをダウンロードしてください。ダウンロードしたファイルを開けばOrbStackを利用するための準備は完了です。)
ターミナルを開いて以下のコマンドを実行します。
brew install orbstack
実行後以下のメッセージが出力されていたら問題なくインストールできています。
orbstack was successfully installed!
私の場合は以下の出力になっていました。
ringo@ringonoMac-mini ~ % brew install orbstack
Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 4 taps (homebrew/cask-versions, homebrew/services, homebrew/core and homebrew/cask).
==> New Formulae
beakerlib ffmpeg@6 kubecolor manim oj ratchet tartufo
beancount-language-server git-split-diffs lexido mantra overarch redict uni-algo
c-blosc2 gitu liblc3 mdformat parsedmarc rtabmap valkey
cotp ingress2gateway libscfg morpheus policy_sentry rustcat vfox
descope jnv llvm@17 msieve protoc-gen-js superfile whisperkit-cli
dissent jtbl logdy navidrome rage sysaidmin yo
==> New Casks
ableton-live-intro11 cahier fujifilm-x-raw-studio instantview obs-backgroundremoval requestly yandex-music
ableton-live-lite11 capcut galaxybudsclient ireal-pro oracle-jdk21 starnet2 yes24-ebook
ableton-live-standard11 clearvpn godspeed irpf2024 outfox steinberg-activation-manager
arctic corretto21 graalvm-jdk21 juxtacode paragon-extfs11 timelapze
arm-performance-libraries darkmodebuddy halloy lookaway phoenix-code toneprint
automattic-texts ente-auth hhkb-studio loungy posture-pal viable
boltai flox ibkr nperf proton-mail xcodepilot
You have 3 outdated formulae installed.
==> Caveats
Open the OrbStack app to finish setup.
==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/1142e564c1d8538a54fe7cc5acd06fc776274a81/Casks/o/orbstack.rb
################################################################################################################################################################################################################# 100.0%
==> Downloading https://cdn-updates.orbstack.dev/arm64/OrbStack_v1.5.1_16857_arm64.dmg
################################################################################################################################################################################################################# 100.0%
==> Installing Cask orbstack
==> Moving App 'OrbStack.app' to '/Applications/OrbStack.app'
==> Linking Binary 'orb' to '/opt/homebrew/bin/orb'
==> Linking Binary 'orbctl' to '/opt/homebrew/bin/orbctl'
🍺 orbstack was successfully installed!
==> `brew cleanup` has not been run in the last 30 days, running now...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Removing: /Users/ringo/Library/Caches/Homebrew/openssl@3--3.2.1... (9.4MB)
Removing: /Users/ringo/Library/Caches/Homebrew/zstd--1.5.5... (721.7KB)
Removing: /Users/ringo/Library/Logs/Homebrew/openssl@3... (64B)
Removing: /Users/ringo/Library/Logs/Homebrew/ca-certificates... (64B)
Removing: /Users/ringo/Library/Logs/Homebrew/mysql... (1.3KB)
ringo@ringonoMac-mini ~ %
あとは利用するだけです。とてつもなく簡単ですね。
OrbStackを通したDocker利用方法
インストール直後の場合、dockerコマンドがまだ使えません。dockerコマンドを実行しても以下のようなエラーが出力されてしまいます。
ringo@ringonoMac-mini ~ % docker
zsh: command not found: docker
ringo@ringonoMac-mini ~ %
まずはOrbStackを起動させる必要があります。LaunchpadにOrbStackが追加されているはずなので起動してください。OrbStackを起動すると以下のような画面になります。
Nextボタンをクリックすると以下の画面になります。OrbStackで何を利用したいのか問われており、今回はDockerを利用したいのでDockerを選択します。後から変更することも可能なので気軽に選んで問題ないです。
Dockerを選択するといくつかの画面が開きます。一つ一つ説明していきます。まずは以下の画面について。
dockerのCLIツールのインストールとDockerソケットの互換性改善をするかを聞かれています。今回はdockerコマンドを利用できるようにしたいのでユーザーのパスワードを入力後「ヘルパーをインストール」をクリックします。
次に以下の画面について。
私の場合は書類フォルダなどをiCloudを利用する形に設定しているので、許可をしました。
ここまで完了したらターミナルに戻ります。ターミナル上で以下のコマンドを実行してdockerコマンドを利用できるか試してみましょう。
docker run -it -p 80:80 docker/getting-started
このコマンドは"docker/getting-started"というDockerイメージからDockerコンテナを作り、Macの80番ポートをコンテナの80番ポートと紐づけるものです。
実行に成功すると以下のような出力があります。
ringo@ringonoMac-mini ~ % docker run -it -p 80:80 docker/getting-started
Unable to find image 'docker/getting-started:latest' locally
latest: Pulling from docker/getting-started
261da4162673: Pull complete
a60aada4c44a: Pull complete
2f61404bb4b8: Pull complete
fa3f58a317be: Pull complete
476bb2a1cc22: Pull complete
33a28b928e89: Pull complete
a879581b8e12: Pull complete
d0193f05f10f: Pull complete
14f901bbf056: Pull complete
Digest: sha256:d79336f4812b6547a53e735480dde67f8f8f7071b414fbd9297609ffb989abc1
Status: Downloaded newer image for docker/getting-started:latest
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/04/22 16:26:25 [notice] 1#1: using the "epoll" event method
2024/04/22 16:26:25 [notice] 1#1: nginx/1.23.3
2024/04/22 16:26:25 [notice] 1#1: built by gcc 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4)
2024/04/22 16:26:25 [notice] 1#1: OS: Linux 6.7.11-orbstack-00143-ge6b82e26cd22
2024/04/22 16:26:25 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2024/04/22 16:26:25 [notice] 1#1: start worker processes
2024/04/22 16:26:25 [notice] 1#1: start worker process 30
2024/04/22 16:26:25 [notice] 1#1: start worker process 31
2024/04/22 16:26:25 [notice] 1#1: start worker process 32
2024/04/22 16:26:25 [notice] 1#1: start worker process 33
2024/04/22 16:26:25 [notice] 1#1: start worker process 34
2024/04/22 16:26:25 [notice] 1#1: start worker process 35
2024/04/22 16:26:25 [notice] 1#1: start worker process 36
2024/04/22 16:26:25 [notice] 1#1: start worker process 37
私の環境では"docker/getting-started"というDockerイメージが存在していなかったので、Dockerイメージをプルしてからコンテナを立てる挙動になっています。
今ローカルホストの80番ポートにアクセスすれば構築したDockerコンテナの80番ポートに対してアクセスできるので試してみます。
safariやchromeなどのブラウザを開いてURL欄に「localhost:80」と入力してEnterを押してください。
以下の画像のようなDockerの入門ページが開かれたと思います。
問題なくDockerが使える状態になっていることを確認できましたね。
Tips
OrbStackは単純にDockerのコマンドを利用可能にするだけではなく、OrbStackのGUIからDocker関連の管理を容易に行えるようにしてくれます。
例えば以下の画面がありますが、真ん中のDockerコンテナ名の右にあるアイコンで、コンテナへのWebアクセス、コンテナ内のファイルのGUI操作、コンテナの停止、コンテナの削除が可能です。
他にもGUIで操作できる項目はたくさんあるので、色々試してみてください。
特にファイル操作はdocker cpなどのCLIを使わなくて済むのでとてもありがたいです。
まとめ
OrbStackを利用できるようにするところから、OrbStackを利用してDockerコンテナを構築しアクセスできるところまで試しました。今のところ操作はかなり軽量だったために開発が捗りそうです。
また気になるソフトウェアやOrbStackの良い機能が見つかったら紹介しますね。