さて、このブログサーバーはdockerを用いて環境をサンドボックス化して運用しているのですが、構成の見直しに着手しました。理由は簡単で、「dockerをdockerらしく使い、その恩恵を受けるため」です。
現状の構成。
VPSの上で1個のdockerを動かし、その中でプロセスマネージャmonitを稼働、その管理下で、apache、php-fpm、mysql、newrelicの管理管理エージェント、syslogd、sshd、cron、fluentdまですべて動かし、管理はSSHでログインする、という構成です。要するに、dockerコンテナをVPS的に使っている状態です。
この構成にはそれなりのメリットがあり、VPS本体のOS環境とは独立して環境ができているのは非常に便利なのですが・・・ちょっとした問題がありました。
ここで稼働しているphpもmysqlも、CentOS6標準のものなので、phpが5.3、mysqlが5.1です。性能改善のため、これらのバージョン・アップをしようと思ったのですが、これだけのサービスが動いていると、パッケージ相互の影響やら何やら、いろいろ考えなくてはいけなくなる、と。動かなくなったら大変なので、結構な手間がかかる。
改めて考えてみた。こういう手間を避けるためのdocker、Immutable Infrastructureなのではないか?と。そうやって考えてみると、今の使い方は、dockerの正しい使い方にはなっていないということです。
そこで、いろいろ調べてみると、宗教論はあるようですが、やはりdockerコンテナはImmutable Infrastructureとして、綺麗に動かすべし、というのが正論のようです、ズバリ言えば、
- プロセスマネージャを動かさない。
- sshでログインしない
- 変動するトランザクションファイルはdockerの外部で管理する
とか、こんな話。言われてみれば確かに、現状dockerで動かしているこの環境、不定期にcommitしているのですが、ログからwordpressのコンテンツまで抱えたイメージサイズは6GBを超え、commitにかかる時間は30分近くになっている。コンテナの再実行をしようとすると、結局この時間がメンテナンス時間となってしまうので、あまり良くない状態です。
そこで、一念発起して、docker複数構成に変更することにしました。
- 現在稼働している各サービスを別コンテナにする
- トランザクションファイル(ログ等)はずべてホストとの共有ディレクトリに書き出す
- 各サービスのミドルアップグレードを、個別に別コンテナを作成して実施できるようにする
- commitのコストを下げる
newrelic関連のモジュール構成がちょっとややこしいのでどうしようか考えていますが、まずは、明らかに独立できるmysqlから、分離してみようと、構成変更に着手しました。
詳細はつづく・・・いろいろトライ&エラーでやってますので・・・
コメント