ちなみに

火曜日の空は僕を押しつぶした。

Docker入門した

最近よく名前を聞くようになったDockerを触ってみた。
Docker は LXCAUFS を使ったコンテナ型の仮想化ソフトウェア。
PaaS の dotCloud が自社で使っている技術をオープンソースとして今年の夏にリリースしている。
(dotCloud は docker inc. に社名変更してる)


ちょっと前に @sowawa がFacebookで書いていたのを見て意識しはじめて、昨日の id:shiba_yu36エントリの流れをみていて、やってみようと触ってたら朝になっていて、仕事進んでないし Ruby Advent Calendar のネタもみつかってなかった。くやしいので調べた情報をメモしておく。

調べてみる

最初に読んだ。このときにはまだあまりどんなものか理解できていない。

Docker とはなんぞやというのは検索してまず目についたこの記事でつかんでふむふむと言っていた。

次にこの記事に沿って一通り動かしてみた。
VagrantRubygems で提供されていたときから触っていないのがバレる案件だが、vagrant up したらエラーになって、調べたらだいぶ古かったので公式のパッケージからインストールした。 rbenv で複数の Ruby のバージョンにインストールしていたので各Rubyのバージョンから Vagrant を消さないと shim が消えてくれなくて、vagrant コマンドが gem の方を参照しててつらかった。
CoreOS は大規模インフラ向けの超軽量なLinuxディストリビューションで、パッケージをインストールしたりできずにオペミスなどで壊れていないことを保証できるようになっている。こいつを沢山のノードにバラまいて、その上で必要な Docker のコンテナを立ち上げて、不要になったらコンテナを捨てる。(これがImmutable Infrastructureだと認識してるけど間違ってますか)
vagrant up 以降はとくにひっかかりもなく体験できた。

ちょっと詳しく勉強するのにこれを読んで概要をつかんだ。

この辺までくるとなんとなく分ってきたので、公式のチュートリアルをやってみる。最初にこれをやるべきだけれど、英語がネックでやる気を失いそうなので日本語の情報から当った。
このチュートリアルはよくできていて、1つ1つ試しながら操作を覚えられる。基本操作のあとには、Dockerfile のチュートリアルもあって、こちらは穴埋め問題とかがあった。

最後にドキュメントをさらっと読んでみる。Example がとても参考になるので、これを見ながら分からないところを調べるスタイルで良さそう。

使ってみる

とりあえず sl を走らせるためのイメージを作ってみて感触を掴むことにした。作り方などは元気だったら別に書こうと思うけど、元気だったことはいままでない。

経由で https://github.com/miyagawa/docker-plenv-vanillaDockerfile を読んで参考にした。

Docker には github + travis.ci みたいな DOCKER index というサービスがあって、docker push して作ったイメージを公開したり、github のリポジトリを登録しておくと、勝手に Dockerfile を取得+実行してくれて、問題ないものだけ公開されたりする。 公開されているものは docker pull というコマンドで取得してすぐに実行できる。

いますぐに sl を実行したいというニーズがあったので、docker run -t sixeight/dockdr-slsl が走るようにしておいた。いちいち pull しなくても run の引数で渡したイメージがローカルになければ、リモートから探して取ってきてくれるので何も考えずにコマンドを叩くだけですぐに実行できる。すばらしいことだと思う。

どう使うか

サーバーの構成を作るための試行錯誤、はじめてのミドルウェアやツールを試すときなんかに使えそう。しかし弊社では未だにサーバーの管理は手作業の職人芸になっているのでまずはここを是正しないといけないが、僕が職人にすらなりきれていないので道は遠い。

もう一つの使い方は今回僕がやったような使い方が考えられる。アプリがひと通り動く環境のイメージを作っておいて他人に渡すような使い方だ。slHomebrew でも提供されているし、簡単に入れることはできるけど、もっと複雑な構成のアプリケーションだった場合は「これ試してみてよ」とは気軽に言えない。そういったときに Docker のイメージを作っておけば簡単に渡すことができる。

来年が楽しみですね。

追記

時間とって勉強したい