VirtualBox 5 上の Debian 8 に Guest Additions をインストールする
まあドキュメントを読めって話ではあります。 次のページにまとまっています。
背景
わりと長く VirtualBox を使ってきて、何度も Guest Additions をインストールしてきましたが、これまで Guest Additions のインストール手順をちゃんと見たことがありませんでした。
これまでは雑にインストールメディアからインストールできてたのですが、今回 VirtualBox 上の仮想マシンに Debian 8 をセットアップして Guest Additions をインストールしたらちゃんとインストールできてなかった *1 ので、改めて調べてみました。
インストール方法
最初に言った通りドキュメントに全部書かれてますので、詳細はドキュメントを読んでください。
事前準備
まず、事前準備として、dkms
パッケージをインストールします。 (Debian/Ubuntu 系の場合。)
apt-get update apt-get install dkms
(root
ユーザー以外で上記コマンドを実行する場合は sudo
してください。)
んでもってシステムを再起動します。
インストール
再起動後、ゲスト OS が起動したら、まずは Guest Additions のインストールメディア (VBoxGuestAdditions.iso
) を挿入します。 「デバイス」 メニューの 「Guest Additions CD イメージの挿入」 を選択すると、ゲスト OS にインストールメディアが (仮想的に) 挿入されます。
挿入された CD-ROM は /media/cdrom
にマウントされます。 端末を開いて /media/cdrom
に移動して、次のコマンドを実行することでインストールが開始されます。
sh ./VBoxLinuxAdditions.run
(root
ユーザー以外で実行する場合は sudo
しましょう。)
関連エントリ
VirtualBox で共有フォルダを使う
- VirtualBox 4 における共有フォルダの自動マウントの設定 - ひだまりソケットは壊れない : Guest Additions をインストールしたら共有フォルダ機能が使えます。
VirtualBox 上の Debian に Guest Additions をインストールする
dkms
パッケージをインストールする以外の方法が紹介されてますが、まあ gcc
と make
と linux-headers
の正しいバージョンが入ればなんでも良さそうです。
*1:事前準備ができてなかった
Docker 入門 #1 — Windows に Boot2Docker をインストールして既存イメージを扱ってみる
Docker 使えるようにならないとなー、ということで、まずは Docker を使える環境を準備して、ユーザーガイドをちょっと読んでみた。 既存イメージを使ってコンテナの生成をするなどの操作をするところまで。 完全なる入門者向け (あるいは自分用) だけどメモしておく。
Docker のバージョンは 1.1.2 を使用した。
Docker についての参考文献
そもそもの Docker についての説明はこのエントリでは行わない。 次の記事が参考になる。
- Docker とは何か: 今からでも間に合うDockerの基礎。コンテナとは何か、Dockerfileとは何か。Docker Meetup Tokyo #2 - Publickey
- 背景 (ウェブシステムにおける Docker の立ち位置):
Windows での Docker 環境の構築
Windows ユーザーでない場合はそれぞれの環境用のインストールガイドを参照のこと。
- Windows 上への Docker 環境インストールガイド: Microsoft Windows - Docker Documentation
Docker Engine は Linux カーネルの機能を使用しているので、Windows の上に直接 Docker 環境を構築することはできない。 VirtualBox なりなんなりで仮想マシンとして Linux マシンを Windows 上に起動する必要がある。
Boot2Docker というアプリケーションが Docker より提供されているので、(Docker Engine 用の仮想マシンを立てるつもりなら) これを使うのが便利である。 Boot2Docker を使うことで、VirtualBox 上に Docker 環境用の仮想マシンをインストールし、Docker デーモンを走らせることができる。
- Boot2Docker: boot2docker/boot2docker · GitHub
Boot2Docker のインストールで VirtualBox もインストールできるようなので、まだ VirtualBox をインストールしていない人でもいきなり Boot2Docker をインストールして良い。 次のエントリも参考になる。
使い方
「Boot2Docker Start」 というのがスタート画面のアプリケーション一覧に追加されているはずなので、これをクリックする。 すると、VirtualBox に Docker 用の仮想マシンが登録されて、Linux のインストールなどが実行される。 そして仮想マシンが起動して、そこに SSH 接続される。
この仮想マシン上で docker
コマンドを使い、Docker コンテナを作ったりする。
また、インストール時にパスを通すかどうかのオプションを選択できるが、パスを通しておけば boot2docker コマンドが使えるようになる。「Boot2Docker Start」 を使わなくても、PowerShell を開いて boot2docker
コマンドを使うことで、仮想マシンの操作ができる。
他のコマンドは boot2docker --help
で調べられる。
Docker を使ってみる
ユーザーガイドに従って Docker を使ってみる。 これ以降は、基本的に boot2docker ssh
して、仮想マシン上でコマンドを実行するものとする。
ユーザーガイドとは別にオンラインチュートリアルもあって、こっちの方が最初は良いかもしれない。
アプリケーションの Docker 化 (?)
docker run
コマンド
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world
上のようなコマンドを実行すると、何やらダウンロードしてきて、最終的に 「Hello world」 が出力される。 何をしているかというと、「ubuntu:14.04」 というイメージからコンテナを新たに生成し、そのコンテナ上で 「/bin/echo 'Hello world'」 というコマンドを実行している。
指定されたイメージは、まず Docker ホスト上で探される。 そこで見つからなければ、Docker Hub 上で探される。 今回の場合、「ubuntu:14.04」 というイメージは Docker Hub からダウンロードされる。
新たに生成されたコンテナは、指定のコマンドを実行し終えると停止 (?) するようである。 (コンテナ自体は残っている。 後で出てくるが、docker ps
コマンドに -a
オプションを渡すと、停止しているコンテナも表示される。)
-t
オプション *1 と -i
オプション *2 を渡すことで、対話型コンテナを立ち上げることもできる。
-d
オプションでコンテナのデーモン化ができる。 docker run -d ...
コマンドを実行すると、長い文字列が表示される。 これはコンテナ ID である。 コンテナの名前は (明示的に指定しなければ) 自動的につけられる。
docker ps
コマンド
docker ps
コマンドで、実行中のコンテナの情報が表示される。 コンテナ ID やコンテナ名などが確認できる。
上で書いたように、-a
オプションを付ければ停止中のコンテナも表示される。
docker logs
コマンド
docker logs {container}
コマンドを使えば、コンテナ内部の標準出力を表示できる。 {container}
としては、コンテナ ID とコンテナ名のどちらかを指定できるっぽい。
docker stop
コマンド
docker stop {container}
コマンドを使えば、動いているコンテナを止めることができる。
コンテナの扱い方
バージョン確認
docker version
コマンドで、Docker クライアントと Docker サーバーのバージョン情報が表示される。 Go のバージョンや Git コミットのリビジョンも表示される。
Docker クライアントのコマンド一覧
オプションなしの docker
コマンドで、docker
コマンドが受け付けるアクション一覧が表示される。 各アクションについては、docker {action} --help
コマンドでヘルプを表示できる。
コマンド一覧については Web 上のヘルプを参照してもよい。
Web アプリケーションを Docker 内で動かす
$ sudo docker run -d -P training/webapp python app.py
上記コマンドで、トレーニング用の web アプリケーションを Docker 内で動かすことができる。 「training/webapp」 というイメージは Docker Hub からダウンロードされる。
-P
オプションは、コンテナ内部で必要なネットワークポート (exposed port) をホストのそれにマップするように Docker に伝えるためのものである。 上のコマンドを実行した後、docker ps -l
コマンド *3 を実行すると、PORTS の項に以下のような表示が出るはずである。
PORTS 0.0.0.0:49155->5000/tcp
ローカル Docker ホストの 49155 ポートが、コンテナの 5000 ポートにマップされていることがわかる。 コンテナ側のどのポートを露出させるかを指定する方法は、後で (イメージ作成方法のところ) で説明される。 ホスト側のポートは 49000 から 49900 の間 (high port と表現されている) から自動的に選ばれる。
-P
オプションの代わりに、docker run
コマンドに -p {container_port}
オプションを渡すことで、コンテナの指定のポートをホスト側の high port にマップすることもできる。 -P
オプションは、コンテナの exposed port をホストの high port にマップするものであるが、-p
オプションはコンテナ側の指定のポートが exposed port かどうかは関係ないようである。
また、-p {host_port}:{container_port}
という形式で、コンテナの指定のポートを、ホストの指定のポートにマップすることもできる。
ちなみに、Windows 上で Boot2Docker を使っている場合は、Windows の PowerShell 上で boot2docker ip
コマンドを実行することで、Docker ホストの IP アドレスを取得できる。
docker port
コマンド
docker port {container} {private_port}
コマンドで、指定のコンテナの指定のポートがどのポートにマッピングされているかを知ることができる。
Web アプリケーションのログ表示
docker logs
コマンドの -f
オプションは、tail
コマンドの -f
オプションのようなものである。
コンテナのプロセス
docker top {container}
コマンドで、指定のコンテナのプロセス一覧を見ることができる。
コンテナの詳細
docker inspect {container}
コマンドで、指定のコンテナの詳細情報を JSON 形式で得ることができる。
さらに、-f
オプションを使うことで、特定の情報のみを取りだすこともできる。
$ sudo docker inspect -f '{{ .NetworkSettings.IPAddress }}' nostalgic_morse 172.17.0.5
コンテナの再起動
停止されたコンテナは、docker start {container}
コマンドで再度起動できる。 実行中のコンテナの再起動は docker restart {container}
コマンド。
そういえばコンテナが停止される際に、コンテナ内のプロセスがどうなるのか、とか、再起動時にはどうなるのか、とかわかってない。
コンテナの削除
停止されたコンテナは docker rm {container}
コマンドで削除できる。
そういえば同僚が 「要らなくなったコンテナのごみ掃除が大変だ!」 とか言ってたけど、これのことなのかなー。
今回はここまで
既存のイメージを使うところまではこんな感じ。 さらにイメージをビルドしたりする話が続くけど、それはまた別のエントリに。
Docker入門 Immutable Infrastructureを実現する
- 作者: 松原豊,米林正明
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/25
- メディア: Kindle版
- この商品を含むブログ (5件) を見る
VirtualBox 5 における共有フォルダの自動マウントの設定
仮想マシン VirtualBox には、ホスト OS 側のディレクトリをゲスト OS 側から参照できるようにする仕組みがあります (共有フォルダ)。 VirtualBox 4.0 以降では自動マウントの機能も追加され、ますます便利になりました。 この機能を使うための設定は特に難しくないのですが、毎回いちいち調べるのも面倒なので軽くメモしておきます。 詳細はマニュアルをご覧ください。
共有フォルダ機能の概要
「共有フォルダ」 機能を使うことで、ゲスト OS からホスト OS のファイルにアクセスできるようになります。 この機能はネットワークを必要としません。 共有フォルダ機能に対応しているゲスト OS は、Windows (2000 以降) と Linux、それから Solaris です。 ゲスト OS には Guest Addition がインストールされている必要があります。
VirtualBox 4 から追加された自動マウント機能を有効にすると、VirtualBox の設定でどのディレクトリを共有するのかを設定するだけで、ゲスト OS 側からそのディレクトリにアクセスできるようになります。
設定方法
今回は、ホスト OS として Windows 10、ゲスト OS として Debian 8 jessie を使いました。 *1
ゲスト OS 側の事前準備
ゲスト OS には Guest Additions がインストールされている必要があります。 まだインストールされていない場合は次のページを参考にインストールしてください。
VirtualBox (ホスト OS 側) の設定
仮想マシンごとの設定画面に 「共有フォルダ」 という項目がありますので、共有したいディレクトリを選択します。 「名前」 は適当にわかりやすい値にすればよいでしょう。 自動的にマウントされるように、「自動マウント」 にチェックを入れておきます。
ゲスト OS 側での設定
ゲスト OS が Linux で、共有フォルダの自動マウントが有効な場合は、以下の位置に自動的にマウントされます。
- /media/sf_NAME
NAME は、ホスト OS 側で設定した 「名前」 の値になります。 注意しないといけないのは、このディレクトリのアクセス権は vboxsf
ユーザーグループにのみ許可されているということです。 そのため、ゲスト OS 側の一般ユーザーから共有フォルダにアクセスしたい場合は、そのユーザーを vboxsf
グループに追加する必要があります。
$ sudo gpasswd -a ユーザ名 vboxsf
ログインしなおすとグループへの追加が有効になるので、共有フォルダにアクセスできるようになっているはずです。
更新履歴
- 2016-01-27 : VirtualBox 5 がリリースされているので、タイトル等の変更を行いました。