「Docker」とかけまして、
「忘年会の部長の一発芸」とときます。
そこココロは・・・
面白い、仮装(仮想)技術です。
毎朝、謎掛けをかんがえて、頭の体操をしている、ユゲタです。
web開発にすっかり欠かせなくなった、Dockerですが、自分の使い方で、どうしても、コンテナ技術を活かせないことがあったので、
根本的な思考も含めて、考えておきたいと思い、ブログに書いておきます。
本番環境でDockerを使うべきか・・・?
デプロイ先のサーバーでも、Dockerを導入することで、開発環境や、テスト、ステージ、本番などの細かなバージョン差異をなくすことができて、
これまでバックエンドエンジニアを悩ませてきた、サーバーソフトウェアのバージョン違いによる不具合などを解消することができます。
でも、今現在動いている、Dockerを導入して環境入れ替えをするのが結構難しい場合もあり、なかなか重い腰が上がらないというケースもすくなくありません。
また、サーバーでの負荷に関しても、Dockerを導入することで、ノーマル状態よりも落ちてしまうことが危惧されます。
確かにコンテナ技術で、極限まで負荷を抑えられることは認識できているんですが、負荷が上がったときの障害原因の特定は、非常に難しくなることも同時に想像できます。
どいって悩んでいても仕方がないので、実際にどこかのサーバーに搭載してみて、自分で確認するしかなさそうです。
コンテナ構成の悩み
dockerのコンテナは、理想的な構成として、サーバーモジュール毎に立ち上げて、1つの処理を完結できるようにして、それらを連結して1つのサービスを組み上げていくという、
マイクロシステムでの構成がいいというのはわかるのですが、それぞれのコンテナがサーバー別の状態になるので、以下のようなケースでの動作が難しくなります。
phpからexec命令で、任意モジュールのshellコマンドを実行する時
例えば、ffmpegをインストールしているサーバーでphpからexecコマンドを叩くような連携システムを組んだ時に、
通常のサーバー構成なら、そのままで利用できますが、dockerのようなモジュール別のコンテナ構成だと、別サーバーにアクセスして
コマンドを叩かないといけないので、ひと手間かかる上、結構面倒くさい作業になります。
要するにモジュール間での組み合わせで行う処理に関しては、同じコンテナ内に同居しておかなければいけないため、
nodejsなどの独立していると思われるモジュールも、ブラウザサイドのjavascriptと、phpなどとの連携をする場合などは、結果的にコンテナを分けられないという事が意外に多く、
linuxOSなどの場合は、便利なモジュールも多いため、shellスクリプトとの連携も激しく行うので、
結果的に、1サーバーに全てのモジュールをインストールして使うというコンテナ状態になってしまいました。
開発環境と本番環境との差分
Docker構成にしている場合、開発環境でコンテナを分割して使っていると、本番環境を同じにしておかなければ、モジュール連携をする際に環境誤差が発生してしまいます。
コンテナが1つの構成にしていれば、さほど気にせず、どんなサーバーに対してもデプロイできるのですが、なんとも悩ましいのが現段階の悩みです。
dockerのコンテナ内から別のコンテナへのアクセスを、サーバー間アクセスではない形で、コマンド実行できるような仕様になれば、も少し使い勝手の良い環境構築ができるのだが、
もしかしたら、裏技みたいな使い方があるのかもしれないので、もうしばらく調べてみようと思う。
こうした環境構築に興味がある人がいれば、是非悩みや課題を共有したり、情報をいただきたいと思います。
0 件のコメント:
コメントを投稿