第1回 コンテナとは
普段仮想マシンの相手ばかりしているのですが、業務上の理由から、コンテナ回りのソリューションを紹介する必要があり、慌てて勉強を始めた人です。
コンテナの”コ”の字も知りませんので、地道に勉強した道筋をメモとして残しておこうと思います。
ちなみにアメリカでは7割の企業がコンテナ活用、日本ではたったの2割という悲しい現状について綴った記事もみかけました。
過去のIT技術の変遷を見るに、日本でもそんな日がくるかも!
ではさっそく…
そもそもコンテナとは:
・コンテナは、アプリケーションを実行するための実行環境をパッケージ化した技術。
・従来の仮想マシンでは、それごとにリソース(CPU、メモリ、ストレージ)を割り当て、ひとつのサーバ上で異なるOSの実行環境を持つことができる。
しかし、コンテナでは、コンテナエンジンがサーバ上で実行環境を提供する。コンテナはゲストOSを含まず、サーバのホストOS上で直接動作する。
・個々のコンテナにOSを内包する必要がないので、コンテナは軽量で高速な実行が可能であり、サーバのリソースをより効率的に利用することができる。
うーんまったくイメージがわきません。
なにかしらの形で実行環境を立ち上げると、勝手にホストOSのカーネルを使ってくれるので、それ単体でOSを持たなくていいということがざっくり見えてきました。
調べていくとこんな感じの図が多数出てきて、まあこれをみるとなんとなくイメージはつかめそう。やはり一旦仮想マシンをベースに考えてみるとわかりやすいので改めて自分でも書いてみた。
たしかにOSを持たない時点で非常に軽量であるところは想像できる。
でもカーネルを共有するということはパフォーマンス管理なや負荷分散とかがネックになる?
とかあると思うので、いいところだけではなく、その限界を探りながら、仮想マシンとどう使い分けるのかしっかり考えられるところを目指します。
一旦技術のコンセプトは理解できたので、次回は実際にモノを触りながら理解を深めたいと思う。
まとめ:
コンテナのコンセプトは図の通り。
得られるメリットをネットサーフィンしながらめぼしいものを集めたところ、下記の4つは代表的。
① 移植性:
・環境依存性の低減: コンテナは、アプリケーションとその実行に必要なすべての依存関係をパッケージ化するため、異なる環境(開発、テスト、本番など)間での移行が非常にスムーズ。
② 効率性:
・軽量化: コンテナは、ゲストOSを必要とせず、アプリケーションの実行に必要な最小限の環境のみを提供するため、非常に軽量。
・リソースの効率的な利用: 複数のコンテナを1つのホスト上で実行できるため、ハードウェア資源を最大限に活用。
・高速な起動: コンテナは、仮想マシンと比較して非常に高速に起動するため、開発サイクルを加速。
③ スケーラビリティ:
・柔軟なスケーリング: 需要に応じてコンテナの数を簡単に増減させることができ、システムの負荷変動に柔軟に対応可能。
・オートスケーリング: クラウド環境では、自動的にコンテナの数を調整する機能が提供されているため、運用負荷を軽減。
④ 開発と運用の効率化:
・開発環境の一貫性: 開発者と運用担当者が同じ環境で作業できるため、ミスマッチによる問題を減らすことができる。
・CI/CDの統合: コンテナは、継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインと自然に統合でき、ソフトウェアのリリースを自動化できる。
・マイクロサービスアーキテクチャとの親和性: コンテナは、マイクロサービスアーキテクチャの実現に最適な技術であり、システムの複雑性を管理しやすくなる。
次回予告:
なにやらDockerと呼ばれる、誰でも簡単にコンテナを触れるようになるツールがあるみたいなので、それでコンテナ実体験第一歩を踏み出そうと思います。
※Dockerは「コンテナ型仮想化」という技術を用いて、コンテナの上にアプリケーションを構築できるソフトウェアらしい。