コンテナを使ったインフラ構築は最近では当たり前になりつつあります。
ECSなどDockerコンテナを使ったアプリケーションサーバの構築から今ではGKE、EKS、AKSといったマネージドなKubernetesを簡単に扱えるようになってきています。
ではなぜここまでコンテナやKubernetesがトレンドとなり、今の主流になってきたのでしょうか?
今回はこういった内容について深掘りしたいと思います。
コンテナとインスタンス(仮想サーバ)の違い
コンテナと仮想サーバの仕組み
コンテナをイメージ化したものを起動するのと、インスタンス(サーバを仮想化したもの)を起動するのでは明らかに前者の方がオーバーヘッドが少なく高速に起動します。
その理由はコンテナは1つのOSの上で複数個のコンテナ(アプリケーション)を動かすことができますが、インスタンスの場合はインスタンスごとにOSが必要になるためです。
これが起動時のオーバーヘッドとなりコンテナの方が起動が早くなる理由です。これらのコンテナを管理するソフトウェアのことをDockerといいます。
>>参考:【図解】コレ1枚でわかるサーバー仮想化とコンテナの違い
コンテナはDockerfileでどこでも同じ環境を瞬時に作れる
コンテナにはあらかじめ必要なものを含んだイメージファイルをDockerfileから作成します。このイメージはDockerのある環境であればどこでも全く同じものを起動させることができます。
このDockerfileは軽量で、管理が簡単なためデベロッパーの間で簡単に共有することができます。
仮想サーバにも同様の機能はありますが、実行環境が変わってしまうとハードウェアやOSにより違いで出てしまいます。
Kubernetesが解決するもの
Kubernetesはコンテナを扱いやすくしたオーケストレーションツール(コンテナを指揮するツール)になります。
クラスタ内のコンテナ間通信でNATを必要としない
複数サーバの上で起動するコンテナでアプリケーションを構築する場合、別サーバのOSに対する通信にはNATが必要になります。Kubernetesはこの手間を軽減してくれます。
NATを必要としない技術にはFlannelやCalicoといった技術が使われているみたいですが、ここら辺はまだ理解できていないです。
マイクロサービス化しやすい
Kubernetesクラスタ内に複数のコンテナを作りやすくなり、それぞの通信が簡単に行えることでマイクロサービス化しやすくなります。
これは機能別にコンテナをわけ、複数のコンテナのグループが相互に通信し合ってバックエンドを構築するものです。このメリットは一つのコンテナグループで全ての機能を提供している場合、どこかに問題があれば全てのコンテナが使えなくなことを防ぎます。
機能別にコンテナを分けておくことで、Aという機能は今はダウンしているが、Bと言う機能が使えるというシステムを構築することができます。
自己修復など他にもたくさんいいことがある
Kubernetesには自己修復機能など多くの便利機能があり、確実に今後のバックエンドの主流になります。
現時点でDockerやコンテナを触ったことがない人はすぐにでも触ってみてい学習を始めることをお勧めします!
Kubernetesは自分もわからないことだらけなので今後も学習を頑張りたいと思います。本日は以上です。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す