LoginSignup
51
51

More than 5 years have passed since last update.

プログラマのためのDocker超入門 06.Dockerのよさ(後編)

Posted at

 
docker.png

前提

インフラ?やっといたほうがいいかもなぁな方への記事です。

過去記事であがった未解決な課題

前回 05.Dockerのよさ(中編)まで解決しなかった残課題です。
あと少し・・

第2回の構成管理では

  • OSによっては構成管理が期待通りに動かない

第3回のクラウドでは

  • サーバスペックは複数種類からの選択で、それでは過剰もしくは不足
  • ポータビリティが下がるベンダーロックインの心配
  • サーバ単位でDisposable Componentsするのは時間的金銭的に非効率

Dockerとはなにか

引き続き、これの 6以降の詳細をみていきましょう。

6.1 CPUやメモリに上限を設け、リソース管理できる

サービスが、同じサーバに同居している別のサービスによって
CPU、メモリが食い荒らされて落ちたら悲しくなりますよね。

そこで Dockerです。Dockerコンテナは、起動時に、中で動く
プロセスが使える CPUやメモリに制約をかけることができます。

  • メモリ、仮想メモリそれぞれの利用上限を指定1
  • ちなみに内部で Out of Memoryエラーが起こるとプロセスは killされます2
  • CPU利用時間をコンテナ同士、相対値で指定3
  • または、一定時間あたりの割り当て時間として利用上限を指定4

設定はとても簡単で、

リスト
$ docker run -it -m 300M ubuntu:14.04 /bin/bash
$ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash

-m-c--cpu-periodなどのオプションをつけてコンテナを起動するだけです。
リストの下の例だと、CPUコアが 1つだとして、50msごとにその 50%まで使えます。

6.2 コンテナをどこで起動するか問題

もしすべてのアプリケーションで必要な CPUやメモリが把握できたなら
6.1の機能を使うことでお互いを安全に稼働させることができますが、
同時にもうひとつ Dockerならではのよさが生まれます。

・サーバスペックは複数種類からの選択で、それでは過剰もしくは不足

今の時代スペックが足りないことまずないですし、過剰なケースも少ないですが
不測の事態に備えて少し余力のある構成にすることはあると思います。

そんな時、とはいえ、リソースは無駄なく効率的に使いたいですよね!!

Dockerを Apache MesosAmazon ECSなどと組み合わせれば
クラスタ5内からリソースに余力があるサーバを見つけ出し、
そこでコンテナを起動する、といったことが実現できます!
便利そうですね :laughing:

加えて、

・サーバ単位でDisposable Componentsするのは時間的金銭的に非効率

Dockerは起動も停止も一瞬なうえ、同じサーバ上でバージョン違いの
アプリケーションを同時に起動するといったことも簡単にできるため
Disposable Componentsにはぴったりです!

7. 大手OS、クラウド各社がサポートを表明

Microsoftなどの サーバOS開発会社、AWSや Googleなどクラウド各社が
Dockerそのものや、周辺の技術スタックをサポートする表明をしています。

クラウド各社で Dockerを動かすための機能が追加されていくほど

・ポータビリティが下がるベンダーロックインの心配

がなくなります。
なぜなら、自分のアプリを Dockerイメージにさえできれば
どこのクラウドを使っても同じ挙動をしてくれることが保証されるためです。

また、

・OSによっては構成管理が期待通りに動かない

構成管理ツールそのものはその実行が OSによって制約を受けましたが、
いったん Dockerイメージにしてしまえば、ほとんどの新しい OSで
コンテナとしてそれを動かすことができるようになっています。

VitualBoxがあればもちろん Windowsでも動きますし
開発環境として、開発者間でそれが共有できれば最高ですね!

今回のまとめ

前編中編に続いて長くなりましたが、最初に提示した
仮想化構成管理ツールクラウドのもつ課題を随分解決できました。

Dockerを使えば、開発やそのリリースがもっと楽になるかもしれません。
本番環境での利用事例も、最近は日本でも出始めたように思います。
ぜひみなさんも実際に使い始めてみてください!

次回からは、実際にどう使っているかをご紹介しようと思います。

 


  1. 仮想メモリには上限を設けない、という設定も可能です 

  2. デフォルト動作。オフにすることもできますが、メモリ上限も設定していない場合、ホストのメモリを使い切り、ホスト側のプロセスに影響がでる可能性があります。 

  3. Aが 1024、B・Cが 512なら、Aは 50%、B・Cは 25%の CPU時間を消費します 

  4. CPU CFSの挙動は、ここで確認できます 

  5. 複数のコンピュータをひとまとまりにしたもの 

51
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
51