【こんてな】

コンテナ とは?

最終更新:
💡 アプリを「どこでも同じように動く箱」に入れる

アプリケーションと、その実行に必要なライブラリや設定をひとまとめにして、隔離された環境で動かす技術。Dockerが代表的。

📌 このページのポイント
仮想マシン vs コンテナ 仮想マシン(VM) ハードウェア ホストOS ハイパーバイザー ゲストOS 重い アプリA ゲストOS 重い アプリB コンテナ ハードウェア ホストOS コンテナエンジン(Docker) アプリA Libs 軽量 アプリB Libs 軽量 アプリC Libs 軽量 コンテナはホストのカーネルを共有し、ゲストOSを持たないぶん軽い
VMはOS丸ごと仮想化、コンテナはアプリ単位で軽量に分離
ひよこ ひよこ
コンテナって何が嬉しいの?
ペンギン先生 ペンギン先生
「自分のPCでは動くのにサーバーでは動かない」問題を減らせるよ。アプリ+ライブラリ+設定をまとめてコンテナイメージにすれば、開発環境でもCI環境でも本番環境でも同じイメージを動かせるんだ。ただしカーネルはホストのものを使うし、環境変数や接続先のデータベースのようにイメージの外にあるものは環境ごとに違うから、差が完全になくなるわけではないよ
ひよこ ひよこ
仮想マシンとの違いは?
ペンギン先生 ペンギン先生
仮想マシンは、カーネルやドライバーを含むOSを丸ごと1台分持つ。コンテナは、必要なファイルをまとめた「隔離されたプロセス」で、カーネルはホストのものを共有するんだ。そのぶん軽くて、同じサーバーでより多くのアプリを動かせる。どちらか一方を選ぶものでもなくて、クラウドでは仮想マシンの上でたくさんのコンテナを動かす形もよく使われるよ
ひよこ ひよこ
Dockerfileって何?
ペンギン先生 ペンギン先生
コンテナイメージの「レシピ」だよ。ベースイメージの指定(FROM node:20)→ファイルのコピー(COPY . .)→依存パッケージのインストール(RUN npm install)→起動コマンド(CMD ["node", "app.js"])を順番に書く。このレシピがあれば、誰でも同じ手順でイメージを作れるんだ
ひよこ ひよこ
Kubernetesも必要?
ペンギン先生 ペンギン先生
たくさんのコンテナを複数のサーバーで運用するなら、Kubernetesのような仕組みが役立つよ。コンテナの数の増減、落ちたコンテナの再起動や作り直し、少しずつ入れ替える更新(ローリングアップデート)を自動で面倒みてくれるんだ。ただし覚えることが多いから、小規模ならDocker Composeや、クラウドのコンテナ実行サービス(Cloud Runなど)で足りることも多いね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コンテナ」って出てきたら「アプリを環境ごとパッケージ化する技術」と思えればだいたいOK!
📖 おまけ:英語の意味
「Container」 = 容器・入れ物
💬 輸送用コンテナのように、中身(アプリ)を標準化された箱に入れてどこにでも運べるイメージだよ

参考資料

← 用語集にもどる