概要
CoreOSをVagrantで利用したCoreOS内でdockerを使ってUbuntuのイメージを作成したUbuntuのイメージ内にRuby 2.1-preview1とfluentdをインストールしたイメージを作成した- 作成したイメージを index.docker.io にコミットする(ところまで出来れば嬉しい)
参考
- Running CoreOS on Vagrant
- CoreOSでDocker入門
- 仮想環境構築に docker を使う
- Docker を読む
- Docker = LXC + aufs + GitHub Culture
ウンチク
CoreOS とは
Linux Kernelとsystemdだけで実装されたシンプルな OSChrome OSがベースとなっているDockerと組み合わせて OS のアップデートを行うCoreOS単体でのソフトウェアのインストールを行えない
docker とは
- dotCloud が提供している
- 個人的な印象としては
LXCのコンテナをgitのように管理するフロントエンドツール...しかし、それだけではない AUFSという差分情報を透過的に階層で保持するファイルシステムを採用していて、その差分を git like なコマンドで管理している- コンテナを起動する際には差分だけを読み込んで起動するので起動が早い!(lxc-clone からの lxc-start に比べて 3 倍早い(個人比))
設定
検証した環境
- Ubuntu 13.04 amd64
- VirtualBox via Vagrant
- ThinkPad X1 Carbon
CoreOS を利用しなければ VirtualBox とか Vagrant とか要らないと思う。
Vagrant のインストール
gem から Vagrant をインストールするとなぜか no method error が発生するし、公式のパッケージはバージョンが古かったりだったので Vagrant のサイトから最新版をダウンロードしてインストールした。合わせて、virtualbox のバッケージもインストールした。
sudo apt-get install virtualbox wget http://files.vagrantup.com/packages/db8e7a9c79b23264da129f55cf8569167fc22415/vagrant_1.3.3_x86_64.deb sudo dpkg -i vagrant_1.3.3_x86_64.deb
CoreOS のインストール
下記のようにドキュメントに従ってセットアップ。
mkdir vagrant cd vagrant git clone https://github.com/coreos/coreos-vagrant/ cd coreos-vagrant vagrant up
vagrant ssh を使って CoreOS にログインすると以下のように表示される。

CoreOS は既に Docker が利用可能な状態になっているのが嬉しい。ただ、前述の通り、CoreOS 自体にはパッケージのインストールが出来ないので注意する。

docker を使ってみる
コマンド一覧

Hello World
base というコンテナイメージを利用して 'hello world' を表示する。
docker run -i -t base echo 'hello world'
初回は base イメージのダウンロードに時間が少し発生するもののあっと言う間に hello world が表示された。

コンテナにアクセスする
docker run -i -t base /bin/bash

/bin/bash を使って base イメージのコンテナにアクセスする。ほぼ一瞬にしてコンテナが起動するので驚き。
コンテナにアクセスする(2)
-d オプション(Detached mode)を付けて起動するとバックグラウンドでコンテナを起動出来る。LXC も同じですな。
docker run -i -t -d base /bin/bash
バックグラウンドで起動しているコンテナには...
docker attache ${ID}
でアクセスすることが出来る。

コンテナの一覧
docker ps -a
以下のように表示される。

イメージの確認
docker images

イメージの削除
docker rmi ${ID}
Ruby 2.1-preview1 と Fluentd がセットアップされたイメージを作成する
セットアップ
dotCloud が提供しているオフィシャルコンテナイメージとして登録されている ubuntu を利用する。
docker run -i -t ubuntu /bin/bash
以下のようにあっという間に Ubuntu が起動する。

以下のコマンドで Ruby 2.1-preview1 と fluentd をインストールする。
apt-get update apt-get install wget build-essential libssl-dev zlib1g-dev cd /tmp/ wget http://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.0-preview1.tar.gz tar zxvf ruby-2.1.0-preview1.tar.gz cd ruby-2.1.0-preview1 ./configure && make && make install gem install fluentd --no-ri --no-rdoc
インストール後、もろもろを確認して exit で一度コンテナを抜ける。

コミット
作成したイメージをコミットする為に起動したコンテナイメージの一覧を確認する。
docker ps -a

Ruby 2.1-preview1 と fluentd を設定したコンテナイメージの ID を確認(赤線部分)した上で docker commit コマンドでコミットする。
docker commit の書式
docker commit [OPTIONS] CONTAINER [REPOSITORY [TAG]]
CONTAINER には docker ps -a で取得したコンテナの ID を設定する。
コミット!
docker commit 93d16a72d76c inokappa/ruby-fluentd
若干、時間がかかるものの、正常にコミットされると以下のようにイメージの ID が出力される。

まとめ
- とにかく起動が早いのが嬉しい
- 起動も速いけど、
exitだけで OS が終了出来る手軽さも素敵 - git like でサーバーインフラを差分管理出来るのって素晴らしいなあ
- もう少し、色々と書く