かばちんのエンジニアブログ

日々の経験の中で培った内容を備忘録も兼ねて記録していくブログです。少しでも誰かの役に立つために頑張って続けていけたらなと思います。

Vagrant を使ったVM環境構築

f:id:kabatin:20160224152319p:plain

前回 VirtualBox を利用して、Ubuntu に Docker と SSH を入れるということをしました。
どうやら Vagrant を使うともっともっと簡単に環境構築が行えるようなので実際に試してみました。
MacOSXで行っております。

Vagrantってなに?

VirtualBox のようなVM環境をとにかく簡単に一元的に扱いやすくしてくれるツールです。
具体的になにをしてくれるのか例を挙げるとこんな感じ。


SSH接続設定が初めから済みの状態でVM環境が作られる
・面倒な設定なくコマンド1つでVM環境が作成できる
(ざ〜〜〜っくりですが2つあげました)


とにかくすぐに作業に取りかかれると言う点ではものすごい良いツールだと思います。
ただ、個人的には一度は Vagrant を使わず構築してみるといいと思います。
その方が便利になった点がよりよくわかります。


Vagrant のインストール

まず Vagrantインストーラを公式サイトで手に入れましょう。
www.vagrantup.com

ダウンロードしたら早速実行してインストールします。
f:id:kabatin:20160224152844p:plain


Vagrant の初期設定

パッケージのインストールが完了したら、MacOS のターミナルを起動して以下のコマンドを叩くだけでインストールできます。

$ mkdir Vagrant
$ cd Vagrant
$ vagrant init --minimal ubuntu/trusty64

まず適当にフォルダを作成して、その中で「vagrant init」コマンドを実行します。
minimal オプションは必要最小限の Vagrantfile を作成しますという指示です。
あってもなくても大丈夫ですが、今回は特に気にせず最小構成で作成します。

コマンドが正常に終了すれば Vagrantfile と言うものが作成されていると思います。
VagrantVM を作成するときに使う設定ファイルですが、中身はこんな感じになっています。

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
end

VagrantVM 作成

さて、実はもうすでに Vagrant を使う準備がすべて整いました!
以下のコマンドを叩いて実際に VM を起動してみましょう。

$ vagrant up

それなりに時間がかかりますが、しばらく待っていると起動が完了します。
正常に終了していれば VirtualBox の画面にも新しく VM が追加されています。


VagrantSSH 接続

そして Vagrant を導入する一番のメリット?と言ってもいい部分ですが、
すでに SSH 接続設定などが終わった状態の VM が起動されているため、実際につないでみたいと思います。
以下のコマンドを叩いてみましょ。

$ vagrant ssh
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-79-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Wed Feb 24 03:17:38 UTC 2016

  System load:  0.42              Processes:           80
  Usage of /:   3.5% of 39.34GB   Users logged in:     0
  Memory usage: 25%               IP address for eth0: 10.0.2.15
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


vagrant@vagrant-ubuntu-trusty-64:~$

つながりました!!素晴らしいですね!

VirtualBox内のUbuntuへSSH接続

f:id:kabatin:20160222191347j:plain

MacOSXにインストールされているVirtualBoxで起動されたUbuntuで作業するとレスポンスがもっさりしていてストレスたまりますよね?
なのでUbuntuに対してMacOSの端末からSSH接続をすることにしました。

VirtualBoxの設定

VirtualBoxのメニューバーから「環境設定...」を開きます。
設定ウィンドウの「ネットワーク」の「ホストオンリーネットワーク(H)」タブを選択します。

画面右側の「+」マークを押してネットワークアダプターを追加します。
f:id:kabatin:20160222182934p:plain

次にドライバーマークのアイコンをクリックして設定内容を見てみます。
環境によって多少違うと思いますが、こんな感じで設定されているかと思います。
f:id:kabatin:20160222183008p:plain

バーチャルホスト側の設定

次にUbuntuがインストールされているバーチャルホスト側の設定を行います。
VirtualBoxの画面上で対象のバーチャルホストを選択した状態で「設定(S)」ボタンを押します。
設定ウィンドウの「ネットワーク」を選択すると以下のような画面になると思います。
f:id:kabatin:20160222183309p:plain

「ポートフォワーディング(P)」ボタンを押してポートフォワード設定画面を開きます。
画面右側の「+」マークを押してポートフォワード設定を追加します。
f:id:kabatin:20160222183351p:plain

こんな感じで、ポート44444に対してポート22を割り当ててみました。
設定が終わったら「OK」ボタンを押して閉じます。

Ubuntu側のSSHインストール

次にUbuntuSSHサーバをインストールして実行します。

$ sudo apt-get update    // 念のため最新にアップデートしておきます。
$ sudo apt-get install openssh-server

もし、自動的にSSHサーバが起動していない場合は手動で起動します。

$ sudo service ssh start

MacOSX側から接続

$ ssh <username>@192.168.99.100
ECDSA key fingerprint is SHA256:sO+PooxempCrdXg1BeKtGMS3DR3cdL0uG**********.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.99.100' (ECDSA) to the list of known hosts.

初回はこんな感じで応答を求められると思います。
2回目以降は何も聞かれることなくすんなり接続ができると思います。

これでいちいちUbuntuGUIを立ち上げなくてもコマンドのみでサクサク作業ができるようになりました。
作業効率って大事ですよね!

Docker 主要コマンド一覧

f:id:kabatin:20160222190902p:plain

みなさん Docker 使ってますか?
この記事ではDockerのコマンドについてまとめてみました。
オプションなど細かく分類するとまだまだたくさんありますが、実務でよく使うものを集めてみました。

Docker 主要コマンド一覧

ローカルにあるイメージ一覧を取得する

$ docker images

コンテナ一覧を取得

$ docker ps -a

オプションについて
※) -a オプションは停止中のコンテナも含めて表示する

コンテナの停止と開始と再始動

$ docker stop <コンテナ名>
$ docker start <コンテナ名>
$ docker restart <コンテナ名>

コンテナの強制終了

$ docker kill <コンテナ名>

コンテナの作成&実行

$ docker run -it --name <作成コンテナ名> <リポジトリ名:タグ名> /bin/bash

オプションについて
※) -it オプションは --interactive, --tty オプションでコンテナとbashで対話するためのものです。
※) 実行するとコンテナ内のbashにプロンプトが切り替わります。

コンテナの作成&実行(ポートを指定する場合)

$ docker run -it --name -p 33333:80 <作成コンテナ名> <リポジトリ名:タグ名> /bin/bash

※) 33333ポートに対してアクセスするとこのコンテナの80ポートへ流れる

起動中のコンテナに入る

$ docker exec -it <コンテナ名> /bin/bash

コンテナの各種情報を出力

$ docker info <コンテナ名>
$ docker inspect <コンテナ名>

コンテナを削除

$ docker rm <コンテナ名>

イメージを削除

$ docker rmi <イメージ名>

イメージの検索

$ docker search <検索イメージ名>

イメージの取得

$ docker pull <リポジトリ名:タグ名>

Mac + VirtualBox + Ubuntu 14.04 + Docker による開発環境構築

f:id:kabatin:20160222190902p:plain

仕事でDockerを利用して開発環境を作る機会が頂けましたので環境構築の手順の共有と備忘録として記事を書いていきたいと思います。

各ソフトウェアのバージョン情報など

MacOSX 10.11.1
VirtualBox 5.0.14
Ubuntu 14.04 LTS
・Docker 1.10


VirtualBoxをインストール

VirtualBoxはこちらから最新版をダウンロードできます。
https://www.virtualbox.org/

こちらは特に難しいところはないので、画面に従ってインストールしてください。

f:id:kabatin:20160222153015p:plain


VirtualBoxUbuntuをインストール

VirtualBoxのインストールが終わったら次は実際にUbuntuをインストールします。
まずはUbuntuのイメージファイルが必要なので下記のサイトからダウンロードします。
http://www.ubuntulinux.jp/download/ja-remix

イメージファイルがダウンロードできたら、VirtualBoxの左上にある「新規(N)」ボタンを押して
Ubuntu用のバーチャル環境を作成していきましょう!


まずはバーチャル環境に名前を付けます。それ以外の項目はそのままで良いでしょう。
f:id:kabatin:20160222153025p:plain

次に、メモリサイズの指定を行います。
僕は2GBを指定してみました。マシンのメモリ容量と相談して適当に設定しましょう。
f:id:kabatin:20160222153027p:plain

次はハードディスクの設定項目です。
仮想ハードディスクを設定するかどうかですが、初回であれば何もないはずですので「仮想ハードディスクを作成する(C)」を選択しましょう。
f:id:kabatin:20160222153029p:plain

ハードディスクのファイルタイプは「VDI (VirtualBox Disk Image)」を選択します。
f:id:kabatin:20160222153031p:plain

物理ハードディスクの設定は今回は「可変サイズ(D)」にしました。
固定サイズにすると、作成時に少し時間がかかる代わりに処理速度が上がるようですが、ディスク容量の節約のために今回は可変サイズで作成します。
f:id:kabatin:20160222153034p:plain

最後にディスク容量を指定して作成します。
Ubuntuをインストールするには最低7GBの容量が必要なため、少し余裕をもたせて8GBとしました。
f:id:kabatin:20160222153036p:plain

これで無事にUbuntu用のバーチャル環境の作成が完了です!
f:id:kabatin:20160222154309p:plain


それでは「起動(T)」ボタンを押してUbuntuを起動してみましょう!
するとこんな画面が表示されるかと思います。
ここで先ほどダウンロードしておいたUbuntuのイメージファイルを選択して「Start」ボタンを押します。
f:id:kabatin:20160222154558p:plain

そうすると起動時にこのイメージファイルがロードされてUbuntuのインストール画面が表示されます。
右の「Ubuntu をインストール」ボタンを押してUbuntuをインストールしていきましょう。
f:id:kabatin:20160222155045p:plain

・必要最低限のHDD空き容量があること
・インターネットに接続されていること
この2つがクリアできていればインストールが可能です。
(たぶん大丈夫になってるはず)
f:id:kabatin:20160222155049p:plain

警告と書いてあって若干怖いですが、「ディスクを削除してUbuntuをインストール」を選択します。
初回インストールなので特になくなって困るものはありませんので大丈夫です。
f:id:kabatin:20160222155053p:plain

住んでいる地域を選択します。
f:id:kabatin:20160222155058p:plain

キーボード設定ですが、特に指定がなければそのまま続けます。
f:id:kabatin:20160222155104p:plain

ここまで設定が終わるとOSのインストールが始まりますのでしばらく待ちます。(約20分程度)
f:id:kabatin:20160222161447p:plain

インストールが終わると再起動が求められます。
再起動した結果が以下の画面になります。
無事にUbuntuをインストールすることができました!

f:id:kabatin:20160222161627p:plain


ご覧の通りインストール完了後の初期状態だと解像度がだいぶ小さいです…。
作業効率化のためにまずは解像度の設定を行いましょう。
初期状態だと640x480しか選択することができません。
f:id:kabatin:20160222154307p:plain


Ubuntuが表示されているウィンドウのウィンドウメニューから
「Devices」→「Insert Guest Additionas CD image...」を選択します。
すると以下のようなポップアップが表示されるので「実行する」ボタンを押します。
f:id:kabatin:20160222161454p:plain

パスワードが求められるのでUbuntuのインストール時に設定したパスワードを入力して「認証する」ボタンを押します。
f:id:kabatin:20160222161837p:plain

コマンドラインが起動して何やらインストールが始まります。
画面に「Press Return to close this window...」と表示されたら完了です。
リターンキーを押してウィンドウを閉じましょう。
f:id:kabatin:20160222161925p:plain

その後、バーチャル環境を再起動すると640x480以外の解像度も選べるようになっているはずですので、環境に合わせて好きなものを設定しましょう。
f:id:kabatin:20160222162307p:plain


UbuntuへDockerをインストール

さて、ようやくUbuntuがインストールできたところで次は本題のDockerをインストールしていきたいと思います!

インストールと聞くと apt-getyum が思い浮かぶかと思いますが、apt-getを利用すると少し古いバージョンがインストールされるようです。
今回は wget で最新をインストールしていきたいと思います。

$ wget -qO- https://get.docker.com/ | sh

インストールが終わりました。
f:id:kabatin:20160222163106p:plain

最後にこんなことが書いてあります。

If you world like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker kabayama

Remember that you will have to log out and back in for this to take effect!

ようするに、ルートユーザ以外で実行したい場合はこのコマンドを実行しておいてね!ってことみたいです。

それでは Docker コマンドでバージョン確認をしてみましょう。

$ docker version

バージョン情報が表示されました!
f:id:kabatin:20160222163806p:plain

さっそく Docker の Hello World を実行してみたいと思います!
あれ・・・。エラーになってしまいました。
f:id:kabatin:20160222170806p:plain

この後あちこちググりながら1時間ほどいろいろ試したのですが、結局OSを再起動したら sudo 付けずに一般ユーザで実行できるようになりました。
環境構築手順としてはそれほど多くはありませんが、実際にやってみるといろいろハマるところがあり2〜3時間を要してしまいました。

おそらくこのコマンドが有効化されるために、OSの再起動が必要なようですね。

sudo usermod -aG docker kabayama

再起動しても解決されない場合は、Dockerサービスが上がっていない可能性があるので以下のコマンドで解決するかもしれません。

sudo service docker start


今回はかなり手こずってしまいましたが、次回からはすんなり構築できるようにしっかり覚えたいと思います。
同じような問題でハマっている方、これからDockerを使ってみようという方の少しでも参考になれば嬉しいです。