ページ

2016年2月14日日曜日

Dockerと付き合う為の虎の巻 その01

「Dockerと付き合う為の虎の巻 その01 」です。


 〇 Dockerのバージョンは激しく上がる為、常に最新の情報に気を配る必要がある

 現在のDockerはとにかく激しく更新されます。具体的には以下のようなペースで更新が行われている状態です。

 *v1.10.1 - 2016/02/11
 *v1.10.0 - 2016/02/04
 *v1.9.1   - 2015/11/21
 *v1.9.0   - 2015/11/04
 *v1.8.3   - 2015/10/13
 *v1.8.2   - 2015/09/11
 *v1.8.1   - 2015/08/13
 *v1.8.0   - 2015/08/12
 *v1.7.1   - 2015/07/15
 *v1.7.0   - 2015/06/19

 0.1単位のバージョンアップだけ抜き出しても以下のような感じになります。

 *v1.10.0 - 2016/02/04
 *v1.9.0   - 2015/11/04
 *v1.8.0   - 2015/08/12
 *v1.7.0   - 2015/06/19

 大体2ヶ月~3ヶ月に一度0.1単位でバージョンが上がっています。そしてそれなりに大きな機能追加や変更等が実際に行われているようでして、昨日出来なかった事が今日はもう出来るようになっているなんて事は日常茶飯事のようです。(逆に昨日までの常識が今日にはLegacyとして扱われたりする事もあります)

 好意的に解釈すれば、今かなり力を入れている時期であり、最新の傾向や、需要のあるものがどんどん取り入れらて行く状態にあるとも言えます。過去にDockerを使用して「アレ?これダメじゃない?」となった方も、現状では問題無い可能性があるとも言えますので、もう一度見直してみる事をお勧めします。 

 否定的に解釈するならば、こんなにバージョンアップが激しいと本番では使い辛いといった側面を持っています。なお、Dockerの場合、ver1.9系 ver1.10系等と系統付けて並行して更新されるような事は基本的にないようで、v1.9 → v1.10 となった時点からv1.9等過去のバージョンは更新せずに捨てられていると思って良さそうです。機能追加等だけであれば「ver1.9系を採用して使用して行く」等の運用的な方針でどうにかなる事もあるかと思われるのですが、それも難しいのかもしれません。

 ここはそういうものだと割り切って付き合って行くしかないかもしれません。しかし、ver1.9辺りからそうもいかない事情も少し出てきてしまいました。(次項にて触れます)



〇Dockerは使用するOSを選定する必要がある

 ここでは主にLinux系だけ見てみます。Linux系のOSとしてはDebian、Ubuntu(Debian系)、CentOS(RHEL系)、CoreOS他、各種選択肢があるのですが、実際の所いくつかの大きな違いが出るポイントが存在しており、特にファイルシステムカーネルバージョンについては気を配る必要がありそうです。

 単刀直入に言うと、Ver1.9.0以降に取り入れられた機能のうち、overlayネットワークはカーネルバージョン3.16以上を要求し、overlayfsストレージではカーネルバージョン3.18以上(既知問題あり)が必要という事になっています。

 この二つのoverlay機能はDocker環境をかなり大きく改善する可能性を秘めた機能追加なのですが、残念ながらカーネルのバージョンをあまり上げてこないRHEL系ではカーネルとして3.10系を使用している為、動作可能と言えるかどうかに疑問が残るという状態にあります。

 実際にCentOS等でyum(EPELですが)でdockerを入れる場合、大体docker公式の最新バージョンより1ヶ月~2ヶ月位遅れ程度で(0.1バージョン遅れで?)投入されているという、RHEL系としては(EPELなのでFedoraかもですが)なかなか挑戦的なバージョン更新がおこなわれていたのですが、ちょうどカーネルがおいつかなくなった、Dockerのver1.9系以上のバージョンについては投入されなくなってしまいました。仮にRHEL8の投入迄はカーネルのバージョンが変わらないとするならば、DockerのバージョンにおいてもRHEL8の投入迄は現状のver1.8系で維持の可能性があります

 つまり、Dockerを最新の環境で使用したい場合は、RHEL系が選択肢から外れるという事になります。ただし、Dockerのver1.9系の投入自体が比較的最近の出来事ですので、RHEL系陣営がなにかしらの手を打つ可能性もありますので、現状ではどのようになるかは分かりません。

 なお、AWS上に存在するAmazonLinuxの場合、RHEL系の一種とも言えるのですが、こちらはカーネルのバージョンは既に4系となっており、yumで入るdockerもver1.9系となっておりますので、AWS上で稼働させる場合はAmazonLinuxを使うというのも手かと考えられます。



〇Dockerで使用するファイルシステムを選定する必要がある

 Dockerはコンテナのイメージや、起動したコンテナが使用するストレー ジの領域等で、データの差分管理のような事を行っています。この差分管理に起因するものなのか、Dockerでストレージを使用するような操作(起動、イメージのpull、イメージの削除etc...)を行う際には非常に動作が重くなり処理に時間がかかり過ぎてタイムアウトを起こしてしまったりする他、Dockerそのものが不調になる事もあるようです。 (「アレ?これダメじゃない?」となってDockerを早めに見限った人の理由のNo.1がコレと予想)

 この現象は主にデフォルトで使用されるストレージ関連の機構であるDevicemapperに大きく起因しているようですので、まず最初にストレージ関連の整備を検討した方が良さそうです。具体的にはbtrfs、overlayfs、aufs 等を使用する事によりこれらの症状は劇的に改善する可能性があります。

 ただし、前項でありましたように、overlayfsはRHEL系ではカーネルのバージョンが足りていませんし、実質ext4以外のファイルシステムと組み合わせてoverlayfsを使用する事が出来ない等のクセがあります。また、overlayfsはストレージ関連で一番新しい取り組みの部分ですので信頼性について若干疑問が残っている等の問題もあます。

 aufsはそもそもRHEL系ではまともに使用されている例が無いのでRHEL以外の環境に限定されるかと考えられます。(※普段RHEL系がメインな事もあり、あまり確認出来ていませんです)

 btrfsもどちらかというと新しい仕組みであり、RHEL7等でもテクノロジープレビューとの位置付けにあるようです。ただし、個人的な使用感的には快適に動作していますので、状況次第でベターな選択肢となりえるかもしれません。(データディレクトリの削除を行う等btrfs領域を直接触る際にはbtrfs的サブボリュームの取り扱い方法等を知っておく必要はあります)

 「あれ?結局現状で使えるまともなファイルシステムの選択肢ってないの?」と思ったかもしれません。そのような場合の為にオープンソース的な空気とかを読みつつ華麗に身をかわす訓練等をしておく事が重要かもしれません。(=゚ω゚) …

0 件のコメント:

コメントを投稿