dockerをEC2上のCentOSに構築

rebuild.fmとかでも出てくるdockerを年末から触り始めた。

まだ理解はしていないけどコンテナ技術を使ってVagrantに比べて起動が高速とかいうのはあるっぽい。

Docker: Linuxコンテナを使ってアプリケーションの配置を支援するとかよくわかる。

インストールと環境設定

epelでインストール出来るので
yum -y install docker-io
これでdockerのインストールは完了。

docker -v
Docker version 0.7.2, build 28b162e/0.7.2

ちゃんと入っていることは確認できる。

「dial unix /var/run/docker.sock: permission denied」なんていうエラーが出るとは思うけどrootでやればOK
ちゃんと一般ユーザ権限で利用出来るようにするなら

usermod -G docker ユーザ名
service docker restart

しておこう。
今回はrootで直接Loginして使うのでusermodは打たなくてもOK

dockerの起動

docker run -i -t ubuntu /bin/bash

これでubuntuのimageを持ってきてくれます。
最初の数分間は待ちましょう。

起動してきたら自動的にシェルに入っていると思います。
# cat /etc/issue
Ubuntu 12.04 LTS \n \l
# exit

CentOSの上にubuntuが動いているという不思議な感じ・・・
とりあえずexitで抜けておく

dockerはここからよくわからない世界に入っていくと思う。
コンテナとかをちゃんと理解しないとつらそう

その辺は上記スライドを見ましょう。
このスライドすごくわかりやすい。

ということでスライドにある内容をやっていってみた。

ベースイメージを用意

docker pull learn/tutorial

dockerのRepositoryからImageをダウンロード
数分かかりません。

imageを起動

docker run -i -t learn/tutorial /bin/bash

この起動がめちゃくちゃ速い。
ちょっぱやです。

アプリケーションのインストール

仮想サーバ(コンテナ)にLoginしている前提で
apt-get install -y vim
exti

ここでびびるのは再度

docker run -i -t learn/tutorial /bin/bash

で起動してもvimが入ってない・・・
この概念がわからずに・・・状態な私でした。
ベースイメージが更新されないという事に気がつかなかった。

コンテナをコミットしてimageに

docker ps -a

で動いているdockerがわかります。

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
736e9de497e7 learn/tutorial:latest /bin/bash 7 seconds ago Exit 130 grave_poincare
960fba45e682 learn/tutorial:latest /bin/bash About a minute ago Exit 0 jolly_tesla
e7935ccfcff5 ubuntu:12.04 /bin/bash 2 minutes ago Exit 0 cranky_thompson

Imageが同じlearn/tutorialでもコンテナIDが違います。
この場合は960fba45e682が先ほどvimをインストールしたコンテナ
736e9de497e7が一度抜けて再度立ち上げたコンテナ

これが理解するのに時間がかかりました。

vimが入っているコンテナをCommit

docker commit 960fba45e682 learn/vim

作ったコンテナを起動

docker run -i -t learn/vim /bin/bash

このコマンドで先ほどcommitしたコンテナを起動することができます。
このときにプロンプトは先ほどcommitしたコンテナIDとは違っています。
その上に修正した場合にはまたcommitしてコンテナイメージを持つ感じになります。

次のステップはdocker pushとかでLocalのRepositoryにpushできたらいいなー。
開発環境をpushしたら本番環境からpullしたらデプロイが終了とかいう妄想をしています。

あっDockerfileについても調べないと、Dockerfileとchefの区別がいまいちついていない^^;;

まとめ

dockerに慣れると
起動時間の短さにec2の起動ですらかったるく思える。

ポータブルなWebアプリケーションを読むとなるほどって思う。

この手のものがどこまで流行るかはわからないけど押さえておく必要ありそうだ。

最速Docker研究会(DockerのTipsを20個上げていくぜ編)

MacにもDockerを入れて遊べるような環境を構築してみようかなぁ〜