🐘

Docker Desktop使いがOrbStackでハマったところ

2023/10/18に公開

OrbStackを使い始めるときにハマったところ

OrbStack

この記事の内容

Docker Desktopが既にインストールされているmacOSに、OrbStackを新規インストールして使用したときに苦労したところをまとめてみました。同じような問題を抱えている方の参考になれば幸いです。

OrbStackを使う動機

macOS用の高速かつ軽量なDocker Desktopの代替であるOrbStack 1.0がリリースされ、評判が良さそうなので使ってみようと思います。OrbStackの特徴については、以下の記事などをご覧ください。

https://www.publickey1.jp/blog/23/macdocker_desktopwslorbstack_10.html

僕はMacBook Pro(Intel)のmacOS VenturaでDocker Desktopを使っていますが、起動や終了の速度や複数のコンテナを組み合わせて使った場合のパフォーマンスなどに問題を感じることもあり、OrbStackはDocker Desktopに比べてどの程度快適になるのか見ておきたいと思いました。

さらに、(dockerコンテナを持ってこなくても)多くのdistributionのLinuxが実行できるというのもお手軽で魅力的です。

以下のサイトは、OrbStack自身によるDocker Desktopとの比較表です。これは使ってみたくなりますよね。

https://docs.orbstack.dev/compare/docker-desktop#orbstack-vs-docker-desktop

OrbStackをbrewでインストール

OrbStackは以下の公式サイトからダウンロードしてインストールすることもできますが、僕はいつもHomeBrewを使ってパッケージを管理しているため、brewコマンドでインストールしました。

コマンド1発でイントールできます。

brew install orbstack

さっそく起動してDocker Desktopからのmigrate

OrbStackを起動してContainers画面を開くと、以下のようにDocker Desktopのコンテナ等をmigrateするかというメッセージが出ているので、migrateボタンを押してDocker Desktopで作成してあるコンテナ等を取り込むことにします。僕のDocker Desktop環境には十数個のimagesとcontainersが存在します。

https://twitter.com/OrbStack/status/1683127228912246785

しかし、何やら色々とエラーメッセージが出てきてmigrateに失敗してしまいます。

dockerとDocker Desktopを再インストールしてみる

エラーメッセージを頼りに原因を探るのは難しそうなため、とりあえず、ずっとupgradeしていなかったdocker(CLI)とDocker Desktopを最新バージョンにupgradeしてみることにしました。

念の為OrbStackは一旦uninstallした後、docker(CLI)とDocker Desktopをupgradeします。

brew uninstall orbstack # orbstackを一旦アンインストール
brew upgrade docker # docker CLIをアップグレード
brew upgrade --cask docker # Docker Desktopをアップグレード

最後のDocker Desktopのアップグレード時に以下のエラーメッセージが表示されました。

Error: docker: It seems there is already a Binary at '/usr/local/bin/docker-index'.

何やらupgradeの途中でエラーが発生しているため、一旦Docker Desktopを(強制オプション --force をつけて)uninstallした後にinstallしなおします。これを行っても、既存のimagesとcontainersは削除されません。

brew uninstall --cask docker --force
brew install --cask docker

ここで、Docker Desktopを一旦起動して、既存のコンテナが使えることなどを確認しました。

migrateに再挑戦

さきほどOrbStackを一旦uninstallしたため、再度installします。

brew install orbstack

OrbStackを起動して、先ほどエラーになったDocker Desktopのmigrateに再挑戦です。OrbStackでmigrateを実行すると、Docker Desktopも自動的に起動されてコンテナデータの変換などが行われているようです。コンテナ数が多いため、数十分の時間がかかりましたが、めでたくmigrationは成功しました!!

これで、OrbStackによって既存Docker Desktopから移行したcontainersの起動は可能な状態となりました。

docker composeコマンドが動かない!

またまた問題発生です!

docker-compose.ymlファイルがあるディレクトリへ移動してdocker composeコマンドで、新しいコンテナを起動しようとすると、

$ docker compose up
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

というエラーが発生して止まってしまいます。dockerコマンドが、dockerサーバーに接続できないよというエラーのようです。OrbStackは起動されているため、docker daemonも起動されているはず。

いろいろググったところ、docker contextが正しく設定されていないのが原因のようでした。
僕の環境ではcontextをリストしてみると以下のようになっていました。

$ docker context list
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                KUBERNETES ENDPOINT   ORCHESTRATOR
default *           moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock
desktop-linux       moby                Docker Desktop                            unix:///Users/someone/.docker/run/docker.sock
orbstack            moby                OrbStack                                  unix:///Users/someone/.orbstack/run/docker.sock

defaultの/var/run/docker.sockは以下のように、desktop-linux(Docker Desktop)のunixソケットへのsymbolic linkとなっていました。

$ ls -l /var/run/docker.sock
lrwxr-xr-x@ 1 root  daemon  35 10 13 16:05 /var/run/docker.sock -> /Users/xxxx/.docker/run/docker.sock

以下のようにしてcontextをorbstackに切り替えてみます。

docker context use orbstack
$ docker context list
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                KUBERNETES ENDPOINT   ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock
desktop-linux       moby                Docker Desktop                            unix:///Users/xxxx/.docker/run/docker.sock
orbstack *          moby                OrbStack                                  unix:///Users/xxxx/.orbstack/run/docker.sock

$ docker compose up
[+] Building 0.0s (0/0)                                                                                                docker:orbstack
[+] Running 3/0
 ✔ Container XXXXXXXX-db-1          Created                                                                                   0.0s
 ✔ Container XXXXXXXX-wp-1          Created                                                                                   0.0s
 ✔ Container XXXXXXXX-phpmyadmin-1  Created                                                                                   0.0s
Attaching to XXXXXXXX-db-1, XXXXXXXX-phpmyadmin-1, XXXXXXXX-wp-1
...

今度は無事にOrbStack内のdockerサーバーへの接続が行われてコンテナの起動が成功しました!

dockerサーバーをdocker contextにより切り替える

OrbStackを終了して、Docker Desktopを起動すると、先に書いたdocker contextがdefaultになってしまい、以降またDocker Desktopのdockerサーバーに接続され、OrbStackのdockerサーバーに繋がらなくなります。

その際には再度、docker context use orbstackによりOrbStackのdockerサーバーへの切り替えが必要になります。

逆に、普段OrbStackを使っているけれども、Docker Desktopのdockerサーバーを使うように明示的に切り替えたい場合は、docker context use desktop-linuxとします。

/usr/local/binの下のdocker関連コマンド

OrbStackをインストールした後も、/usr/local/binの下のdocker関連のコマンド(symbolic link)は、Docker.app(Docker Desktop)にバンドルされているコマンドにリンクされたままです。

OrbStack DocsのCommand-line toolsの記載によると、

When you start OrbStack, these commands are automatically installed if you don't already have them. However, if you already have them installed from another source (such as Docker Desktop or Homebrew), they will be left alone. To switch to OrbStack's versions, uninstall or delete the old ones (e.g. /usr/local/bin/docker*) and restart the app.

とあり、OrbStackを起動した後も、Docker DesktopやHomebrewによりインストールされていた/usr/local/binの下のコマンドラインツールはそのまま残っているとのことです。つまり、それらを使い続けても問題ないということなのでしょう。

OrbStackに含まれるコマンドラインツールを使いたい場合は、/usr/local/bin/docker*などを削除してからOrbStackを再起動すると良いようです。このとき、/usr/local/binの下にOrbStackにバンドルされているコマンドラインツールへのsymbolic linkが作成されると思われます。

Tools will be installed by linking them to /usr/local/bin (for compatibility) and adding ~/.orbstack/bin to your PATH (for flexibility). If you don't want to install them globally, you can always find them at ~/.orbstack/bin.

OrbStackにバンドルされるコマンドラインツール(へのsymbolic link)は、~/.orbstack/binの下にもあるため、このディレクトリを/usr/local/binより前にPATH環境変数に追加しておけばOrbStackにバンドルされているdockerコマンドが優先して使われます。

8TBのsparse file問題

以下の方のブログも気になるところです。OrbStackが8TBのsparse fileを作成するので、これをbackupの対象にするとbackup diskが溢れちゃうよというお話し。

https://blog.cloudnative.co.jp/18182/

実際、該当ファイルのサイズを見てみたところ実際に8TBあるのが確認できました。

$ cd ~/.orbstack/data
$ ls -l
total 36701032
-rw-r--r--  1 xxxx  staff            540 10 13 18:36 README.txt
-rw-r--r--  1 xxxx  staff  8796093022208 10 16 16:48 data.img
-rw-r--r--  1 xxxx  staff     7516192768 10 13 18:36 swap.img
$ du -h -A data.img
8.0T	data.img
$ du -h data.img
 18G	data.img

data.imgというファイルは、OrbStackのドキュメントでも言及されていますが、OrbStackの仮想ディスクイメージを持つsparse fileです。見かけ上のサイズは8TBありますが、(現在の僕の環境で)実際にディスクが割り当てられている容量は18GBしかありません。
ファイルを読み出すと8TB読むことになるため、Time Machineでバックアップを取っている方は、この/.orbstack/data/data.imgをバックアップ対象から外すようにすると良いと思います。

起動時間

OrbStackとDocker Desktopの起動時間を測定してみました。dockのアイコンをクリックしてから、Containersの一覧が表示されるまでの時間です。

環境は、MacBook Pro 13-inch, 2020, Four Thunderbolt 3 ports (2GHz QuadCore Intel Core i5, 16GB mem, macOS Ventura 13.5.1)です。

アプリ 起動時間
OrbStack < 2秒
Docker Desktop 24秒

OrbStackの圧勝です。最近はDocker Desktopの起動と終了時間にだいぶストレスを感じるようになっていましたので、OrbStackいいぞってところです。

OrbStackの価格

OrbStackのPricingページによると2023年10月現在の価格は以下のようになっています。

プラン 内容 料金
Free 個人で非商用利用の場合 無料
Pro ビジネスで商用利用する場合 月払いUS$10(年払いUS$96)
Enterprise 企業でsingle sign onを利用したり請求書払いをする場合 営業問い合わせ

個人で非商用利用の場合は、OrbStack、Docker Desktop共に無料ですので、好きな方を使えば良いと思います。

日本企業で使う場合には円安のご時世、OrbStackの一人当たり年間US$96程度はやや高いですね。Docker Desktopが従業員250人未満または年間売上1,000万ドル未満までは無料なので、現在Docker Desktopを使っている企業がOrbStackに移行するには価格面での障壁があると思います。

おわりに

軽量・高速なDocker Desktop代替ツールであるOrbStackを試してみました。まだ本格的に使えていませんが、非常に期待が持てるツールだと感じました。

今後、Linuxサーバー機能などの使用感も別の記事として書いてみたいと思っています。

Discussion