コンテナ時代なのにデプロイはなぜこんなに難しいのか?
コンテナはWebアプリケーションを開発・管理するのにとても優れたフォーマットだ
が、それに比べてコンテナのデプロイ(=リモートマシンでコンテナを立ち上げること)は信じられないくらい難しい
なぜ難しいのか?
つい最近まで(というか現在進行系で)Webアプリケーションのデプロイは、たいてい自動化されたSSHを経由して行われていた
僕が以前在籍していた大きな会社でも、Webの管理画面からデプロイボタンを押すとデプロイエージェントがグループ化されたVMにSSHで入り、更新&再起動スクリプトを実行するというものだった
Webアプリケーションの起動がコマンドもしくはシェルスクリプト経由で行われるのが普通なのであるから、リモートシェルを扱うのに便利なSSHを使うのは当然な気はする
実際、SSHでのデプロイは自動化してしまえばそれほど複雑な作業にはならない
シェル内でのデプロイ自体の複雑性は別問題
大抵の場合Webアプリケーションのデプロイ作業は、
(ロードバランサーから外す)
プロセスを落とす
ソースコード、もしくはバイナリを更新する
再起動する
(ロードバランサーに入れる)
というようなプロセスを経る
このプロセスは実は開発中にやっていることと同じである
もちろん、インタープリタやJIT言語の特性でもあるが
プログラムがテキストファイルで管理されている以上、Webアプリケーションの更新はこういった過程を経ざるを得ないし、プログラマはそれを数千、数万回と行っているので慣れている
Webアプリケーションがスケールアウトという概念を得る前は、一つのVMにSSHにログインしてこうした作業をするのが普通であった
スケールしたあとも、自動化されたその作業がデプロイと呼ばれた