レガシーシステムのエンジニアが技術を最新化したいと考えたとき、CNCFが提供するCloud Native Trail Mapにのっとって勉強してみることをおススメします。
Cloud Native Trail Mapは既存のシステムをクラウドネイティブ化するステップなのですが、レガシーシステムのエンジニアの技術修得の道しるべになるのではないかと思い、一つ一つのステップを紹介したいと思います。
CONTAINERIZATION(コンテナ化)
Cloud Native Trail Mapの第一のステップとしてContainerization(コンテナ化)する、と述べられています。ということで我々もこのステップにのっとって、コンテナ化について勉強していきたいと思います。
コンテナとは・・・その前に
最近よく耳にするし、当然のように使われつつある「コンテナ」という技術です。
「コンテナ」とは、アプリケーションの動作環境を仮想的に用意するものです。
例えば、Windowsパソコン上に仮想のMacOSのパソコンを用意し、そのうえでsafariなどのMac特有のアプリケーションを動かしてみるイメージです。
これって、これまでの仮想化のイメージです。
私も、学生時代にWindows上にVMWareという仮想化ソフトをインストールして、そのうえでLinuxというOSをインストールして、Linux上でサーバを作っていました。
でも、これコンテナのイメージとちょっと違います。
では、そもそも「仮想化」とはを見ていきましょう。
仮想化とは
昨今のシステム開発においては、仮想化は必要不可欠な技術となってきています。実は先ほど説明した仮想化のイメージは従来の仮想化技術で、もともとのOSをホストOS、その上で動かすOSをゲストOSと呼んでいて、ゲストOS用にリソースを確保する必要があることから、CPUなどのコンピュータのリソースを使ってしまいます。
一方で、仮想化しないと、一台一台パソコンにOSを入れてアプリケーションを動かす必要があるので、この時点でも非常に便利になったと思います。
しかし、従来の仮想化ですと、先ほど例に挙げました、異なるOSでの仮想化は意味ありますが、通常システム開発においては、OSなどのプラットフォームは同じものを使うと思います。既存のアプリケーションの制約ではない限り、Windowsサーバであれば、Windowsサーバで統一したいと思いますし、LinuxサーバであればLinuxサーバで統一したいと思います。
そうなると、いちいちOSからインストールするとなると手間ですし、OSごとの最小要件を満たすためのリソースを確保しないとなると無駄です。
そこで、登場したのが「コンテナ」となります。
コンテナとは
やっとコンテナです。
コンテナの特徴はカーネルを共有するというところが特徴です。カーネルとはざっくりというとOSのコアになるソフトウェアです。ここではOSと思ってもらった方が理解しやすいかなと思います。
カーネルを語りだすと止まらないので、ここでは詳細な説明は避けておきます。
と、いうことでコンテナはOSを共有する形となります。アプリケーションが使用するリソース(CPU、メモリ、ファイル、プロセス空間)をまとめてコンテナとし、管理していきます。コンテナを動かす環境であるコンテナランタイム上で動かすことができ、従来の仮想化より軽量で動かすことができるのです。
アプリケーションが使用するライブラリ、ミドルウェアの依存関係もコンテナとしてまとめることができますので、非常に扱いやすくなります。
イメージとしては以下のようになります。
ゲストOSをインストールする必要がないことから、軽量で、コンテナエンジンがあれば可搬性も高くなります。
概念は理解できましたでしょうか。実際に動かしながら理解したいということであれば、コンテナを実際作ってみましょう。
コンテナでよく聞くソフトウェアはDockerです。Cloud Native Trail MapでもDockerは一般的に使われているとあり、実際のコンテナを触ってみるにはDockerがおすすめです。
書籍
Dockerであれば、インターネットで探せば優良な情報が公開されていますが、書物であれば一通りのことを体系的に説明がなされているので選択肢として入れてもいいと思います。
私は、初めてDockerを触った時は以下の本で勉強しました。太い本ですが、動かしながら理解するものなので、図が多いので、一日あれば全部見ることができると思います。
他にもありますが、入門としては上の本がおすすめかと思います。