Docker を使ってみよう

最近流行りつくした感のある Docker を触ってみましょう。
Docker をまだ触ったことがないけど、いまいちよく分からない、単純な使い方からまず知りたい、という方向けに記述します。
一言で言うと、Docker とは、カスタマイズされた OS を仮想的に動かしてくれるアプリケーションです。


前提として、あなたは Ubuntu 14.04(192.168.0.1) を利用しているとします。
そして、nginx を建てたいとします。しかし、あなたは、今の環境(192.168.0.1) を、nginx で汚したくないと考えています。
例えば、ちょっと使ってみたいけど後ですぐ消すから、などといった理由です。
VM で動かしてるしスナップショット一瞬で取れるし別にいいんだけど、とか言わないでください、お願いします。


さぁどうするか・・・ただこれだけのためにもう一個 Ubuntu を建てるのは面倒です。
そこで、Docker の出番です。


まずは Docker のインストールから。
詳しくは Ubuntu Trusty 14.04 (LTS) (64-bit) を見ていただくとして、以下でインストールが可能です。

sudo apt-get update
sudo apt-get install docker.io

インストールが終わりましたら、
docker -v
と入力してみてください。

# docker -v
Docker version 1.3.2, build 39fa2fa

などと表示されれば、インストールは完了です。

では、

docker run -it ubuntu:14.04 /bin/bash

と入力してみてください。

# docker run -it ubuntu:14.04 /bin/bash
root@448bdaf4211d:/# 

お気づきでしょうか?
root@448bdaf4211d
と、今まで使用していた Ubuntu 14.04(192.168.0.1) とは別の環境ができあがっています。
上記 run コマンドは、ubuntu:14.04 の新しい仮想環境を今の Ubuntu 14.04(192.168.0.1) 環境の中で実行し、シェルとしては /bin/bash を起動する、という意味になります。
こうして立ち上げた Docker コンテナ(Docker run したものをそう呼びます)は、今の Ubuntu 14.04(192.168.0.1) 環境とは隔離された仮想環境です。
なので、nginx だろうか何だろうか好きなだけインストールしても、今の Ubuntu 14.04(192.168.0.1) 環境には影響を与えません。

なので、早速 nginx をインストールし、起動してみましょう。

apt-get install -y nginx
service nginx start

ブラウザから、http://192.168.0.1 にアクセスしてみましょう。

・・・

つながらなかかったかと思います。
これは、docker run 時に、Docker コンテナが LISTEN するポートを foward していない事が原因です。

exit

と入力し、この環境を終了します。
余談ですが、

docker ps -a

とすることで、実行している(した)コンテナの一覧を表示することができます。
リスト中の CONTAINER ID と呼ばれる 12 桁の英数字と docker start, docker attach を用いることで、再度コンテナの実行を再開したり、docker rm とすることで、きれいさっぱり捨てることができます。
このように、好きなときに好きなコンテナを実行し、要らなくなったらすぐに捨てられる、それが Docker の魅力の一つです。


では、nginx を利用できるようにするためにはどうするか・・次のようにして実行してください。

docker run -it -p 192.168.0.1:81:80 ubuntu:14.04 /bin/bash
-p 192.168.0.1:81:80

が新しく増えています。これは、Docker コンテナ側で LISTEN している 80 番ポートを、192.168.0.1 の 81 番ポートに forward する、という意味です。
では、

apt-get install -y nginx
service nginx start

と入力し、ブラウザから http://192.168.0.1:81 にアクセスしてみましょう。

-p 192.168.0.1:81:80
によりコンテナ側の 80 番ポートを 192.168.0.1:81 に forward していることに注意してください。
nginx のデフォルトの index.html が表示されたかと思います。


以上で、本記事は終了です。
Docker には他に様々な使い方があり、大変便利です。
詳しい応用はすでに他の方が記事にされているので、本記事がそのための足がかりになると幸いです。