そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

今更ながらCentOS6.4にDocker導入してみる

アプリ側の人間なんでインフラいじりは本業ではないのだけど、だからこそその辺の煩わしさを減らして気軽に色々試したいなーということでDocker勉強始めてみた。

Docker導入

インストール

EPELより

# yum install -y docker-io

起動

# service docker start

バージョン確認

# docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.2
Git commit (client): 63fe64c/1.0.0
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.2
Git commit (server): 63fe64c/1.0.0

自動起動設定

# chkconfig docker on

使ってみる

Hello world

とりあえず仮想CentOS上でechoしてみる。

# docker run centos echo "Hello world"
Unable to find image 'centos' locally
Pulling repository centos
b157b77b1a65: Download complete
511136ea3c5a: Download complete
34e94e67e63a: Download complete
Hello world

最初はイメージをダウンロードしてきた後にコマンドが実行される。

結構サクッと。

当たり前だけど二度目はダウンロードなし。

# docker run centos echo "Hello world"
Hello world

コンテナを起動してみる

# docker run -i -t centos /bin/bash
bash-4.2#

オプションはインタラクティブ・ターミナルの意。

こんな感じでコンテナ内に入れる。

ここで諸々の操作をして環境を作る。

ちなみにexitコマンドで抜けられる。

コンテナ確認

docker ps -aで起動していたコンテナの確認ができる。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
a67741966c87        centos:latest       /bin/bash           2 minutes ago       Exited (0) About a minute ago                       tender_sammet

ちなみに消すには

# docker rm [コンテナID]

イメージの保存

環境作ったらイメージを保存。

# docker commit 3fd1c5b1e0a4 blue1st/test
933754bdc3d046930813b8f42ec36b8de3a6079fcedb5e1129cf47361652f354

IDとイメージ名を指定する。

イメージ名は「ユーザ名/〜」の形が一般的らしい。

imagesで確認できる。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
blue1st/test        latest              933754bdc3d0        28 seconds ago      243.7 MB
centos              latest              b157b77b1a65        4 days ago          243.7 MB

ほいでもって、runでもって起動できる

# docker run -i -t blue1st/test
bash-4.2#

ちなみにイメージ削除は

# docker rmi [イメージID]

バックグランド実行とか

現実には何がしかのコンテナで何かしらのミドルウェアなりアプリなりを動かし、ポートフォワーディングでホストから接続する形になると思う。

この場合は

# docker run -p [ホストのポート]:[コンテナのポート] -d [リポジトリ]

みたいな形で起動する。

ちなみに止める時は

# docker kill [コンテナID]

その他

実用上は、必要な操作等を記述したDockerfileを使って自動でコンテナの環境を作成してそれを使っていくらしい。

こっちの方はおいおい勉強していきたい。


ちょっと前まではVagrant+Chefで環境つくって云々と考えていたけど、何気に勉強が必要な要素多いしサーバリソース食うしで実のところやる気がダダ下がってったんだけど、こっちは割とシンプルでサクッとできそうなのが好感触。