12k
All articles

ローカル開発向けDockerの代替ツール5選

ローカル開発向けのDocker Desktop代替ツール5種、Podman、OrbStack、Colima、Rancher Desktop、Limaを比較。対応OS、料金、Docker CLIとComposeの互換性を確認できます。

OpenReplay Team
OpenReplay Team
ローカル開発向けDockerの代替ツール5選

ローカル開発で試す価値のあるDocker Desktopの代替ツールは、Podman(Podman Desktop)、OrbStack、Colima、Rancher Desktop、Lima(nerdctl)の5つです。ただし、docker コマンドの裏側で本物のDocker Engineを動かし続けるのは、このうち一部のツールに限られます。

Postgresのコンテナを起動した途端にファンが回り出す。あるいは、経理部門からDocker Desktopのライセンスを何席分契約しているのか問い合わせが来た。いずれにしても知りたいのは、docker run のスクリプトやComposeファイルをそのまま動かせる代替ツールはどれか、ということでしょう。

本記事ではイメージやコンテナの基礎には触れません。基礎についてはDockerイメージとコンテナの入門ガイドを参照してください。以下の各ツールは、対応OS、コスト、エンジン、docker CLIとの互換性、Composeとの互換性、向いているユーザー、インストールして最初のコンテナを動かすまでのコマンドという共通の観点で評価しています。

重要なポイント

  • Docker Desktopは、従業員数250人未満かつ年間売上高1,000万ドル未満の企業であれば無料で利用できます。これを超える企業では、有料のPro、Team、Businessいずれかのサブスクリプションが必要です。
  • OrbStackとColima(デフォルトモード)は、より軽量なVM上でDocker Engineを動かします。一方、PodmanとcontainerdおよびnerdctlのA組み合わせは、エンジン自体を置き換えます。
  • macOSとWindowsでは、本記事で取り上げるどのツールも、Linuxコンテナを仮想マシン内で実行します。
  • podman compose は存在しますが、処理を外部プロバイダー(docker-composeまたはpodman-compose)に委譲するため、どちらかをインストールしておく必要があります。
  • ツールを切り替えた後に docker が動かなくなった場合は、docker context ls を実行して、CLIがどのエンジンのエンドポイントを指しているかを確認してください。

なぜ開発者はローカル環境でDockerの代替を探すのか

開発者がDocker Desktopから離れる理由は、主にライセンス、リソース消費、macOSでのファイル共有速度の3つです。

  • ライセンス:Docker Desktopのライセンス条件では、個人利用、教育目的、非商用のオープンソース、そして従業員数250人未満かつ年間売上高1,000万ドル未満の企業であれば無料で利用できます。いずれかの基準を超える企業には、有料のPro、Team、Businessサブスクリプションが必要です。
  • メモリとバッテリー:macOSとWindowsでは、Docker Desktopはコンテナが1つでも起動している間はLinux VMを動かし続けます。このVMは、コンテナがアイドル状態であってもメモリと電力を消費します。Docker DesktopのResource SaverモードがVMを停止するのは、一定時間(デフォルトでは5分間)コンテナが実行されなかった場合に限られます。
  • バインドマウント:macOSでは、ホストからコンテナにマウントされたファイルはVMの境界を越える必要があります。Docker自身のドキュメントでも、コードベースが大きくなるとバインドマウントが遅くなる場合があると述べられており、そのためにDocker Desktopには同期ファイル共有(synchronized file shares)が追加されました。巨大な node_modules ツリーやファイルウォッチャーを使う場面で、この遅さが顕著に表れます。

各Docker代替ツールは実際に何を置き換えるのか

Docker Desktopは、Linux仮想マシン、Docker Engine、GUIをひとまとめにしたデスクトップアプリケーションです。Docker Desktopを置き換えることは、必ずしもDocker Engineを置き換えることを意味しません。代替ツールは次の2つのグループに分かれます。

グループツールdocker コマンドの通信先
軽量なVM上でDocker Engineを実行OrbStack、Colima(デフォルトランタイム)、Rancher Desktop(mobyモード)本物のDockerデーモン
エンジンを置き換えPodman、Lima/containerd(nerdctl)、Rancher Desktop(containerdモード)PodmanのDocker互換API、nerdctlの場合は通信先なし。主にDockerの構文を模倣したCLIを使用

Docker Engineグループでは、docker CLIとComposeは引き続きDockerデーモンと通信します。エンジン置き換えグループでは、Dockerとの互換性は、Dockerの構文を模倣したコマンドラインレイヤーと、Podmanの場合はDocker APIの呼び出しに応答するソケットによって実現されます。macOSとWindowsでは、ここで取り上げるどのツールもLinuxコンテナをVM内で実行します。ツールを切り替えて変わるのはVMの管理方法であり、VMの有無ではありません。

ツールを切り替えると docker が動かなくなるのはなぜか

docker CLIは、DOCKER_HOST 変数またはアクティブなDockerコンテキストが指すソケットに接続します。代替ツールをインストールした後にコマンドが失敗する場合、多くはCLIの接続先が、背後でエンジンが動いていないソケットになっていることが原因です。エラーメッセージの詳しい解説は、「Docker daemon not running」エラーのトラブルシューティングガイドを参照してください。

docker context ls          # the active endpoint is marked with *
docker context use colima  # point the CLI at another engine

Docker Desktopをアンインストールしなくても、代替ツールを試すことは可能です。コンテキストを切り替えて新しいツールを試し、終わったら元に戻せばよいのです。

各ツールを検証するためのComposeファイル

各ツールの確認には、最小限の1つのファイルを使いましょう。事前にYAMLバリデーターでチェックしておけば、失敗した場合でもタイプミスではなくツール側の問題だと切り分けられます。

# compose.yaml
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example
    ports:
      - "5432:5432"

Docker代替ツールの比較

ツールOSコストエンジンdocker CLICompose
Podman + Podman DesktopmacOS、Windows、Linux無料、オープンソースPodmanエイリアスまたはAPIソケット経由podman compose + プロバイダー
OrbStackmacOS個人は無料、商用は有料Docker Engine対応対応(同梱)
ColimamacOS、Linux無料、オープンソースDocker(デフォルト)対応(別途インストール)別途インストール
Rancher DesktopmacOS、Windows、Linux無料containerdまたはmobymobyモードで対応nerdctl compose または docker compose
Lima + nerdctlmacOS、Linux無料、オープンソースcontainerd非対応(nerdctl)nerdctl compose

Podman(Podman Desktop)

PodmanはDockerのエンジンを置き換えるツールで、デーモンを持ちません。Podman DesktopはmacOS、Windows、Linuxに対応した無料のオープンソースソフトウェアです。MacとWindowsではネイティブの podman コマンドが使え、コンテナはPodmanがPodman machineと呼ぶLinux VM内で実行されます。

  • docker CLI:PodmanのコマンドはDockerの構文を採用しているため、alias docker=podman で日常的な用途の大半をカバーできます。MacとWindowsでは、PodmanはDocker APIクライアントからの接続も受け付けるため、本物のdocker CLIやDockerベースのツールをPodmanのソケットに向けることもできます。
  • Compose:podman composeは組み込まれていますが、処理をdocker-composeまたはpodman-composeに渡す薄いラッパーにすぎません。どちらかを先にインストールしておきましょう。
  • 向いているユーザー:macOS、Windows、Linuxで共通して使える無料ツールを必要とするチーム。
brew install podman
podman machine init
podman machine start
podman run --rm hello-world
podman compose up

Podmanのインストールドキュメントでは、macOSではHomebrewよりも公式インストーラーの利用が推奨されています。Podman Desktopには専用のインストーラーがあります。

OrbStack

OrbStackはmacOS専用のアプリです。DockerエンジンとComposeツールを同梱しており、Docker Desktopと同じように動作することを目指しているため、docker CLIやComposeを変更なしで使えます。

  • コスト:OrbStackのライセンス条件では、個人利用は無料です。フリーランス、企業、非営利団体での利用には、ユーザー単位の有料ライセンスが必要です。
  • Compose:同梱されています。
  • 向いているユーザー:Docker Desktopのワークフローを維持しつつ、VMレイヤーを変えたいMac専用のチーム。ローカル開発向けDev Containersのようなプロジェクト単位のセットアップも引き続き動作します。
brew install --cask orbstack
docker run --rm hello-world
docker compose up

Colima

Colimaは、macOS(IntelおよびApple Silicon)とLinuxに対応した無料のコマンドラインツールです。デフォルトのDockerランタイムでは、ColimaはVM内でDockerのエンジンを実行します。containerdおよびIncusのランタイムも利用できます。

  • docker CLI:別途インストールします。
  • Compose:同梱されていません。Homebrewの docker-compose フォーミュラをインストールし、docker compose が動作するよう ~/.docker/cli-plugins にリンクします。
  • 向いているユーザー:ターミナル中心で作業し、GUIを必要としない開発者。
brew install colima docker docker-compose
mkdir -p ~/.docker/cli-plugins
ln -sfn "$(brew --prefix)/opt/docker-compose/bin/docker-compose" ~/.docker/cli-plugins/docker-compose
colima start
docker run --rm hello-world
docker compose up

Colimaをcontainerdランタイムで起動した場合は、docker の代わりに colima nerdctl でコンテナを実行します。

Rancher Desktop

Rancher Desktopは、macOS(IntelおよびApple Silicon)、Windows、Linuxで動作します。エンジンとしてcontainerdまたはdockerd(moby)のいずれかを選択でき、mobyを選ぶとDocker APIが有効になるため、エイリアスなしでdocker CLIを使えます。

  • Compose:コンテナのチュートリアルでは、nerdctl compose と docker compose の両方でのCompose利用方法が解説されています。
  • 注意点:同時に有効にできるランタイムは1つだけです。一方のランタイムでpullしたイメージは、もう一方に切り替えると利用できません。同梱のKubernetesは無効にできます。
  • 向いているユーザー:GUIとDocker APIの両方を求めるクロスプラットフォームのチーム。
rdctl set --container-engine.name=moby
docker run --rm hello-world

エンジン設定のドキュメントに記載されているとおり、アプリの Preferences > Container Engine からも同じ変更を行えます。

Lima(containerdとnerdctl)

Limaは、ファイル共有とポートフォワーディングを自動で設定したLinux仮想マシンを起動するツールです。デフォルトのテンプレートではcontainerdが動作します。LimaはLinuxやNetBSDなど、macOS以外のホストにも対応しています。

  • docker CLI:使用しません。nerdctlがDockerのコマンドを模倣しており、lima nerdctl として呼び出します。
  • Compose:nerdctl compose はCompose Specificationを実装しています。ただし、nerdctlのComposeに関するドキュメントに記載されているとおり、links など一部のフィールドは未実装です。
  • 向いているユーザー:オープンソースのコンポーネントを自分で組み合わせたい開発者。Docker Engineを使いたい場合に備えて、Limaには docker テンプレートも用意されています。
brew install lima
limactl start
lima nerdctl run --rm hello-world
lima nerdctl compose up

Docker代替ツールはどう選ぶべきか

機能を比較する以前に、使用しているOSによって候補はいくつか絞られます。OrbStackはmacOS専用で、ColimaにはWindows版がありません。macOS、Windows、Linuxで共通のツールを使いたいなら、残る選択肢はPodman DesktopとRancher Desktopです。Composeファイルやスクリプトを変更せずに動かす必要があるなら、Docker Engineを実行するツール、つまりOrbStack、Colima、またはmobyモードのRancher Desktopを選びましょう。Dockerデーモンから完全に離れたいなら、Podmanが選択肢になります。

まとめ

重要なのは、そのツールがDocker Engineを維持するのか、置き換えるのかという点です。この違いひとつで、docker コマンドやComposeファイルをそのまま使い続けられるかどうかが決まります。自分のOSとライセンス状況に合ったツールを選び、前述の compose.yaml で動作を確認し、Docker Desktopを削除する前に docker context ls をチェックしておきましょう。

よくある質問

Docker DesktopのライセンスはLinux上のDocker Engineにも適用されますか?

いいえ。Docker EngineはApache License 2.0のオープンソースソフトウェアであるため、商用利用に従業員数や売上高の制限はありません。従業員数250人および売上高1,000万ドルという基準は、Docker Subscription Service Agreementに由来するもので、Docker Desktopとそれに同梱されるEngineが対象です。Linuxワークステーションでは、Docker Engineを直接インストールすれば、Desktopのライセンス問題と余分なVMレイヤーの両方を回避できます。

ツールを切り替えた場合、Docker Desktopのイメージやボリュームは引き継がれますか?

自動で移行してくれるのはOrbStackだけです。OrbStackはインストール後にDocker Desktopのコンテナ、ボリューム、イメージのコピーを提案し、このオプションはFile > Migrate Docker Dataからいつでも利用できます。コピーを作成するため、元のデータはそのまま残ります。Colima、Podman、Rancher Desktopの場合は、docker saveでイメージをエクスポートして新しいエンジンに読み込み、名前付きボリュームはtarアーカイブとしてバックアップしてください。

TestcontainersはDockerの代わりにPodmanでも動作しますか?

はい。PodmanのDocker互換APIソケットを介して動作します。DOCKER_HOSTにPodmanのソケットを設定してください。macOSではpodman machine inspectでパスを確認でき、あわせてTESTCONTAINERS_DOCKER_SOCKET_OVERRIDEに/var/run/docker.sockを設定します。Linuxでは、ソケットはXDG_RUNTIME_DIR配下のpodman/podman.sockです。rootlessモードでは、TESTCONTAINERS_RYUK_DISABLED=trueを設定してRyukのクリーンアップコンテナを無効にします。Testcontainersチームは代替ランタイムを積極的にテストしていないため、一部の機能が動作しない可能性があります。

VS CodeのDev ContainersはDockerの代わりにPodmanを使えますか?

はい。Linux、Windows、macOSのいずれでも、Dev ContainersのDocker Path設定(dev.containers.dockerPath)をpodmanに設定します。この拡張機能はコンテナのCLIコマンドを実行するだけで、デーモンと直接通信することはありません。VS Codeは、Podman 5以降はDockerのCLIとおおむね互換性があるとしていますが、Docker準拠の他のCLIを公式にはサポートしていません。また、Composeベースのdev containerでは、Composeプロバイダーの設定も必要です。

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.