Windows 10+Hyper-V+VagrantでCentOS

開発環境としてCentOS 6が必要となり、どうしようかと考えたのですが、愛機Surface Pro LTE AdvancedのWindows 10上で仮想マシンを立ち上げることにしました。最初はDockerも考えたのだけど、結構複雑な環境を作らないといけないので、自分でイメージを作るのはきついなと…。

Hyper-V環境でのVirutalBox

で、ひとまずVagrantとVirtualBox(最新は6.1ですがVagrantの都合で6.0)を入れて、CentOS 6のVagrant Boxを使えばよいだろうとやってみたのですが、VirutalBox上で仮想マシンが起動せず。理由は分かっているのです。Windows 10でDockerを使うとHyper-Vを有効にせねばならず、そうするとVirtualBoxが必要とする仮想化機能と共存できなくなる。でも、最新のVirutalBoxだとそういう環境でもOKになったという話もあり、期待をかけてやってみたのですが、やはりダメ。VirutalBoxのバージョンが6.1じゃないのが問題なのかもしれませんが、それはVagrantがVirutalBox 6.1に対応するのを待つことにして、ひとまずどうするか…。

Hyper-V環境でのVagrant

Vagrant Boxの中にはHyper-V環境に対応したものもあるということで、VirutalBoxはあきらめてHyper-V環境でのVagrantを試してみることにしました。

Hyper-V環境でのVagrantは管理者権限が必要になるので、PowerShellを管理者権限で立ち上げ、例えば、d:\dev\centos6のようなフォルダを作成して、そこで下記のコマンドを実行します。

vagrant box add centos/6
vagrant box init centos/6

これでVagrantファイルができるので、下記のように追記します。

config.vm.provider "hyperv" do |hv|
    # この間にHyper-V特有の設定が可能
end

config.vm.provider “virtualbox”という部分がコメントアウトされた状態であると思うので、その上あたりに書くと良いでしょう。この記述があると、VagrantはVirtualBoxではなく、Hyper-Vを使って仮想マシンを立ち上げようとします。

vagrant up

screenshot_050.png

Hyper-Vマネージャを立ち上げると、このようにCentOS 6の仮想マシンが立ち上がっています。

Hyper-V環境での共有フォルダ

VirtualBoxだとsharaed folderの機能を使って、ホスト(Windows)とゲスト(CentOS)の間でファイル共有ができるのですが、どうやらHyper-Vだとrsyncがかかるだけの様子。rsyncはvagrant upの時などだけしか動かないので、仮想マシンを立ち上げっぱなしにして、ソースコードを編集してすぐに試すということができません。これに気付くのに、2時間くらいかかった…。後述のとおり解決策はあるので、ひとまずVagrantファイルを編集して共有フォルダの設定を行います。

 config.vm.synced_folder ".", "/vagrant"

このように、ホストのカレントフォルダ(D:\dev\centos6)を、ゲストの/vagrantに共有します。この設定の後ろに、owner: “foo”, group: “bar”のように書くと、ゲスト側のファイルのオーナーなどを設定できます。デフォルトだと、vagrantユーザー、vagrantグループになります。

screenshot_051.png

このように最後らへんにRsyncがかかって、フォルダが共有(というか同期)されます。

フォルダの自動同期

フォルダの自動同期を行うには、上図のように仮想マシンが立ち上がった後で、下記のコマンドを実行します。

vagrant rsync-auto

これで、ホスト側でファイルの編集などが行われると、自動的にゲスト側に同期がかかります。WindowsでVisual Studio Codeなどを使ってガンガン、ソースを編集してもちゃんとそれが反映された状態で動作するわけです。

screenshot_052.png

Dockerが自動的にやっていた以外では、初めてHyper-Vをまともに使った!という感じなのですが、VirtualBoxと比べて少し工夫などが必要ながらやりたいことはできるようになりました。

この記事を書いた人

井上 研一

経済産業省推進資格ITコーディネータ/ITエンジニア。株式会社ビビンコ代表取締役。
北九州市出身、横浜市在住。AIやIoTに強いITコーディネータとして活動。北九州市主催のビジネスコンテスト「北九州でIoT」に応募したアイディアが入選し、メンバーと株式会社ビビンコを創業。著書に「初めてのWatson」、「ワトソンで体感する人工知能」など。日本全国でAI・IoTなどをテーマにしたセミナーや研修講師での登壇多数。