ラベル Vagrant の投稿を表示しています。 すべての投稿を表示
ラベル Vagrant の投稿を表示しています。 すべての投稿を表示

2014年5月12日月曜日

Vagrant1.6のDockerの機能使ってコンテナにSSH接続してWebサーバー立ててみたよ

このエントリーをはてなブックマークに追加 はてなブックマーク - Vagrant1.6のDockerの機能使ってコンテナにSSH接続してWebサーバー立ててみたよ

Vagrant1.6からDockerを利用できるという事で色々使ってみたのでそのメモ。

Feature Preview: Docker-Based Development Environments

  • Imageを指定してコンテナを起動
  • Dockerfileを利用してコンテナの起動
  • コンテナにSSH接続してみる
  • SSH接続してWebサーバー立ててみる

確認環境

  • MaxOSX 10.9.2
  • Vagrant 1.6.1

そもそもMacやWindowsだとDockerって動かないのでは?

DockerはMacWindowsのOSでは利用出来ません。 そのため、VagrantではDockerを動かす為に専用LinuxVM(boot2docker)を起動して、その上でDockerを動作させます。

コンテナを起動する

Vagrantでコンテナを起動する方法として以下の2つがあります。

  1. Imageを指定する
  2. Dockerfileを利用してコンテナを起動する

1.Imageを指定する

以下のようにVagrantfileを作成します。

VAGRANTFILE_API_VERSION = "2" 

Vagrant.configure("2") do |config|
    config.vm.provider "docker" do |d| 
        d.image = "paintedfox/postgresql"
    end 
end

上記の例では以下を設定しています。

  • 利用するProviderはdockerを指定
  • 利用するイメージはpaintedfox/postgresqlを指定

次に以下のコマンドでコンテナを起動させます。

$vagrant up --provider=docker

上記によって以下が順番に実行されます。

  1. VM(boot2docker)が起動する
  2. VM(boot2docker)で指定したイメージをpullする
  3. VM(boot2docker)上でdockerを実行し、指定したコンテナをrunする

初回実行時にはイメージのダウンロードを行うため、通信環境によっては多少時間が掛かりますが、辛抱強く待ちます。あまりにも遅いとVagrantのboot_wait時間を超えて起動に失敗してしまいますので、通信環境の良い所で実行するのをおすすめします。(一度pullが終われば、以降はダウンロードする処理は実行されません)

終わった後にVagrantの状態を1.6の新機能global-statusを利用して確認してみます。

$vagrant global-status
id       name    provider   state     directory                                      
-------------------------------------------------------------------------------------
2a00b3b  default virtualbox running   /Users/toshihirock/.vagrant.d/data/docker-host 
3b48b7b  default docker     preparing /Users/toshihirock/vagrant/docker              

providerがvirtualboxとなっているのが、コンテナを動かす為に起動されたVMで、dockerとなっているのが先ほどrunしたコンテナになります。

boot2dockerのVMにも接続する事ができるので、こちらからもコンテナの状態を確認してみます。 ログインする際にはglobal-statusで確認したidを指定します。

$vagrant ssh 2a00b3b 
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.8.0
$docker ps -a
CONTAINER ID        IMAGE                          COMMAND                CREATED             STATUS                     PORTS               NAMES
2dc46197e3be        paintedfox/postgresql:latest   /scripts/start.sh /s   7 minutes ago       Exited (1) 2 minutes ago                       docker_default_1399814767  
$exit

既に処理を実行し、終了している事が確認できました。

Vagrantで経由でDockerの操作を行った際に何か困った事があれば、上記VMにSSHログインして調査すれば問題が解決しやすいかと思います。

コンテナの削除はvagrant destoryでvagrant global-statusで確認したidを指定すればOKです。 idは全て入力する必要はなく、一意に指定できれば良いので以下のようにしても動作が可能です。

$vagrant destroy 3

2.Dockerfileを指定する

以下のようにVagrantfileを作成します。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure("2") do |config|
    v.vm.provider "docker" do |d|
        d.build_dir = "."
    end
end

上記の例では以下を設定しています。

  • 利用するProviderはdockerを指定
  • 利用するDockerifleはVagrantfileと同じディレクトリに配置

Dockerfileは先ほどと同じイメージを利用するようにしました。

FROM aintedfox/postgresql

これで先ほど同様にvagrant upすればOKです。

$vagrant up --provider=docker

1.Imageを指定するの手順を実行した後、上記を実行するとかなり早くコンテナの起動が出来るかと思います。

VM(boot2docker)の起動処理の時間とイメージをpullしてくる時間が省略された為です。

なお、VM(boot2docker)を削除すると、イメージを再度pullしてくる必要があるので必要です。

終わった後はコンテナを削除します。

$vagrant destroy 3

コンテナにSSH接続してみる

sshdのサービスを起動させるイメージを利用する事でVMと同じようにコンテナにもSSH接続が可能なようで試してみます。

以下のようなVagrantfileを用意します。

VAGRANTFILE_API_VERSION = "2" 

Vagrant.configure("2") do |config|
    config.vm.define "phusion" do |v| 
        v.vm.provider "docker" do |d| 
            d.cmd = ["/sbin/my_init", "--enable-insecure-key"]
            d.image = "phusion/baseimage:latest"
            d.has_ssh = true
        end 
        v.ssh.username = "root"
        v.ssh.private_key_path= "insecure_key"
        v.vm.provision "shell", inline: "echo hello"
    end 
end

上記の例では以下を設定しています。

  • 利用するProviderはdockerを指定
  • 利用するイメージはphusion/baseimageの最新(latest)
  • /sbin/my_initというコマンドを引数–enable-insecure-keyを指定して実行。
  • VagrantでSSHを利用する事を指定
  • SSHでログインするユーザーはroot
  • SSHでログインする際に利用する鍵はinsecure_key(詳細は後述)
  • コンテナの処理が完了したらhelloと出力する。

詳細は公式ドキュメントをご確認頂きたいのですが、本例では指定してるイメージがphusion/baseimageである事が大切です。

このイメージのドキュメントに詳細が書いてありますが、恐らく初期化処理の中でssdhのサービスを起動させる処理があり、これによってコンテナにも関わらず、SSH接続を可能にしているようです。

つまり全てのイメージでSSH接続が出来るという訳ではないのです

また、上記コンテナへのSSH接続は必ず指定された鍵を利用して認証を行う必要があります。そのため、以下のコマンドでVagrantfileと同じディレクトリに予めSSHで利用する鍵を配置しておく必要があります。

$curl -o insecure_key -fSL https://github.com/phusion/baseimage-docker/raw/master/image/insecure_key
$chmod 600 insecure_key

上記準備ができたら今まで同様に起動させます。

$vagrant up --provider=docker
・・・・
==> phusion: hello

正しく処理が完了した場合には、helloという出力がされる事も確認出来るかと思います。 ではコンテナにSSH接続してみます。

$vagrant ssh
==> phusion: SSH will be proxied through the Docker virtual machine since we're
==> phusion: not running Docker natively. This is just a notice, and not an error.
Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.8.0-35-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
 root@cb4eb5281f86:~#

イメージのベースはUbuntu12.04であり、そのコンテナにVagrantを利用して簡単にSSH接続する事が出来ました!

確認後、コンテナは削除します。

$vagrant destroy 3

SSH接続してWebサーバー立ててみる

単純にSSH接続出来ただけだと意味が無いので、実際にローカルマシン(vagrantを動かしているマシン)からアクセス出来るようにしてみます。

上記については既にブログに記載している方がいらっしゃり、とても分かりやすく説明されています。

Vagrant1.6のDocker Provider

が、一応こちらでも記載します。(上記ブログの方の方が分かりやすいです!)

ローカルマシンからのアクセスを実現する為には、ローカルマシン→VM(boot2docker)→コンテナと接続しなければいけません。 つまり、ポートフォワードを2カ所(ローカルマシン→VM。VM→コンテナ。) で設定する必要があります。

VM→コンテナについては今まで編集してきたVagrantfileにポートフォワードの設定を記載すればOKです。

ローカルマシン→VM間のポートフォワードを指定する場合には、新しくVagrantfileを作成する必要があります。VM→コンテナ間のVagrantfileに以下のように追記を行います。

d.vagrant_vagrantfile = "host-vm/Vagrantfile"

指定した場所にVagrantfileを配置する必要があるのですが、デフォルトでVM(boot2docker)に適用されるVagrantfileがあるのでそれに追記を行います。

$mkdir host-vm && cd host-vm
$wget https://raw.githubusercontent.com/mitchellh/vagrant/master/plugins/providers/docker/hostmachine/Vagrantfile

配置したファイルにポートフォワードに関する追記を行うと以下のようになります。

Vagrant.configure("2") do |config|
  config.vm.box = "mitchellh/boot2docker"

  config.vm.provider "virtualbox" do |v|
    # On VirtualBox, we don't have guest additions or a functional vboxsf
    # in TinyCore Linux, so tell Vagrant that so it can be smarter.
    v.check_guest_additions = false
    v.functional_vboxsf     = false
  end

  ["vmware_fusion", "vmware_workstation"].each do |vmware|
    config.vm.provider vmware do |v|
      if v.respond_to?(:functional_hgfs=)
        v.functional_hgfs = false
      end
    end
  end

  # b2d doesn't support NFS
  config.nfs.functional = false
  config.vm.network :forwarded_port, guest: 8080, host: 8080
end

同じようにVM→コンテナ間のVagrantfileにもポートフォワードに関する追記を行います。最終的には以下のようになります。

VAGRANTFILE_API_VERSION = "2" 

Vagrant.configure("2") do |config|
    config.vm.define "phusion" do |v| 
        v.vm.provider "docker" do |d| 
           d.vagrant_vagrantfile = "host-vm/Vagrantfile"
                d.cmd = ["/sbin/my_init", "--enable-insecure-key"]
                d.image = "phusion/baseimage:latest"
                d.has_ssh = true
        end 
        v.ssh.username = "root"
        v.ssh.private_key_path= "insecure_key"
        v.vm.provision "shell", inline: "echo hello"
        v.vm.network :forwarded_port, guest: 80, host: 8080
    end 
end

準備ができたので、順番に操作をしていきます。

まず、VM(boot2docker)を一度停止します。 Vagrantfileを明示的に指定すると別のVM(boot2docker)が起動するのですが、その際に既に起動しているものとポートがバッティングしてエラーとなる為です。恐らく回避方法もありそうな気がしますが。。。

$vagrant halt {vm_id}

次にVM(boot2docker)とコンテナを起動します。

$vagrant up --provider=docker

次にコンテナにSSH接続してnginxをインストールし、サービスを起動します。

$vagrant ssh
$apt-get update
$apt-get install -y nginx
$service nginx start
$exit

これで準備完了です。

ローカルマシンからブラウザでhttp://localhost:8080/にアクセスしてみます。

コンテナのnginxのWebページを表示する事が出来ました。

最後に

実際に動いているのはコンテナでもVagrantを利用する事でさもVMを利用しているかのように操作を出来るこの機能はとても素晴らしいと思います。

Dockerにも任意のprovisonが適応できるようなので、Chefとか流したりもきっと出来そうな。今度時間があればやってみたい。。。

2014年5月10日土曜日

Vagrant1.6のGlobalStatus and Controlが地味に便利だった話

このエントリーをはてなブックマークに追加 はてなブックマーク - Vagrant1.6のGlobalStatus and Controlが地味に便利だった話

Vagrant1.6の大きな変更の一つ、GlobalStaus and Controlが地味に便利だったのでメモ。

この機能を使うと

  • Vagnratで管理しているVMの一覧とその状態などが確認出来る
  • いちいちVagrantfileのあるディレクトリに移動しなくてもVMの操作が可能。(起動、中断、SSH接続など)

という事が出来ます。

なお、公式のドキュメントは こちら参照のこと。

準備

Vagrant1.6をまだインストールしていない人はインストール(アップグレード)しましょう。

$vagrant -v
Vagrant 1.6.1

なお、アップグレードの場合のみだと思われますが、私の環境ではvagrant global-statusコマンドを初回実行時に以下のような事を言われました。

Vagrant is upgrading some internal state for the latest version. Please do not quit Vagrant at this time. While upgrading, Vagrant will need to copy all your boxes, so it will use a considerable amount of disk space. After it is done upgrading, the temporary disk space will be freed.

Press ctrl-c now to exit if you want to remove some boxes or free up some disk space.

Press any other key to continue.

vagrantのアップグレードで一時的にBoxのコピーが必要だからその間Vagrantを止めないでね、もし、ディスクスペースが少ない場合にはctrl-cで中断してBox削除してね、問題なければそれ以外のコマンド押してね、という感じっぽいです。(適当)

よっぽどディスクが逼迫していなければEnterキー押してしまって良い思います。

コマンド実行してみる

早速使ってみます。最初に書いたように実行はどこのディレクトリでもOKです。

$vagrant globa-status
id       name    provider   state    directory                              
----------------------------------------------------------------------------
4d3ea23  default virtualbox poweroff /Users/toshihirock/vagrant/ubuntu12_32 
96c9db6  default virtualbox running  /Users/toshihirock/vagrant/ubuntu14_64 

The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date. To interact with any of the machines, you can go to
that directory and run Vagrant, or you can use the ID directly
with Vagrant commands from any directory. For example:
"vagrant destroy 1a2b3c4d"

上記のようにVagrantで管理しているVMの一覧とその状態及びVagrantfileの位置などが分かります。

個人的にあれVagrantfileどこだっけ??という事がたまにあるのでVagrantfileの配置されたディレクトリが分かるのが嬉しいです。

今まで無かった情報としてVMごとに一意に決められたIDについても表示がされています。 これを使う事でVagrantfileのある場所に移動しなくても指定VMへの操作が出来ます。

例えばIDが96c9db6となっているVMにSSH接続したい場合には以下のようにします。

$vagrant ssh 96c9db6

公式ドキュメントを見る限り、SSHは勿論、updestorysuspendなど基本的な操作も可能なようです。

また、こちらは公式には書いてませんでしたが、全てのIDを入力しなくても一意にIDできるまでの入力のみでもコマンド実行が可能なようです。

$vagrant ssh 9

これも覚えておくと地味に便利ですね。

2014年5月1日木曜日

Chefのレシピ管理ツールBerkshelfのversion3のドキュメントを和訳してみた

このエントリーをはてなブックマークに追加 はてなブックマーク - Chefのレシピ管理ツールBerkshelfのversion3のドキュメントを和訳してみた

Chefの管理ツールであるBerkshlefのversion3がやっとでリリースされ、しかもChef-DK(Chef Deploymant Kit)とかいうのSDKにも内包されるようになったようで、せっかくなのでversion3のドキュメントを非公式に和訳してみました。

今回、GithubのREADME.mdに書いてみました。

Github-TranslateBerkshelf

色々良い訳。

  • 本ページはBerkshelf version3のドキュメント非公式に和訳したものです。
  • 2014年5月1日時点のものを参照したため、今後変更となる箇所がある可能性もあります。
  • 意訳した箇所もあります。
  • 動作確認を行えなかった箇所も多い為、その点はご了承ください。
  • 英語が得意!という訳でもないので、すいません、その点もご了承ください。
  • 記述誤りなどは @toshihirockまでご連絡頂くか、pull requestして頂くなどして頂ければ幸いです。

なお、vagrant berkshelfプラグインですが、私の環境では正しく動きませんでした。。。

vagrant-berkshelfは非推奨になるとのこと

上記記事からも非推奨となるようで、Vagrantと組み合わせて使う場合でも 以前ブログに書いたように使った方が良さそうな気がしました。

2014年4月12日土曜日

VagrantでVirtualBoxを利用する場合にVMの設定をVagrantfileで色々変えてみた

このエントリーをはてなブックマークに追加 はてなブックマーク - VagrantでVirtualBoxを利用する場合にVMの設定をVagrantfileで色々変えてみた

VagrantでVirtualBoxを利用する場合にVMの設定をVagrantfileを利用して変更する場合のメモを記載 。

やってみたこと。

  • GUIモードの起動
  • VM名称変更
  • メモリ変更
  • CPU数
  • ホストOSに対してのCPU利用制限率
  • HDDの追加

なお、基本的な記述は公式のこちら を参照の事。

GUIモードにする

Vagrantfileに以下の記述を追記すればGUI用のウィンドウが利用出来る。

config.vm.provider "virtualbox" do |vb|
  vb.gui = true
end

ただし、BOXにGUI用のソフトがインストールされていない場合には別途インストールが必要。

Ubuntuの場合、VagrantをGUIで立ち上げる(Ubuntu)を参考にして実施出来る事を確認。

VMの名称を設定する

デフォルトだとVMの名称はVagrantfileのあるフォルダ名称とタイムスタンプを利用したものになるので、以下で任意に設定可能

config.vm.provider "virtualbox" do |vb|
  vb.name = "my_vm"
end

ちなみに後述するvb.customizeを利用した以下でも設定可能。

config.vm.provider "virtualbox" do |vb|
  vb.customize ["modifyvm", :id, "--name", "my_vm"]
end

その他色々もっと変更したい

上記以外でも色々設定したい場合、Virtualboxの操作をCUIで行えるVBoxManageコマンドをvb.customizeをというような記述で記載する。

VBoxMangeに関する詳細は公式のこちら を参照の事。

例えばVBoxManage modifyvmというコマンドを利用して名称変更する場合には、以下のような記述となる。

config.vm.provider "virtualbox" do |vb|
  vb.customize ["modifyvm", :id,
                "--name", "my_vm"]
end

上記はコマンドラインで

$VBoxManage modifyvm ubuntu64_default_1397309544936_13521 --name my_vm

というのを実行した場合と同義となる。

なお、ubuntu64_default_1397309544936_13521というようなどのVMに対して処理を実行するかをコマンドからは指定する必要があるが、Vagrantfileに記述する場合には:idと記載すればVM名称となるようにしてくれる。

デフォルトで既に記述があるが、メモリを変えたい場合には以下のようにする。

config.vm.provider "virtualbox" do |vb|
  vb.customize ["modifyvm", :id,
                "--memory", "1024"]
end

CPUの数を変えたい場合はこんな感じ。

config.vm.provider "virtualbox" do |vb|
  vb.customize ["modifyvm", :id,
                "--cpus", "2"]
end

ホストマシンのCPUをどれぐらいの利用制限率とするかも以下で変更出来る。

config.vm.provider "virtualbox" do |v|
  vb.customize ["modifyvm", :id,
                "--cpuexecutioncap", "50"]
end

また、こちらを参考に、以下のようにするとHDDの追加も可能だった。

config.vm.provider :virtualbox do |vb|
      file_to_disk = "./tmp/disk.vdi"
      if not File.exist?(file_to_disk) then
        vb.customize ["createhd",
                      "--filename", file_to_disk,
                      "--size", 100 * 1024]
      end
      vb.customize ['storageattach', :id,
                    '--storagectl', 'SATAController',
                    '--port', 1,
                    '--device', 0,
                    '--type', 'hdd',
                    '--medium', file_to_disk]
end

なお、上記のSATACOntrollerという箇所はSATA Controllerとなっている場合もあり、その場合には対応する記述にしないとエラーとなるので注意。

2014年4月2日水曜日

Vagrantを利用して作成したVMからVMへ.ssh/configを設定して簡単にログインする

このエントリーをはてなブックマークに追加 はてなブックマーク - Vagrantを利用して作成したVMからVMへ.ssh/configを設定して簡単にログインする

.ssh/configを利用して

$ssh hoge

みたいなやり方でログイン出来るようにする。

構成

  • Ubuntu12.04 32bit
  • ログインする方(192.168.33.20)、ログインされる方(192.168.33.21)
  • Vagrantにて上記VMを作成し、起動(vagrant up)済み
  • ホスト名はsound
  • ログインするアカウントはvagrantアカウント

ログインする方(vagrantユーザーでログイン)

# 秘密鍵、公開鍵を作成
$ssh-keygen -t rsa
$cd ~/.ssh

# 公開鍵を表示して何かにコピペ
$cat id_rsa.pub

# sshログインの情報設定
$vi config

Host sound
HostName 192.168.33.21
User vagrant
IdentityFile ~/.ssh/id_rsa

ログインされる方(vagrantユーザーでログイン)

# authorized_keysの末尾にid_rsa.pubの内容を追加
$vi ~/.ssh/authorized_keys

この状態でログインする方のVMで

$ssh sound

とするとパスワードなしでログインが可能となる。

参考

.ssh/configで設定すると接続が楽になる方法

2014年1月27日月曜日

VagrantのProvisioning機能を利用してVM起動時にGitリポジトリ作るようにしてみた

このエントリーをはてなブックマークに追加 はてなブックマーク - VagrantのProvisioning機能を利用してVM起動時にGitリポジトリ作るようにしてみた

Gitのリモートリポジトリを作る必要がありそうな感じだったので、試しにVagrantのProvisioning機能を利用してVM起動時にGitのリモートリポジトリを作るshellを作って試してみたのでその時のメモ。

前提条件

  • ホストマシーンはMacOSX10.9.1で、Gitはインストール済み
  • 仮想環境はCentOS6.4を利用
  • 仮想環境にGitのリモートリポジトリを作成し、ホストマシーンでcloneしたり出来るまでを実施

目次

  1. Vagrantのインストール
  2. Vagrantを利用したCentOS仮想環境の構築
  3. 仮想環境のCentOSの作成、起動
  4. 仮想環境にプライベートIPアドレスを設定する
  5. 仮想環境にGitのリモートリポジトリ作成
  6. まとめ
  7. 参考サイト

1.Vagrantのインストール

Vagrantを利用する際にはVirtualBoxが必要なので予めインストールしておきます。

Vagrantの公式サイトのDownloadからOSにあったVagrantをダウンロードしてインストールします。(たしかOK連打でOKだったはず)

2014年1月26日現在以下のOSのものが配布されているようです。

  • MacOSX(32bit or 64bit)
  • Windows(32bit or 64bit)
  • Debian/Ubuntu(32bit or 64bit)
  • CentOS/Fedora/Redhat(32bit or 64bit)

インストールが完了するとTerminalでvagrantコマンドが使えるようになっているはずです。

$vagrant --version
Vagrant 1.4.3

2. Vagrantを利用したCentOS仮想環境の構築

注意:Boxの取得は大きなファイルのダウンロードとなる為、通信速度が早い所で実施するのがおすすめです

Vagrantで任意のOSの環境を構築する際に対応するOSのBoxというものが必要となります。

入手可能なBoxの一覧はこちらから確認できます。

取得したいBoxのURLが分かったらvagrant box addコマンドを利用してBoxを取得します。ざっくりの書式は以下の通りです。

vagrant box add {title} {url}

詳細を知りたいときはvagrant box add -hで調べて下さい。

titleにはvagrantで保存するBoxの名称を記載します。例えばcentos6_4という名称でBoxを保存したい場合は以下のようなコマンドを実行します。

$vagrant box add centos6_4 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box

ダウンロード完了後、vagrant box listコマンドを使ってBoxの取得が出来ているか確認します。

$vagrant box list
centos6_4 (virtualbox)

上記のようになっていればダウンロードが完了しております。なお、Boxファイルの実態は~.vagrant.d/boxesにあります。

3. 仮想環境のCentOSの作成、起動

準備が出来たのでいよいよCentOSの仮想マシンを作成します。

適当な場所にVagrant用のフォルダを作成し、移動します。

$mkdir -p ~/vagrant/centos64/
$cd ~/vagrant/centos64/

上記の場所でvagrant initコマンドを実行し、仮想環境で利用するBoxを指定します。 先ほどダウンロードしたcentos6.4という名称のBoxを利用する場合には以下のコマンドとなります。

$vagrant init centos6_4

上記を実行するとカレントディレクトリにVagrantfileというものが作成されます。

中身を見ると分かりますが、このファイルの中で利用するBoxを何にするか記載してあります。

config.vm.box = "centos6_4"

また、その他仮想環境に関する設定情報などが本ファイルに記載してあります。

ちょっと話が逸れましたが、次にVMを起動します。 カレントディレクトリにVagrantfileがある場所で以下のコマンドを実施します。

$vagrant up

少し時間が経つとVMが起動したことが分かります。

起動後、以下のコマンドでSSHログインが可能です。

$vagrant ssh

上記でvagrantユーザーでログインができます。簡単ですねー。

その他VMを操作するコマンドとしてはよく利用するのは、シャットダウンさせるvagrant halt、中断させるvagrant suspend、また再会のvagrant resume、環境を破棄するvagrant destory、Vagrantfileの変更を再読みするvagrant reloadあたりでしょうか。詳細やその他コマンドは公式ドキュメントVagrant Documentを見て下さい。

4. 仮想環境にプライベートIPアドレスを設定する

GitリポジトリをVagrant上に作成してアクセスしたいのでVagrant環境に任意のプライベートIPアドレスを指定したいです。

上記の方法は簡単でVagrantfileを編集すればOKです。

#config.vm.network :private_network, ip: "192.168.33.10"

という記述が27行目当たりにあるのでコメントアウトを外します。

config.vm.network :private_network, ip: "192.168.33.10"

上記実施後、Vagrantfileを再読みさせたいのでvagrant reloadコマンドを利用します。

$vagrant reload

とするとVagrantfileが再読み込みされ、VMが再起動します。

vagrant sshしてifconfigコマンドなどを利用するとIPアドレスが設定されているか確認できるかと思います。

上記を利用して例えばvagrant上にapacheを立てて、ホストからhttp://192.168.33.10などでアクセスも可能です。(iptablesを設定している時は解除が必要な場合があります)

なお、Vagrantfileが存在するディレクトリとVMの/vagrant/配下は共有フォルダになっているのでファイルの受け渡しはこちらを利用すると便利です。

5. 仮想環境にGitのリモートリポジトリ作成

基本的な設定は終わったのでVagrantのCentOS6.4にGitのリモートリポジトリの環境を作ります。

と言っても普通に作ってはVagrantでも意味ないよね、という事でVagrantの起動時に自動的にソフトウェアなどをインストールするProvisioing機能を使ってGitリモート環境を作ってみます。(ChefやPuppetとも連携できるみたいですが使った事ないので残念ながら今回はシェルで。。。)

という事でやりかたですが、起動時にシェルを実行する場合にはVagrantfileに以下のような記述を追記します。

config.vm.provision "shell", path: "provision.sh"

上記のような記述をするとカレントディレクトリに存在するprovision.shをvagrant upした時に実行してくれます。

という事で起動と同時にリポジトリを作るシェルを作成してみました。

# install git
sudo yum -y install git

# create git group
sudo groupadd git

# add git group
sudo usermod -a -G git vagrant

# create git repository
sudo mkdir -p /var/public_git/.test.git
sudo git init --bare --shared /var/public_git/test.git
sudo chown -R root:git /var/public_git

少し、説明を記載します。

  • 2行目でGitをインストール
  • 5行目でGit用のgitグループを作成
  • 8行目でvagrantユーザー(sshでログインするユーザー)にgitグループを追加
  • 11行目でGit用のフォルダの/var/public_git/test.gitを作成
  • 12行目で作成したフォルダに共有リポジトリを作成
  • 13行目で作成したフォルダのグループをgitグループに変更

上記によってgitグループのユーザーはcloneが出来るようになります。

試しにホストのMacからgitグループとなっているvagrantユーザーでcloneしてみます。

下記コマンドを実行するとvagrantユーザーのパスワードが聞かれるのでパスワードのvagrantと入力するとcloneが成功する事が確認できます。

$git clone ssh://vagrant@192.168.33.10/var/public_git/test.git
Cloning into 'test'...
vagrant@192.168.33.10's password: 
warning: You appear to have cloned an empty repository.
Checking connectivity... done

また、試しにpushもしてみます。

$cd test
$touch abc.txt
$git add abc.txt
$git commit -m "First Commit"
$git push origin master

ついでにgit用のユーザーを追加して確認してみます。

$vagrant ssh
# 以降仮想環境での操作
$sudo useradd git_user -g git
$sudo passwd git_user
$exit

では追加したユーザー(git_user)で適当なディレクトリに移動し、cloneしてみます。

$git clone ssh://git_user@192.168.33.10/var/public_git/test.git

先ほどpushしたabc.txtも確認できます。

まとめ

上記のように一度シェルを作ってしまえば、例えば設定を誤ってしまった時も

$vagrant destroy
$vagrant up

とすればまた同じ環境が手に入るので便利です。複製も何個でも出来ますし、便利。

Vagrantは単語は知っていたのですが、そんなに学習コスト高くない割に恩恵が大きい気がします。 今後時間あるときはChefも勉強してみてもっと俺俺レシピを作りたいです!

参考サイト