Skip to content

1-1. コンテナって何だ?

コンテナに支えられているWeb開発

今日のWeb開発では、(ベンチャーでは特に) コンテナが広く使われています。

ローカル環境においては、DockerPodmanが以下のように使われていることでしょう。

  • 開発用DBを立ち上げる
  • アプリケーションのプレビュー環境を用意する
  • 開発環境自体をコンテナで用意する
    • Dev Container

Docker

Podman

プロダクション環境においても、様々な形でコンテナが使われています。

  • KubernetesECSなどのコンテナオーケストレーション
  • LambdaCloud Runなどのサーバーレス環境

Kubernetes

Lambda

Cloud Run

コンテナが「実用化」されてから10年、ローカル環境で小さく動かすワークロードから、プロダクション環境で大規模に動かすワークロードまで、コンテナはWeb開発者に無くてはならない存在になりました。

コンテナの正体

さて、そんな「コンテナの正体、ご存知でしょうか?

コンテナと言えばよく比較に挙げられるのが仮想マシン。
「コンテナは仮想マシンより速い仮想化だよ」「コンテナはOSを共有してるから仮想マシンより速いんだよ」のような話を耳にしたことがある人は多いはずです。

仮想マシンとコンテナ よくある図

しかし、コンテナは皆さんの想像する仮想化とは全く違います
(一応「仮想化」の1カテゴリという説明をしている人もいますが) コンテナは何も仮想的にシミュレートはしていないのです。

先に答えを言うと、コンテナは

プロセスツリーのある枝から先を、Namespaceやchroot/pivot_root、cgroupなどの機能を使って隔離して実行したもの

です。

もしかしたら既にピンときた方もいるかもしれません (そのような方は座学をスキップしてもらって大丈夫です)。
ただ、ほとんどの人は「何を言ってるんだろう?」となったはず。
でも大丈夫。ピンと来なかった皆さんは、少し前提知識が足りないだけです。

ここからの座学で前提知識を身につけて、コンテナを正しく理解していきましょう。