くろねこの栞

tera911が思ったことを書いていくだけ

dockerとコンテナ技術について

この記事はAdvent Calendar 2015 4日目の記事です。

http://www.adventar.org/calendars/1034 (同じものを別のブログにも書いてます。)

まずは

アドベントカレンダーに書かれているのは、「docker + xhyveについて」なんですがDocker触ってみよう!– 萌え萌えブログ///キャワワ(^^)/でdockerの説明があんまりなかったので、今回はdockerについてだけ書いていこうと思います。
(書こうとしていたxhyveについても仕組みとかその辺は一切触れず、立ち上げてみた程度なので別にいいでしょう。。。)

dockerとは

最近流行りのこのツールですが、そこまで難しいものではないです。
一言で言うとコンテナを動かすツールです。
ちなみに今回重要なキーワードは、

  • コンテナ(Linux Namespace)
  • 仮想化では無い

ぐらいです。

仮想化ではなく、コンテナ化

よく間違えられます、dockerは仮想化してません。
なぜ間違えるのか、予想するにホストとは別の実行環境として動いているからそう勘違いしてしまうのではないのかなと思います。
だって、仮想化もコンテナ化も必要なプロセスが動いていて、十分なパフォーマンスを出していればそこまで気にすることではないのだから。

どこが違う?

仮想化は、その名の通り仮想的な環境を作ります。仮想的なハードウェアを作りその上で別のシステムを動かします。
ハードディスクも、メモリもプロセッサも仮想的に動かします。簡単に言うとこんな感じです、わからなければ調べてください。(これ以上詳しく書けないです)

コンテナ化は?
別の言い方をすると隔離化です。 ただし、CPUもメモリもディスクも共通のものを使います。
ん?それだと隔離できないんじゃ?
大丈夫です。LinuxカーネルにNamescpaceという機能があり、これを使うと別の名前空間作りリソースを隔離することができます。
これがコンテナ化の大事なところです。これ無しだとコンテナ化は行えないと言っても間違いではないと思います。

コンテナ化の特徴

さて、先ほどコンテナ化は名前空間を作りリソースを隔離すると言いました。また、ハードウェアなどは共通のものを使うとも。
名前空間が違うとどうなるか。アプリケーションの実行領域だけが違ってきます。(プロセスの隔離)
つまり互いにアプリケーションが干渉できなくなります。名前空間が変わると全プロセスを表示しても他の名前空間のプロセスは見えなくなります。

例えば、
サーバーの用途としては、アプリケーションでサービスの提供ですよね?
sshd, httpd, mysql...etc これらが別々の空間で動かせたら、不正アクセスされた時もそのプロセスにしか影響が出なくなります。
ユーザによる権限設定だけでなく、隔離することによってセキュリティを高めることができます。
実際にどう隔離されるのか見ていきましょう。

dockerを使ってみる

実際に使ってみれば多分わかります。
Linux(CentOS6)があるというのが前提です。

dockerのインストール

epelレポジトリを追加して、
yum install -y docker-io
これで入ります。

コンテナ化されてるか確認する

さっきから言ってるコンテナ化、 実際に体験してどのような挙動をするかみてみましょう。

$ docker pull centos  #centosのコンテナデータをダウンロード
$ docker run -ti centos ps ax
# centosのコンテナでps axを実行する
# ps axは実行されている全プロセスの表示
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  17672  1116 ?        Rs+  10:08   0:00 ps aux

結果をみてください。
プロセスがpsしか見えません。これが隔離化です。
ホスト側のLinuxからはプロセスは全て見えてますよね?

以上です。 さすがにこれだけではちょっとわからないかも... とか思ってますが結構長くなりましたのでここで一旦切ります。 わからない人はとりあえず、 yum install -y docker-ioとかやってdocker run -it centosってすれば答えが見えてくると思います。

最後まで読んでくださった方ありがとうございます。

参考にしたページ

http://gihyo.jp/admin/serial/01/linux_containers/0002 http://gihyo.jp/admin/serial/01/linux_containers/0016 http://qiita.com/zwirky/items/991f61a231f4e198a320 https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E5%8C%96