概要
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 でサーバーインフラを差分管理出来るのって素晴らしいなあ
- もう少し、色々と書く