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

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

VirtualBoxのディスク容量を拡張する

f:id:kabatin:20160222191347j:plain

VirtualBoxで作業をしていると、想定よりディスクを使用してしまい容量不足になることがあると思います。
作業内容そのままでディスク容量を拡張する手順を残しておきたいと思います。


ディスク容量拡張の手順

・新規ディスクを追加する
・コマンドでHDDをクローンする
・古いディスクをアンマウント
VM上でパーティション調整(BIOS作業)


僕は MacOSX にて作業しています。
それでは早速始めていきたいと思います。


新規ディスクを追加する

まず対象VMの設定画面からストレージメニューを開きます。
f:id:kabatin:20160225172630p:plain


ストレージ一覧の右側にあるディスクの+マークを押します。
デフォルト選択が既存ディスクになっていますが間違えないように「新規ディスクの作成(N)」を押します。
f:id:kabatin:20160225172701p:plain


するとハードディスクのタイプ選択が求められるので前とVDIを選択して進めます。
f:id:kabatin:20160225172826p:plain


ディスクのサイズについては好きな方を選択してください。
ちなみに固定サイズの方が少しだけ速度が速くなるようです。
f:id:kabatin:20160225172835p:plain


最後にディスクの名前と容量を決めたら「作成」ボタンを押します。
注意点としては既存のディスクよりも大きい容量にするようにしましょう。
そうしないとこの後行うディスクのクローン作業がおかしくなると思います(^^;
f:id:kabatin:20160225172956p:plain


新しいディスクが作成されました。
f:id:kabatin:20160225173102p:plain


コマンドでHDDをクローンする

ストレージを選択すると右側にファイルパスが表示されると思います。
ターミナルを開き、この VDI ファイルが置いてあるところまで移動しましょう。
f:id:kabatin:20160225173102p:plain


移動したら下記のコマンドを実行してディスクのコピーを行います。
パーセンテージが表示され、100% になれば完了です。

$ VBoxManage clonehd --existing "Ubuntu 14.04 LTS.vdi" "New Ubuntu 14.04.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'VDI'. UUID: 4cc3e925-****-4d78-****-5abfe3e36cf8

古いディスクをアンマウント

無事にディスクのコピーが終わったら、起動させるディスクを変更します。
先ほどのストレージ設定画面で古いディスクを削除します。
削除といっても設定が削除されるだけで物理的にはファイルとして残っていますので安心してください。
古いディスクを選択して下部にあるディスクの「ー」ボタンを押すと削除が完了します。

最終的にはこんな感じになると思います。
f:id:kabatin:20160225173944p:plain

ここまででディスクの差し替えは完了です。


VM上でパーティション調整(BIOS作業)

パーティションの調整は BIOS 上で行う必要があります。
まず下記のサイトで GParted パーティション編集ツールのイメージファイルをダウンロードします。

GParted Live CD/USB/HD/PXE Bootable Image の Stable Releases にある iso ファイルをダウンロードします。
2016年2月25日時点での最新版は「Download gparted-live-0.25.0-3-i686.iso」のようです。

http://gparted.org/download.php


ダウンロードしたら、パーティションを変更したい VM の設定画面を開きストレージメニューを開きます。
CD設定部分へ先ほどダウンロードしたイメージファイルを設定して IDE プライマリマスターに設定します。
f:id:kabatin:20160225184333p:plain


その状態で VM を起動すると BIOS 上で GParted が立ち上がります。
項目2つ目の「Other modes of GParted Live」を選択します。
f:id:kabatin:20160225184612p:plain


次は一番上の「GParted Live (Default settings, KMS)」を選択します。
f:id:kabatin:20160225184638p:plain


keymap について質問されますが、「Don't touch keymap」を選択したままエンターを押します。
f:id:kabatin:20160225184727p:plain


次に言語設定を聞かれるため、「Japan」の 15 を入力してエンターを押します。
f:id:kabatin:20160225184759p:plain


最後にモードを聞かれますが、何も入力しなくても大丈夫なのでそのままエンターを押します。
f:id:kabatin:20160225184824p:plain



こんな画面が起動します。
f:id:kabatin:20160225185220p:plain


実はこの画面…
もうパーティション設定が終わった状態です。
途中のキャプチャを撮るのを完全に忘れていました。。

というわけで、足りない部分は言葉で説明しながら手順を紹介したいと思います!



構成として、まずメインストレージ領域があり、次に linux-swap 領域、最後に未割り当て領域になっていると思います。
この状態のままだと後方に空き領域がなく、メインストレージの領域を拡張することができません。

そのためまず最初に linux-swap 領域を大胆に削除します。
f:id:kabatin:20160225185439p:plain


次にその親の領域も削除します。
f:id:kabatin:20160225185516p:plain


メインストレージである /dev/sda1 以降に未割り当て領域しかない状態になりました!
この状態で /dev/sda1 のリサイズ作業を行います。
f:id:kabatin:20160225185607p:plain


後方に 2GB ほどの領域を残した状態で、好きなサイズまで拡張していきます。
設定が終わったら「リサイズ/移動」ボタンで確定させます。


次に先ほど消してしまった linux-swap 領域をもう一度設定します。
まずは未割り当て領域全てを拡張領域として追加します。
未割り当て領域を右クリックして「New」を選択します。
f:id:kabatin:20160225185812p:plain


種類のところを「拡張パーティション」に設定して「Add」ボタンを押します。
f:id:kabatin:20160225185926p:plain


こんな感じになったと思います。
f:id:kabatin:20160225185945p:plain


これで新規パーティション#1 の配下に未割り当て領域が移動したと思います。
この状態から未割り当て領域を右クリックし、さらに「New」で linux-swap 領域を作っていきます。
ファイルシステムのところを「linux-swap」に変更して「Add」ボタンを押します。
こちらは「論理パーティション」で大丈夫です。
f:id:kabatin:20160225190136p:plain


こんな感じになりました。
これでパーティションの設定自体は完了です。
f:id:kabatin:20160225190157p:plain


「Apply」ボタンを押して設定したパーティションを確定させましょう!

これでパーティション設定は全て完了です。
VM をシャットダウンし、先ほど設定していた CD ブートからイメージファイルを取り出して再起動すれば無事にディスク容量が増えていると思います。

早速ログインして容量を確認してみます。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        14G  5.4G  7.6G  42% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            991M   12K  991M   1% /dev
tmpfs           201M  900K  200M   1% /run
none            5.0M  4.0K  5.0M   1% /run/lock
none           1002M   72K 1001M   1% /run/shm
none            100M   28K  100M   1% /run/user

空き領域がだいぶ増えていますね!
同じような状況の方の参考に少しでもなれば幸いですm(_ _)m



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を使ってみようという方の少しでも参考になれば嬉しいです。