最近よく名前を聞くようになったDockerを触ってみた。
Docker は LXC と AUFS を使ったコンテナ型の仮想化ソフトウェア。
PaaS の dotCloud が自社で使っている技術をオープンソースとして今年の夏にリリースしている。
(dotCloud は docker inc. に社名変更してる)
ちょっと前に @sowawa がFacebookで書いていたのを見て意識しはじめて、昨日の id:shiba_yu36 のエントリの流れをみていて、やってみようと触ってたら朝になっていて、仕事進んでないし Ruby Advent Calendar のネタもみつかってなかった。くやしいので調べた情報をメモしておく。
調べてみる
最初に読んだ。このときにはまだあまりどんなものか理解できていない。
Docker とはなんぞやというのは検索してまず目についたこの記事でつかんでふむふむと言っていた。
次にこの記事に沿って一通り動かしてみた。
Vagrant が Rubygems で提供されていたときから触っていないのがバレる案件だが、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-vanilla の Dockerfile
を読んで参考にした。
Docker には github + travis.ci みたいな DOCKER index というサービスがあって、docker push
して作ったイメージを公開したり、github のリポジトリを登録しておくと、勝手に Dockerfile
を取得+実行してくれて、問題ないものだけ公開されたりする。
公開されているものは docker pull
というコマンドで取得してすぐに実行できる。
いますぐに sl
を実行したいというニーズがあったので、docker run -t sixeight/dockdr-sl
で sl
が走るようにしておいた。いちいち pull
しなくても run
の引数で渡したイメージがローカルになければ、リモートから探して取ってきてくれるので何も考えずにコマンドを叩くだけですぐに実行できる。すばらしいことだと思う。
どう使うか
サーバーの構成を作るための試行錯誤、はじめてのミドルウェアやツールを試すときなんかに使えそう。しかし弊社では未だにサーバーの管理は手作業の職人芸になっているのでまずはここを是正しないといけないが、僕が職人にすらなりきれていないので道は遠い。
もう一つの使い方は今回僕がやったような使い方が考えられる。アプリがひと通り動く環境のイメージを作っておいて他人に渡すような使い方だ。sl
は Homebrew でも提供されているし、簡単に入れることはできるけど、もっと複雑な構成のアプリケーションだった場合は「これ試してみてよ」とは気軽に言えない。そういったときに Docker のイメージを作っておけば簡単に渡すことができる。
来年が楽しみですね。
追記
時間とって勉強したい