IT

コンテナとは?仮想サーバーとの違いやLXCやDocker、Kubernetesについて

  • コンテナとは
  • コンテナと仮想サーバーの違い
  • システムコンテナとアプリケーションコンテナ
  • 代表的なコンテナ技術
  • LXC
  • Docker
  • Kubernetes

コンテナとは

コンテナとは、プログラム実行空間を隔離する技術及び隔離された領域のことです。

コンテナ型仮想化とは、サーバー仮想化のようにハードウェアをソフトウェアで再現するのではなく、ホストのリソースを隔離して、そのうえでソフトウェアを動作させる技術のことです。

コンテナと仮想サーバーの違い

サーバー仮想化

サーバー仮想化は、CPUやメモリ等のハードウェアをソフトウェアで実現する技術です。

ハードウェアを仮想化する為、ゲストOSの自由度は高くなります。

しかしながら、高性能なサーバー機器が必要であり、環境構築に時間がかかる等のデメリットもあります。

コンテナ

一方、コンテナは、OSやアプリケーションのプロセスを隔離して、コンテナとして実行します。

ゲストOSが不要のため軽量であり、アプリケーションを利用できる環境を早く、安全に用意できます。

また、アプリケーションとその実行に必要なものがあらかじめコンテナ内にパッケージ化されているため、ミドルウェアやOSライブラリを個別に用意する必要がなく、開発環境から本番環境への移行が早く行え、環境によるバグが発生しない等のメリットがあります。

システムコンテナとアプリケーションコンテナ

システムコンテナ

システムコンテナとは、OS全体をコンテナ化するもので、コンテナ技術を用いてサーバー仮想化に近いことを実現します。

代表的なシステムコンテナには、LXCがあります。

アプリケーションコンテナ

アプリケーションコンテナとは、OS全体ではなく、特定のアプリケーションプログラムのプロセスをコンテナとして実行するものです。

代表的なアプリケーションコンテナは、Dockerです。

現代のアプリケーションプログラムは、数多くのアプリケーションプログラムとプログラムライブラリを組み合わせて実装される為、システムの構成要素間の結びつきが強く、互いの依存関係や関連性が強くなります。

しかし、アプリケーションコンテナを活用し、システムの構成要素丸ごと一式を取り扱うことで、他の環境に移植して動作させることが容易になります。

代表的なコンテナ技術

LXC

LXC(Linux Containers)とは、コンテナ型仮想化技術と呼ばれ、OS上に別の隔離された環境を構築する技術のことです。

Linuxカーネルにパッチを当てたりすることなく、カーネルに実装されているコンテナに関係する機能をフルに活用して簡単にコンテナの操作が行える実装です。

Docker

Dockerとは、Docker社が開発したコンテナを用いた仮想環境を作成・配布・実行するための技術のことです。

DockerコンテナはホストOS上にゲストOSなしで独立した仮想環境として構築されます。

Kubernetes

Kubernetes とは、コンテナの運用管理と自動化を行うために設計されたオープンソースソフトウェアです。

Kubernetesは、Docker等のコンテナ単体では難しい、コンテナの管理や別サーバーとの連携などを管理するソフトウェアです。