IT・資格

【初心者向け・図解】コンテナとは?現役エンジニアがわかりやすく解説

※この記事にはプロモーションが含まれています。
スポンサーリンク

IT初心者
IT初心者

コンテナって最近よく聞くけど、なかなか理解できないなぁ..

おつまみ
おつまみ

そのお悩みを解決します!

エンジニアの皆さん。
日々の業務、そして学習お疲れ様です!学習は順調に進んでいますか?

最近耳にしない日はないといっても過言ではない「コンテナ」。
自分の言葉で「コンテナ」の仕組みを説明することはできますか?


……。



………………。



説明できましたでしょうか?

本記事では「コンテナ」について、初心者にわかりやすいよう図解付きで解説していきます。
結論、こちらがコンテナの仕組みとイメージです。

今はまだ分からなくても全然大丈夫です!
本記事を読んだ後に「コンテナってこういうことだなぁ」って理解して頂ければ嬉しいです。

それではどうぞ!!

本記事の対象者
  • コンテナって何?という疑問を持っている方
  • なんとなくコンテナを分かったつもりでいるけど、改めて復習したい方
本記事で解説していないこと
  • コンテナの実行方法(コマンド例)
  • Dockerの仕組み

そもそもコンテナって何?

コンテナとはアプリケーションとその実行環境を1つにまとめあげる技術のことです。

動作に必要なホストOSの中核(=カーネル)をコンテナエンジンを通して、コンテナ同士が共有できるようにすることで、ハードウェアのリソースと切り離した仮想環境を作り出すことができます。

 IT初心者
IT初心者

…何を言っているか良く分かりません。

コンテナを初めて耳にする方は、いきなり説明されても理解できないですよね。
そこでまずは私たちの日常生活にある物流業界でのコンテナについて、知りましょう!

物流業界でのコンテナとは

物流業界でのコンテナは輸送に使われる箱のことです。
このように貨物船に積まれたコンテナを見たことある方もいるのではないでしょうか?

もしこのコンテナがなかったらどうなるでしょう?

IT初心者
IT初心者

貨物の大きさや形がバラバラだから、積み上げ・積み下ろし作業が大変そう。

確かに大変そうですよね。
そこでコンテナが誕生しました

コンテナに貨物が格納されていることで、積み上げ、積み下ろし作業が統一化され、コンテナ毎に別々の場所に輸送をすることが可能になりました。

このように物流業界でのコンテナは貨物の規格を統一化し、持ち運びやすくできるようしました

物理基盤・仮想化技術・コンテナの違い

仮想化技術のコンテナも同じように規格を統一化し、持ち運びやすくするという理由で生まれました。物流業界でのコンテナと同様に「持ち運びできる入れ物」としてアプリの実行環境をひとまとめにしています。

ここで物理基盤から仮想化技術(ホストOS型)、そしてコンテナとどのような特徴があるか見てみましょう。

1. 物理基盤

物理基盤は最もレガシーなシステム構成です。

物理サーバの上に直接LinuxやWindowsといったOSそしてミドルウェア、アプリケーションをインストールするのが一般的です。

土地や建物全てを所有する一軒家に例えると、わかりやすいですね。

物理基盤にはこのようなメリットとデメリットがあります。

メリット
  • 物理サーバを1台丸ごと使用するため、性能面は優れている。
  • 障害発生時の切り分けが比較的容易である。
デメリット
  • 使用していないリソースに無駄が多い。
  • 各層に依存する。

物理基盤での1番のデメリットはCPUやメモリ等のリソースを集約しないことで無駄が生まれてしまうことです。このデメリットを解消するために、仮想化技術が登場しました。

2. 仮想化技術

仮想化技術は仮想的に1台の仮想マシンを実行できるようにするシステム構成です。

今回のイラストはホストOS型の仮想化を載せていますが、仮想化技術にはこちらの2種類があります。

  1. ホストOS型
  2. ハイパーバイザー型(ベアメタル型)


各々の特徴について、詳細を知りたい方はこちらをの記事が分かりやすかったので、参考にしてみて下さい。
仮想化技術について解説 ホスト・ハイパーバイザー・コンテナの違いとは?

おつまみ
おつまみ

ちなみにAWSのサービスであるEC2は2のハイパーバイザー型になっているよ!

仮想化技術はアパートを例にあげるとわかりやすいですね。
土地や建物は共有してますが、各部屋毎に個別で契約が発生しているイメージです。

仮想化技術にはこのようなメリットとデメリットがあります。

メリット
  • 1台の物理サーバから複数の仮想マシンを起動するため、低コストかつリソースを効率的に活用できる。
  • 各仮想マシンは完全に別々の動作をするため、ゲストOSやミドルウェア、アプリケーション等を個別に動作させることが出来る。
デメリット
  • ゲストOSやインストール設定等は物理サーバ同様、必要である。
  • 仮想マシン毎にゲストOSが動作するため、メモリ消費の無駄が多い。

仮想マシンは各々でゲストOSを起動する必要があり、メモリ消費に無駄が生まれてしまっていました。

エンジニア
エンジニア

同じゲストOSでもいいのになぁ。

このような声があり、コンテナが登場しました。

3. コンテナ

コンテナはアプリケーションとその実行環境を1つにまとめあげるようにするシステム構成です。
コンテナ内には、ゲストOSが含まれておらず、このようなものが含まれています。

  • アプリケーションの実行に必要な設定ファイル
  • ライブラリと呼ばれるプログラムの部品(ソフトウェア)
  • ランタイムと呼ばれるプログラムの動作に必要なソフトウェア

これらのまとまりをイメージと呼び、このイメージからコンテナが各々独立して実行されます。

そのため、1つのホストOS上で他アプリケーションとの競合を意識することなくアプリケーションを実行できます

シェアハウスを例にあげるとわかりやすいですね。
土地や建物だけでなく、生活に必要な家電もみんなで共有しているイメージです。

コンテナのメリット・デメリットは後ほど詳しく解説しますね。

これまで紹介した物理基盤・仮想サーバ・コンテナを比較するとこのようになります。

物理基盤仮想化技術
(ホストOS型・ハイパーバイザー型)
コンテナ
性能◎ 最も速い△ I/Oが遅い◯ 速い
OS△ 1つだけ◎ 複数種類を混在可能◯ カーネルは1つだけ、ディストリビューションは混在可能
リソースの使用△ システムで占有、リソースの無駄が多い△ メモリの無駄が多い◎ カーネルが1つで効率が良い
柔軟性△ 硬直的◎ 非常に柔軟◯ 単機能向け
ユースケース高速なDB等従来型の業務システム同一のものを大量に配備する必要があるもの(Webサービスのフロントエンド等)
出典:「コンテナ」との付き合い方 | SmartCloudコラム

この表からも分かるように、コンテナが優れていることが分かりますね。

コンテナのメリット

コンテナにはこのようなメリットがあります。

コンテナのメリット
  1. 持ち運びがしやすい
  2. 起動・処理を高速化できる
  3. リリースサイクルを高速化できる
  4. バックアップへの切替を容易にできる

1. 持ち運びがしやすい

コンテナは持ち運びがしやすいです。

なぜなら、ハードウェアやホストOSがコンテナ内に含まれていないためです。

先ほどお伝えしように、コンテナには、アプリケーションの実行に必要な設定ファイルやライブラリ、ランタイムのみが格納されています。
そのため、他サーバに移してもすぐにコンテナを実行することが出来ます。

おつまみ
おつまみ

物流業界のコンテナと同じで持ち運びがしやすいんだね!

2. 起動・処理を高速化できる

コンテナは起動・処理を高速化できます。

なぜなら、コンテナはゲストOSがなく、ホストOSのカーネルを共有しているためです。
これにより素早くアプリケーションを起動できます。

ホストOS型の仮想化技術と比較してみるとわかりやすいですね。
ホストOS型の仮想化技術はホストOSに加えゲストOSも起動する必要があるため、アプリケーションの起動に時間がかかってしまいます。
また仮想マシンはゲストOSがある分、CPUやメモリといったリソースの無駄も多くなります。

しかし、コンテナはゲストOSがないため、CPUやメモリを無駄に消費することがありません

そのため、起動・処理を高速化させることができます。

3. リリースサイクルを高速化できる

コンテナはリリースサイクルを高速化できます。

これは①でお話ししたように持ち運びがしやすいためです。

そのため、リリースに伴う各環境への反映が容易に行えます。
顧客への急速なシステム提供が求められる現代でコンテナが広く普及されている意味が分かりますね!

4. バックアップへの切替を容易にできる

コンテナはバックアップへの切替を容易にできます。

これは1つのイメージを作っておけば、同じコンテナを複数起動することができるからです。
そのため1つのコンテナで障害が発生した場合、すぐに代替環境へ切り替えることができます。

おつまみ
おつまみ

仮想マシンよりも容易に切り替えができるよ!

コンテナのデメリット

ここまでコンテナのメリットをお伝えしてきましたが、勿論メリットばかりではありません。
次にコンテナのデメリットについてもお伝えします。

コンテナのデメリット
  1. ホストOSへの依存が発生する
  2. 学習コストが高い

1. ホストOSへの依存が発生する

コンテナは土台となるホストOS以外のOSとの相性が悪くなることがあります。

つまりコンテナを他環境に移そうとした場合、ホストOSが異なると上手く動作しないことがあるとのことです。

これはコンテナ起動時に、ホストOSに対してマッピングを行うことでコンテナとホストOSを紐づけているためです。
そのため、土台となるホストOS以外のOSではコンテナとして起動することができません

おつまみつま
おつまみつま

つまりLinux 用のカーネルを利用しているコンテナでは、WindowsやUNIXなどのカーネルに互換性がないOS 用のプロセスは動かせないんだね!

再現できるのは同じ Linux 系(CentOS・Ubuntu)など、ホスト OS と同系列でカーネルに互換性のある OS に限ります。

そのため、コンテナを別のOSに移行する場合は、作業に手間がかかってしまいます。

2. 学習コストが高い

コンテナは学習コストが高いというデメリットがあります。

なぜなら、覚えるコマンド操作が多く、どうしても学習時間がかかってしまうためです。

また、複数のコンテナを管理するツール(コンテナオーケストレーションツール)であるKubernetes(クバネティス)は簡単に習得できるようなものではないため難しいです。

おつまみ
おつまみ

コンテナを学ぶ時は意を決して臨もう..!

代表的なコンテナサービス

このような特性を持ったコンテナには、様々なサービスがあります。
代表的なコンテナサービスはこちらです。

Docker

Dockerは最も有名なコンテナなサービスです。
マルチOSに対応したオープンソースのコンテナサービスを提供しています。

他のコンテナサービスよりも環境構築の難易度が低く、OS内でいくつものコンテナを稼働させてもオーバーヘッドのリスクを最小限に保ちながら快適な稼働が実現することができます。

Dockerについてはこちらの記事で解説しているので、よければ参考にしてみて下さい!

Kubernetes

KubernetesはDockerに匹敵するコンテナサービスです。
Dockerに比べ、コンテナの管理面に強みを持っています。

そのため、Dockerで起動させたコンテナをKubernetesで管理するといったことを実現します。

DockerとKubernetesの違いについてはこちらの記事が分かりやすかったので、良ければ参考にしてみて下さい。
Kubernetesとは 概要や、dockerとの違いを5分で入門

まとめ

今回はコンテナの仕組みやそのメリット・デメリットについてご紹介しました。

「コンテナってこういうことなんだなぁ」って理解できましたでしょうか?

コンテナはクラウドで利用されることを前提にした「クラウドネイティブ」なシステムを実現するために、今後更に活用が進むことになります。

そのため、エンジニアとして避けて通ることができない技術です!

少し自信がついたIT初心者
少し自信がついたIT初心者

もっとコンテナについて学びたい!

こう思った方はUdemyの動画講座で学習を始めましょう!
こちらの記事で初心者におすすめの講座をご紹介しているので、よければ参考にしてみて下さい!

おつまみ
おつまみ

私もまだまだコンテナ勉強中です!一緒にがんばりましょう!!


それでは、これからも一緒に学んで、自己価値を高めていきましょう〜!

最後まで、お読み頂きありがとうございました!

参考文献

こちらの記事を作成するにあたり、たくさんのブログ記事を参考にさせて頂きました。
良ければ参考にしてみて下さい!

コメント

タイトルとURLをコピーしました