コンテナにより、アプリケーションをメモリ上で実行させるための隔離された個別の独立空間とともに、個々のシステムの外観を保存、提供するためのストレージがもたらされる。これによって、各コンテナ内で独自のシステム管理者とユーザーのグループが保持できるようになる。この点でコンテナとVMはよく似ていると言える。
しかしVMとは異なり、コンテナ内ではカーネルやドライバ、共有ライブラリといったOSの完全なインスタンスやイメージが稼働しているわけではない。
このためコンテナの数が数十、または数百、あるいは数千という規模になっても、ホストOSのインスタンスは1つだけで済むため、VMと比較するとアプリケーションをごく小さなフットプリントで稼働させられるというわけだ。
また、VMの追加は数分単位の時間がかかるが、コンテナの追加はマイクロ秒単位の時間しかかからない。
コンテナにはアプリケーションと設定、そしてそのアプリケーションの実行に必要なストレージのみが保持される。このコンセプトはしばしばJeOS、すなわち「Just enough OS」(必要最小限のOS)とも称されている。
コンテナによってさまざまな可能性が広がっていく。ここで特筆しておきたいのは、ホスト上のライブラリやパッチがコンテナに引き継がれる点だ。つまり、すべてのコンテナは同じ共有ライブラリからクローンされたメモリのコピーを使用するため、ホスト側でパッチを当てると、そのパッチはすべてのコンテナに引き継がれる。これはシステム管理という観点から見ると望ましい動作だと言えるだろう。
また、あるホスト上で稼働するコンテナ群、すなわち仮想環境群はまったく同じバージョンのOS上で動作することになる。
VMを実行するハイパーバイザとは異なり、コンテナや、LXCとDockerといったコンテナ化プラットフォームを実行するにはホストOSが必要となる。
コンテナ化がOSレベルでの仮想化と呼ばれているのは、こうした理由があるためだ。コンテナ化プラットフォームがLinuxである場合にはLinuxコンテナが稼働し、コンテナ化プラットフォームがWindowsである場合にはWindowsコンテナが稼働するというわけだ。
たった1つのOSインスタンスの下で数多くのコンテナの稼働が可能であるため、コンテナ自身を単一のVMとして機能させることもできる。