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

2020年3月9日

テクノロジー

eyecatch 「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のコンテナ内から別のコンテナへのアクセスを、サーバー間アクセスではない形で、コマンド実行できるような仕様になれば、も少し使い勝手の良い環境構築ができるのだが、 もしかしたら、裏技みたいな使い方があるのかもしれないので、もうしばらく調べてみようと思う。 こうした環境構築に興味がある人がいれば、是非悩みや課題を共有したり、情報をいただきたいと思います。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ