オレのDockerの使い方は間違っている

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

こんにちわ。
 

「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のコンテナ内から別のコンテナへのアクセスを、サーバー間アクセスではない形で、コマンド実行できるような仕様になれば、
も少し使い勝手の良い環境構築ができるのだが、
 

もしかしたら、裏技みたいな使い方があるのかもしれないので、もうしばらく調べてみようと思う。
 

こうした環境構築に興味がある人がいれば、是非悩みや課題を共有したり、情報をいただきたいと思います。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です