ようへいの日々精進XP

よかろうもん

CoreOS を使って docker を体験した

概要

  • CoreOSVagrant で利用した
  • CoreOS 内で docker を使って Ubuntu のイメージを作成した
  • Ubuntu のイメージ内に Ruby 2.1-preview1fluentd をインストールしたイメージを作成した
  • 作成したイメージを index.docker.io にコミットする(ところまで出来れば嬉しい)

参考


ウンチク

CoreOS とは

  • Linux Kernelsystemd だけで実装されたシンプルな OS
  • Chrome OS がベースとなっている
  • Docker と組み合わせて OS のアップデートを行う
  • CoreOS 単体でのソフトウェアのインストールを行えない

docker とは

  • dotCloud が提供している
  • 個人的な印象としては LXC のコンテナを git のように管理するフロントエンドツール...しかし、それだけではない
  • AUFS という差分情報を透過的に階層で保持するファイルシステムを採用していて、その差分を git like なコマンドで管理している
  • コンテナを起動する際には差分だけを読み込んで起動するので起動が早い!(lxc-clone からの lxc-start に比べて 3 倍早い(個人比))

設定

検証した環境

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 にログインすると以下のように表示される。

f:id:inokara:20130926230624p:plain

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

f:id:inokara:20130926230735p:plain

docker を使ってみる

コマンド一覧

f:id:inokara:20130927225754p:plain

Hello World

base というコンテナイメージを利用して 'hello world' を表示する。

docker run -i -t base echo 'hello world'

初回は base イメージのダウンロードに時間が少し発生するもののあっと言う間に hello world が表示された。

f:id:inokara:20130926231054p:plain

コンテナにアクセスする

docker run -i -t base /bin/bash

f:id:inokara:20130928042251p:plain

/bin/bash を使って base イメージのコンテナにアクセスする。ほぼ一瞬にしてコンテナが起動するので驚き。

コンテナにアクセスする(2)

-d オプション(Detached mode)を付けて起動するとバックグラウンドでコンテナを起動出来る。LXC も同じですな。

docker run -i -t -d base /bin/bash

バックグラウンドで起動しているコンテナには...

docker attache ${ID}

でアクセスすることが出来る。

f:id:inokara:20130928042836p:plain

コンテナの一覧

docker ps -a

以下のように表示される。

f:id:inokara:20130926232140p:plain

イメージの確認

docker images

f:id:inokara:20130926233622p:plain

イメージの削除

docker rmi ${ID}

Ruby 2.1-preview1 と Fluentd がセットアップされたイメージを作成する

セットアップ

dotCloud が提供しているオフィシャルコンテナイメージとして登録されている ubuntu を利用する。

docker run -i -t ubuntu /bin/bash

以下のようにあっという間に Ubuntu が起動する。

f:id:inokara:20130926235201p:plain

以下のコマンドで Ruby 2.1-preview1fluentd をインストールする。

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 で一度コンテナを抜ける。

f:id:inokara:20130927072921p:plain

コミット

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

docker ps -a

f:id:inokara:20130927073157p:plain

Ruby 2.1-preview1fluentd を設定したコンテナイメージの ID を確認(赤線部分)した上で docker commit コマンドでコミットする。

docker commit の書式

docker commit [OPTIONS] CONTAINER [REPOSITORY [TAG]]

CONTAINER には docker ps -a で取得したコンテナの ID を設定する。

コミット!

docker commit 93d16a72d76c inokappa/ruby-fluentd

若干、時間がかかるものの、正常にコミットされると以下のようにイメージの ID が出力される。

f:id:inokara:20130927074338p:plain


まとめ

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