LinuxC入門|コンテナ技術の概要と基本的な仕組み

これまでに仮想マシンを使ったLinux環境について学んできた方は、
「OSを丸ごと用意して、その上でアプリケーションを動かす」というイメージを持っていると思います。
コンテナ技術は、そうした仮想マシンとは少し考え方が違う、
もっと軽くて、もっと手軽な仮想化の仕組みです。

ここでは「コンテナ技術の概要と基本的な仕組み」をテーマに、
コンテナとは何か、仮想マシンと何が違うのか、
そしてLinux上でどのように使われているのかを、やさしく説明していきます。
LinuC 101試験でもよく登場する分野なので、全体像をつかむことを目標に読み進めてみてください。

これまで紹介してきた仮想化環境では、
まず仮想マシンを作成し、その中にOSをインストールしてから利用する、という流れが一般的でした。
一方、コンテナ技術では、ホストOSの上で
「コンテナ」という単位の仮想環境を直接動かします。

仮想化方式特徴
仮想マシンOSごと仮想化する
コンテナホストOS上のプロセスとして動作

コンテナは、ホストOS上ではひとつのプロセスとして動作します。
そのため、仮想マシンと比べてオーバーヘッドが小さく、
CPUやメモリの消費も少なく済みます。
「軽量で起動が速い」という点が、コンテナ技術の大きな魅力です。

コンテナが軽量に動作できる理由のひとつが、
ホストOSと同じカーネルを利用しているという点です。
仮想マシンのように、コンテナごとに別のカーネルを持つわけではありません。

項目仮想マシンコンテナ
カーネル仮想マシンごとに存在ホストOSと共有
起動時間比較的長い非常に短い
リソース消費大きめ小さい

ただし、カーネルを共有しているからといって、
コンテナ同士が混ざってしまうわけではありません。
ファイルシステムや環境変数、プロセス空間は、
コンテナごとにしっかり分離されています。

コンテナ環境では、
ホストOS上に同じ名前・同じIDのプロセスが存在していても問題ありません。
これは、コンテナごとにプロセス空間やユーザーID空間が分離されているためです。

環境動作例
ホストOShttpd (ID 5000)
コンテナ1httpd (ID 5000)
コンテナ2httpd (ID 5000)

このように、
同じ名前・同じIDのプロセスが同時に存在できるのも、
コンテナ技術ならではの特徴です。
これにより、複数のアプリケーション環境を安全に並行運用できます。

コンテナ技術を使った仮想化の全体像は、
仮想マシン方式と並べて図で見ると、とても理解しやすくなります。

この図は、
仮想マシンは「OSごと分かれている」こと、
コンテナは「OSカーネルを共有している」ことを表しています。

コンテナ技術を実装する代表的なソフトウェアが Docker です。
Dockerを使うことで、
コンテナの作成・起動・停止・削除といった操作を簡単に行えます。

AlmaLinux 9.6 環境では、Dockerを使って
コンテナ環境を操作できるようになっています。
Dockerの操作は、docker コマンドを使って行います。

ここでは、参考文書にある docker pull や docker run の代わりに、
docker container ls を使った例で説明します。

[suzuki@AlmaLinux ~]$ docker container ls

docker container ls コマンドの書式

要素説明
dockerDockerを操作するコマンド
container ls実行中のコンテナを表示

docker container ls は何をするコマンド?

docker container ls は、
現在起動しているコンテナの一覧を表示するコマンドです。
どのコンテナが動いているかを確認したいときによく使われます。

主なオプション

オプション説明
-a停止中のコンテナも含めて表示
-qコンテナIDのみを表示

使用例

[suzuki@AlmaLinux ~]$ docker container ls -a

この例では、起動中・停止中を含めたすべてのコンテナが表示されます。
コンテナの状態確認にはとても便利なコマンドです。

Dockerでは、コンテナを作成する前に
イメージと呼ばれる元となる環境を用意します。
イメージは、コンテナの設計図のようなものです。

用語意味
イメージコンテナの元となる環境
コンテナイメージから作成された実行環境

イメージを元に、必要な数だけコンテナを作成できるため、
同じ環境を何度でも簡単に再現できます。

コンテナ環境をさらに多く扱う場合、
「たくさんのコンテナをまとめて管理したい」という場面が出てきます。
そこで登場するのが Kubernetes(クーバネティス) です。

Kubernetesは、複数のコンテナを効率よく管理するための
オーケストレーションツールです。
起動・停止・負荷分散などを自動化できるのが特徴です。

LinuC 101試験では、
DockerとKubernetesの存在と役割を押さえておくことが重要です。
細かい操作までは問われませんので、
「Dockerはコンテナを動かすツール」
「Kubernetesはコンテナをまとめて管理するツール」
というイメージを持っておくと安心です。

このように、コンテナ技術は
仮想マシンとは異なるアプローチで仮想環境を提供する仕組みです。
軽量で、起動が速く、環境を簡単に再現できる点は、
開発・テスト・運用のすべてで大きな強みになります。