コンテナは、業務をこなすために必要な最低限のリソースのみを配備したアプリケーションロジックのコンポーネントを格納する。仮想マシン(VM)と異なり、コンテナはOSを必要としない。OSリソースはAPI経由で呼び出される。(続きはページの末尾にあります)
コンテナは、アプリケーションの各機能を実行するために必要な構成要素を格納している。この構成要素には、ファイルや環境変数(OS内でデータを共有するための変数)、ライブラリ(プログラム部品群)などが含まれる。コンテナ管理ツールは、CPUやメモリ、ストレージといったサーバの物理リソースに対する、各コンテナからのアクセスを制限する。そのため1つのコンテナが、そのコンテナが稼働するサーバの物理リソースを全て消費してしまうことはない。
「コンテナイメージ」は、コンテナの実行に必要なファイル一式を指す。コンテナ管理ツールの種類ごとに、コンテナイメージの構成要素は異なる。Dockerのコンテナイメージの場合は、複数のレイヤー(層)で構成されている。レイヤーは「イメージレイヤー」と「コンテナレイヤー」の大きく2つに分けられる。
イメージレイヤーは、Dockerコンテナを実行するために必要な、全ての構成要素を含む、編集できない読み取り専用のレイヤーだ。各Dockerコンテナには、そのDockerコンテナの設計を変更するためのコンテナレイヤーがある。コンテナレイヤーは、複数のDockerコンテナで再利用できる。
コンテナは移植性に優れている。同じコンテナ管理ツールが稼働するインフラ同士であれば、インフラごとにアプリケーションのソースコードを変更せずに、同じコンテナイメージを実行できるからだ。例えばテスト時にはインフラとしてAmazon Web Services(AWS)の同名クラウドサービス群のVMを利用して、本番時にはオンプレミスのDell製サーバを利用するといった使い方ができる。