1-1. コンテナって何だ?
コンテナに支えられているWeb開発
今日のWeb開発では、(ベンチャーでは特に) コンテナが広く使われています。
ローカル環境においては、DockerやPodmanが以下のように使われていることでしょう。
- 開発用DBを立ち上げる
- アプリケーションのプレビュー環境を用意する
- 開発環境自体をコンテナで用意する
- Dev Container


プロダクション環境においても、様々な形でコンテナが使われています。
- Kubernetes、ECSなどのコンテナオーケストレーション
- Lambda、Cloud Runなどのサーバーレス環境



コンテナが「実用化」されてから10年、ローカル環境で小さく動かすワークロードから、プロダクション環境で大規模に動かすワークロードまで、コンテナはWeb開発者に無くてはならない存在になりました。
コンテナの正体
さて、そんな「コンテナ」の正体、ご存知でしょうか?
コンテナと言えばよく比較に挙げられるのが仮想マシン。
「コンテナは仮想マシンより速い仮想化だよ」「コンテナはOSを共有してるから仮想マシンより速いんだよ」のような話を耳にしたことがある人は多いはずです。
よくある図
しかし、コンテナは皆さんの想像する仮想化とは全く違います。
(一応「仮想化」の1カテゴリという説明をしている人もいますが) コンテナは何も仮想的にシミュレートはしていないのです。
先に答えを言うと、コンテナは
プロセスツリーのある枝から先を、Namespaceやchroot/pivot_root、cgroupなどの機能を使って隔離して実行したもの
です。
もしかしたら既にピンときた方もいるかもしれません (そのような方は座学をスキップしてもらって大丈夫です)。
ただ、ほとんどの人は「何を言ってるんだろう?」となったはず。
でも大丈夫。ピンと来なかった皆さんは、少し前提知識が足りないだけです。
ここからの座学で前提知識を身につけて、コンテナを正しく理解していきましょう。