: O. Yuanying

docker 便利

自鯖にオレオレ Cloud Foundry は色々なウェブアプリを色々な環境で突っ込めて便利だなあと思う反面、 一台のサーバにあんなに重厚な仕組みはいらないよなーと思ってたところに docker ですよ。

概要 とか 使い方 とかはすでに他のえらい人たちが紹介してるので、 使ってて気づいた便利な使い方を紹介ですよ。

Remote API を使う

いままで Remote API を http で公開してたので、 簡単にリモートから docker の API を叩けたのですが最新の Docker ですとデフォルトが Unix ソケットを利用するように変更されてしまっているので起動時にわざわざ http でも API を公開するよと指定しなくちゃならない。

bind するホストやポートやソケットは複数設定することができるので、 デフォルトのソケットも bind しつつ、http でも API を公開したい場合は以下のようになる。

# docker -d -H="tcp://0.0.0.0:4243" -api-enable-cors -H unix:///var/run/docker.sock

コンテナを再起同時にも自動で起動

ホスト(docker)を再起動した時にコンテナも自動で再起動してほしいなあ、 と思っていたら、-r オプションで解決だった。

# docker -d -r

docker の GUI が欲しい

そのものがあった。crosbymichael/dockerui -- A web interface for docker.

docker のイメージも公開されているので pull して run してやればすぐ使える。

# docker pull crosbymichael/dockerui
# docker run -d crosbymichael/dockerui /dockerui -e="http://192.168.1.9:4243" -p 9000:9000

-e のオプションで docker を起動しているホストのアドレスを指定してやる。

Port が起動するたびに変わってウザい

-p のオプションでホスト側とコンテナ側のポートを同時に指定できるようになってた。

# docker run -d yuanying/mysql -p 3306:3306

これで毎回サーバを再起動するたびに mysql のポートが変更してしまうとかいうアホな事態を避けられる。

Ruby on docker

Dockerfile はこんな感じになった。

# Ruby
#
# VERSION               0.0.1

FROM      ubuntu:precise

# make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison nodejs subversion
RUN curl ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz | tar zxvf -
RUN cd ruby-2.0.0-p247 && ./configure && make && make install && gem install --no-ri --no-rdoc bundler

docker on Upstart

以下のような設定ファイルになった。

root@precise64:/home/vagrant# more /etc/init/docker.conf
description     "Run dockerd"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

script
    /usr/local/bin/docker -d -H="tcp://0.0.0.0:4243" -api-enable-cors -H="unix:///var/run/docker.sock" -r
end script