コンテナとは
コンテナは、アプリケーションをさまざまなプラットフォームに容易にデプロイできるよう、アプリケーションを可搬性のある形態にまとめて利用できるように設計された仮想化技術です。コンテナは、アプリケーションコードそのもの、アプリケーションの実行に必要なライブラリなどの依存関係、アプリケーションとその依存関係のランタイム環境といった、アプリケーションに必要なすべての要素をパッケージ化します。これにより、プラットフォーム間で移動し、各プラットフォーム上で独立して実行できます。コンテナは、一般的なOSランタイム環境からアプリケーションを抽象化したものです。
Dockerは最も広く知られているコンテナ実装形式ですが、ほかにもrkt/CoreOS、containerd、Hyper‑Vコンテナのほか、cgroupsやnamespacesといった低レベルのテクノロジーがあります(cgroupsとnamespacesは、コンテナエンジンと同様にアプリケーションの分離に使用されますが、コンテナと同じような分離された可搬性は提供しません)。Dockerやrktなどのプラットフォームツールを使用してコンテナを直接管理できますが、ほとんどのデプロイでは、コンテナ管理にKubernetesなどのオーケストレーションツールを使用します。必須ではありませんが、Kubernetesは本番環境向けのコンテナデプロイにおける標準ツールになりつつあります。
コンテナは、アプリケーションをより小さな独立したコンポーネントに分割し、インフラストラクチャの所有者と開発者の責任を分担できるため、アーキテクチャとして非常に広く採用されています。開発時には、複数のチームが各コンポーネントを並行して作業でき、デプロイ時には、特定のコンテナをプラットフォーム間で移行できるという利点があります。また、コンテナはイミュータブルなプラットフォームを提供できるため、アプリケーションおよびインフラストラクチャの管理者にとって、より効率的なツールとなります。これにより、開発者は既知の一連の要件を自ら管理することなく、その要件に従ってアプリケーションコンテナを公開できます。
「アプリケーションのコンテナ化」という用語は、アプリケーションを標準的なLinuxランタイム環境から、さまざまな環境で実行できる自己完結型の形態へ移行するプロセスを指す場合によく使用されます。多くの企業ではコンテナ化がすでに進んでおり、基本的なコンテナ、またはKubernetesなどのツールを使用した、より包括的なコンテナ管理戦略への移行を開始しています。
NGINXはどのように役立つのか
すべてのNGINX製品は、コンテナで実行できます。対象製品には、NGINX Open Source、NGINX Plus(オプションでNGINX App Protectを使用可能)、NGINX Unit、NGINX Service Mesh、NGINX Ingress Controllerが含まれます。また、コンテナ技術を基盤とする製品(NGINX Controller)もあります。

