Docker を使えばバカみたいに簡単になる。
と誰かが云っていたのを観たが・・・
実際に使ってみると、Dockerの環境依存度は半端ない。
Dockerが起動するのは1プロセスなのでsendmail も httpd も サービスと云えるものは何も動いていない。
プロセスのスプーラーを用意するのが常套手段の様だが・・・それは大甘。どうしても消えないプロセスが出たら、ホストをrebootするしかない。これは怖い。
さらにCentOS7になって service や chkconfig が systemctl になっただけでも、さっぱり動かない。
と云う日記を観た。
しかし、centos:centos7 のイメージを使うと hostname すら動かない。
強いて言えば、LXCの頃は、
何度何度もインストし。絶対大丈夫と確信した手順が手に入った後にスクリプトを作っていたのだろう。
で、あれば対話モードで
RUN sudo yum -y install xxxxxxxxxxxxxxxxxxxxxx
RUN sudo yum -y install xxxxxxxxxxxxxxxxxxxxxx
RUN sudo yum -y install xxxxxxxxxxxxxxxxxxxxxx
…
で、イメージを作り、さらにひな形にして・・・していけば・・・
本当に「バカみたいに簡単になる。」様に思える。
しかし、全てを完璧に作り終え夢のような花畑が出来た後に・・・
「mcrypt 拡張をロードできません。PHP の設定を確認してください」
のようなアップデートが後付けでたった1つ挟まるだけで、夢のような花畑は全滅するのだ。
※なぜかCentOS6.6になっても直ってないっぽい。
それ以上に確実にたまにやって来る『セキュリティ・緊急パッチ』が一番の曲者。
全てがやり直しになる。※検証し直すという意味で・・・
例のBASHのアップデートも大抵は問題ないが使っていた機能を削られてたりしたら・・・(涙
単純にCentOSのインストーラーの後、ひたすらコマンドを撃ち続けるのは
滅多に無いけど、クリティカルなタイミングで下手なアップデートが混ざる確率は非常に高いので
変になっていないかどうか、人の目で確認するためなのだ。
そんな必要が無ければ、皆、長いシェル・スクリプトを流して済んでいる。
仮想化が必要な理由は、
- SSDの寿命は短いが、スピンドルを回しっぱなしのHDDの寿命もあっけない。
- 時間がかかりすぎ単調な手作業になるインストールはヒューマンエラーを引き起こしやすい。
- そもそも用意した手順が正しいとは誰も云えない。※去年は去年。今年は今年。
に尽きるので、Dockerの最大の功績は Core OS をリリースしていることだと思う。
これをホストにして、Git HUB から いけそうな奴を 片っ端から流して、出来が良かったものをコミットして残す。
というのが本来のやり方だろう。
つまり、Dockerが定着するかどうかは、今後のGit HUB の中身次第ということだ。
多分、LXCの二の前だろうと思う。そうそう良いものには巡り会えないのだから。
また、たくさんのWARファイルを飲ませ、サーバー・プロセスの起動時間が長くなってしまったJava系WEBアプリにはほとんどメリットが無いが、aufsのおかげで、ログやjavaキャッシュでゴミだらけになっているサーバーの中を綺麗に消すことができる。大したことではないように思えるが、壊れたキャッシュが挟まったWEBサーバーは再インストールする以外に手段ないのだ。デリゲーターのおかげで組み換えが便利になっている代償としてキャッシュの保存先がサーバーのあちこちに分散していることが多いのだ。ある意味、未来のDockerサーバーが同様な状況になっていないとは断言できない。
そして、出来上がったイメージが想定通りなのかどうか?
テストする手順は、完全に手探りでしかない。
【所感】
Dockerで作ったものをテストする全自動テスターNocker君が欲しい。