仮想マシン
 Computer >> コンピューター >  >> ソフトウェア >> 仮想マシン

Vagrant入門ガイド ― Windowsで始める仮想化環境構築の基礎

「日々の作業に物足りなさを感じている」「遊んで試せる仮想化ソフトウェアがまだ足りない」という方にとって、今日の記事はきっと満足できる内容になるはずです。今回は、仮想化環境のデプロイとテストをラップするツール「Vagrant」に完全に焦点を当てた特集です。

その仕組みはこうです。細かいコマンド群を隠蔽して統一されたインターフェースを提示し、そこに「クラウド」などのバズワードを絡めれば、誰もが話題にするホットな新技術になります。OpenStack、OpenShift、OpenCloudといったおしゃれな名前の技術と似たようなものです。さらにPostgreSQLやJenkins、Node.jsなどの名前を並べられれば、「モダンでイケてる」ポイントも加算されるでしょう。ただ、皮肉はさておき、このツールが実際に何をしてくれるのか、使う価値があるのか、そして楽しいのかを見ていきましょう。

Vagrantとは何か

まず簡単な背景説明から。Vagrantは元々、混在したスピード重視の環境において、ソフトウェアのテスト・開発・仮想化リソースの管理を簡素化するために設計されました。当初はVirtualBoxでしか動作しませんでした。業界で最も選ばれているハイパーバイザーというわけではありませんが、最近ではVMwareやKVMなど他の技術にも対応しており、便利な統合機能も備えています。

要するに、Vagrantの動作原理は「ネイティブのコマンドではなくvagrantコマンドを使う」というものです。複数のハイパーバイザーを併用する場合、それぞれ構文が異なり、それ自体がオーバーヘッドになりがちです。だからこそVagrantを使い、煩雑な部分を柔軟な抽象化レイヤーの背後に隠すのです。理屈はこのくらいにして、実際に手を動かしながら学んでいきましょう。

セットアップ

少し趣向を凝らして、今回はLinuxではなくWindowsでデモを行います。続編記事(今後たくさん執筆予定です)ではLinuxに戻りますが、ここでは概念的に大きな違いはないことをお見せしたいと思います。

準備が整ったら、PowerShellウィンドウを開いてコマンドを打ち込み始めましょう。例えばVagrantを起動するには、次のように実行します。

vagrant up

しかし、作業環境を準備・初期化していないと、かなり無愛想なエラーが表示されます。

PS C:\HashiCorp\Vagrant\bin> .\vagrant.exe up
A Vagrant environment or target machine is required to run this
command. Run `vagrant init` to create a new Vagrant environment. Or, get an ID of a target machine from `vagrant global-status` to run this command on. A final option is to change to a directory with a Vagrantfile and to try again.

環境を初期化すれば、本格的な作業を始められます。

ところがまたしても、厄介なエラーに直面します。

PS C:\HashiCorp\Vagrant\bin> .\vagrant.exe up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'base' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Adding box 'base' (v0) for provider: virtualbox
    default: Downloading: base
    default:
An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try again.

Couldn't open file /HashiCorp/Vagrant/bin/base
PS C:\HashiCorp\Vagrant\bin>

デフォルトでは、Windows版Vagrantはベースイメージから仮想マシンを起動しようとします。しかしそのイメージは存在しないため、事前準備なしにupコマンドを実行すると失敗します。

そこで最初に行うべきは、イメージの取得です。Dockerと同じように、Vagrantにもベーステンプレートが保存された独自のオンラインリポジトリがあります。OSを手動でダウンロードしてインストールすることもできますが、それでは前述の抽象化の意味がありません。例えば次のようにイメージを取得してみましょう。

vagrant box add hashicorp/base

存在しないイメージを指定すると、またエラーが出ます。

PS C:\HashiCorp\Vagrant\bin> .\vagrant.exe box add hashicorp/base
The box 'hashicorp/base' could not be found or could not be accessed in the remote catalog. If this is a private box on HashiCorp's Atlas, please verify you're logged in via `vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://atlas.hashicorp.com/hashicorp/base"]
Error: The requested URL returned error: 404 Not Found

しかしbaseイメージは存在するはずです。オンライン上にはこの問題に関する様々な言及があり、原因は設定ファイル内のデフォルト宣言にあります。利用可能なイメージの一つに変更してダウンロードすれば、問題は解決します。具体的には、Vagrantfile内のdefaultエントリを編集します。「base」という文字列を、Vagrant起動時にデフォルトとして使いたいイメージ名に置き換えてください。UbuntuでもFedoraでもCoreOSでも構いません。

# Every Vagrant development environment requires a box. You can search for boxes at https://atlas.hashicorp.com/search.
config.vm.box = "base"

今回の演習では(これには後々重要な理由があるのですが)、やや意外な選択であるCoreOSイメージ(yungsang/coreos)を試します。まずイメージを取得しましょう。

カタログに正しく追加されたか確認します。

PS C:\HashiCorp\Vagrant\bin> .\vagrant.exe box list
ubuntu/trusty64 (virtualbox, 20150506.0.0)
yungsang/coreos (virtualbox, 1.3.8)

その後、再度Vagrantを実行します。CoreOSが起動し、ユーザーやネットワークのセットアップなど各種処理が自動的に行われます。しばらくするとシステムが稼働状態になります。SSHでホストに接続を試みることができます。デフォルトでは、起動中の各インスタンスにはlocalhost上のポートが割り当てられます。今回の場合、ボックスのSSHサービスは127.0.0.1のポート2222で動作しています。これはDockerで見た挙動と非常によく似ています。リポジトリの概念もネットワーキングもほぼ同一です。ヒント: これには理由があります。

PS C:\HashiCorp\Vagrant\bin> .\vagrant.exe up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'yungsang/coreos'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'yungsang/coreos' is up to date...
==> default: Setting the name of the VM: bin_default_1431611566870_38538
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: core
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!

仮想マシンへの接続

仮想マシンが稼働しました。vagrant statusコマンドで状態を確認できます。

vagrant sshまたはvagrant rdpというラッパーコマンドを使えば、稼働中の仮想マシンに入ることができます。より高度な接続方法もありますが、それはネットワーキングとクラスタに焦点を当てた続編チュートリアルで扱います。

Windowsクライアントの場合、RDPが使えますが、今回のケースでは機能しません。RDPはCoreOS内部では利用できないからです。VNCが選択肢になるかどうかは現時点では不明で、今後検証が必要です。同様にSSHも問題になります。WindowsにはデフォルトのSSHクライアントが同梱されておらず、PuTTYがインストールされていてもパスが通っていない可能性があるためです。

PS C:\HashiCorp\Vagrant\bin> .\vagrant.exe rdp default
==> default: Detecting RDP info...
RDP connection information for this machine could not be
detected. This is typically caused when we can't find the IP
or port to connect to for RDP. Please verify you're forwarding
an RDP port and that your machine is accessible.

PS C:\HashiCorp\Vagrant\bin> .\vagrant.exe ssh default -- -A
`ssh` executable not found in any directories in the %PATH% variable. Is an SSH client installed? Try installing Cygwin, MinGW or Git, all of which contain an SSH client. Or use your favorite SSH client with the following authentication information shown below:

Host: 127.0.0.1
Port: 2222
Username: core
Private key: C:/Users/<user>/.vagrant.d/insecure_private_key

さらに、Windowsで作業している場合は、OpenSSH形式の秘密鍵をPuTTY形式などに変換する必要もあります。多くの人がVagrant活用の中で出会う場面ではないかもしれませんが、同じ問題が様々な方法で解決されるのを目にするのは有益な経験です。

ここまでで、VirtualBoxをプロバイダーとして最初のVagrant VMインスタンスを正常に起動できました。注目すべきは、テスト中に明示的なVirtualBoxコマンドを一切使っておらず、XMLファイルなどを気にする必要もなかったという点です。これはあくまで始まりに過ぎませんが、今日のチュートリアルはここまでとします。良い流れで締めくくりましょう。

さらなる読み物

もう少し読み進めたい方におすすめの資料:

  • Linux Journalの記事「Introducing Vagrant」
  • Vagrantクラッシュコース
  • Dockerネットワーキングの解説記事

まとめ

Vagrantは興味深いコンセプトですが、あなたの環境の課題を解決する最良の手段とは限りません。仮想化を真にマスターしたいなら、セットアップのあらゆる側面を制御できるようになる必要があり、そのためには基礎からすべてを学ぶ時間と労力と忍耐を投資しなければなりません。さもなければ、問題が発生したとき(必ず発生します)に対処できず、技術そのものを理解することもできないでしょう。

とはいえ、ユニークなアプローチであり、この仮想化の旅でVagrantをどこまで極められるかはまだまだ見ものです。少なくとも今回は、セットアップ時の問題と初期設定を乗り越え、イメージの取得と起動方法を習得し、基本的な状態確認を行い、ネットワーク接続の課題への対処法も学びました。十分に実用的な内容だったと思います。今後は、VMware、LXC、libvirt向けの接続性を拡張する重要なプラグインフレームワークや、高度なネットワーキング、クラスタ構成なども取り上げていく予定です。ぜひご期待ください。

それでは、また次回。

  1. VirtualBox 4レビュー:新機能と変更点を徹底解説

    先日、Oracle(旧Sun、さらにその前はinnotek)が、同社の仮想化ソフトウェアの看板製品であるVirtualBoxの新バージョンをリリースしました。この洗練されていて多用途な製品は私のお気に入りの一つなので、早速試してみることにしました。ただし、懸念がないわけではありません。OpenSolarisやOpenOfficeなど、他の製品の扱いを見る限り、Oracleは必ずしもオープンソースに優しいとは言えないからです。ブランド名に「open」という言葉を使わないことが、生き残りの鍵なのかもしれませんね。 さておき、VirtualBoxは無料で使える優れたデスクトップ向け仮想化ソフトウェア

  2. MojoPac徹底解説|USBメモリで使えるデスクトップ仮想化ソフトウェア

    大容量ポータブルUSBデバイスが手頃な価格で容易に入手できるようになった今、ポケットに収まる小さなドライブに大量のデータやアプリケーションまで持ち運べるというアイデアは、非常に魅力的に響きます。この用途向けに特化した人気ソフトウェアとしては、Portable AppsやPendrive Linuxが挙げられますが、それぞれにいくつかの弱点があります。 Portable AppsとPendrive Linuxの課題 Portable AppsはWindowsコンピュータ専用です。Firefox、GIMP、OpenOfficeなど数多くの便利なアプリケーションを持ち運べる一方で、USBドライブ上の