Docker Desktop使いがOrbStackでハマったところ
OrbStackを使い始めるときにハマったところ
この記事の内容
Docker Desktopが既にインストールされているmacOSに、OrbStackを新規インストールして使用したときに苦労したところをまとめてみました。同じような問題を抱えている方の参考になれば幸いです。
OrbStackを使う動機
macOS用の高速かつ軽量なDocker Desktopの代替であるOrbStack 1.0がリリースされ、評判が良さそうなので使ってみようと思います。OrbStackの特徴については、以下の記事などをご覧ください。
僕はMacBook Pro(Intel)のmacOS VenturaでDocker Desktopを使っていますが、起動や終了の速度や複数のコンテナを組み合わせて使った場合のパフォーマンスなどに問題を感じることもあり、OrbStackはDocker Desktopに比べてどの程度快適になるのか見ておきたいと思いました。
さらに、(dockerコンテナを持ってこなくても)多くのdistributionのLinuxが実行できるというのもお手軽で魅力的です。
以下のサイトは、OrbStack自身による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が存在します。
しかし、何やら色々とエラーメッセージが出てきて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が溢れちゃうよというお話し。
実際、該当ファイルのサイズを見てみたところ実際に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