Skip to content
Latchkey

Vagrant vs Docker: 環境のための VM vs コンテナ

Vagrant は再現可能な仮想マシンを管理します。Docker は軽量なコンテナを動かします - 完全な OS レベルの分離 vs カーネルを共有する高速なプロセス分離です。

Vagrant は、再現可能な開発環境のために Vagrantfile から完全な仮想マシンをプロビジョニングし管理します。Docker は host のカーネルを共有するコンテナを動かし、小さなフットプリントで数秒で起動します。Vagrant はより強力な OS レベルの分離を提供し、Docker は速度と密度を提供します。両者は異なるニーズに適します。

VagrantDocker
分離完全な VMコンテナ(カーネル共有)
起動より遅い(VM の boot)高速
フットプリント重い軽い
OS 忠実度完全な OSアプリ中心
最適な用途完全な OS の再現性高速でポータブルなアプリ環境

CI で

Docker は CI のデフォルトです - コンテナは高速でポータブル、job ごとに立ち上げるのが安価です。Vagrant は、コンテナでは提供できない特定の OS、カーネル、仮想化機能を持つ完全な VM が真に必要な場合に適します。ほとんどの pipeline とアプリのワークロードでは Docker の方が高速で軽量です。Vagrant は完全な OS の再現ニーズのために取っておきましょう。

高速化する

実行間で Docker のレイヤーを cache(または Vagrant の box を再利用)します。どちらも CI runner 上で動作します。より高速な managed runner はイメージの pull と VM の boot を短縮します。

結論

高速、軽量、ポータブルなアプリ環境が欲しい場合: Docker。特定の OS/カーネル忠実度を持つ完全な VM が必要な場合: Vagrant。一般的な CI では Docker が勝ります。Vagrant は真に完全な OS が要件の場合向けです。

関連ガイド