はじめに
クラウドやインフラの話になると、必ず出てくる コンテナ と Kubernetes。
ですが、正直に言うと僕は5年くらい「なんとなく分かった気になって、でも腑に落ちてない状態」でした。
最近ようやく「なるほど、そういうことか!」と腹落ちしたので、メモを兼ねてまとめます。
もし同じようにモヤモヤしている方がいたら、参考になれば幸いです。
コンテナとは?
アプリ本体+依存パッケージ+設定をひとまとめにした“環境ごと持ち運べる塊”
- 「どこでも同じように動く」ようにするための仕組み
-
Dockerfileにアプリやランタイムを書き、docker buildすると コンテナイメージ ができる -
docker runすると実際に動く コンテナ になる
App Storeアプリとの違い
ここで僕が腑に落ちたのがこの比喩です。
- App Storeのアプリ = 事前に用意された環境(iOS / Android)にセットする塊
- コンテナ = 環境ごとまとめて持ってくる塊(Node.jsのバージョンやnpmパッケージも含めてパッケージ化)
つまり、
- App Storeアプリ → 環境に依存する塊
- コンテナ → 環境ごと持ち運ぶ塊
Kubernetesとは?
大量のコンテナを自動で管理・調整してくれる司令塔
- コンテナが増えすぎても、落ちても、自動で配置・再起動してくれる
- アクセスが増えればスケールアウト、減ればスケールイン
- 設定ファイル(マニフェスト)に「こうなってほしい状態」を書くと、自動でその状態を維持してくれる
比喩で言うと
- コンテナ = 弁当箱(アプリと環境がひとまとめ)
- Kubernetes = 弁当配送センター(どこに何個届けるか自動で調整してくれる)
まとめ
- コンテナは「アプリ+環境の引っ越しダンボール箱」
- Kubernetesは「そのダンボールを大量に捌く司令塔」
- App Storeアプリとの違いで考えると、「事前にある土台に載せる塊」か「土台ごと持ち運ぶ塊」か、で理解できる
おわりに
これまでは「コンテナとKubernetesはセットで語られるけどよく分からん…」状態でした。
でも「App Storeのアプリ」と比較したときに、初めて腑に落ちました。
もし同じようにモヤモヤしている人がいたら、この比喩が役に立てば嬉しいです!