クラウドネイティブで、継続的に付加価値を提供できるモダンアプリケーションの開発とリリース、それを実現する代表的な技術が「コンテナ(Container)」です。Linuxで生まれ発展してきたコンテナ技術は、Windows 10バージョン1607およびWindows Server 2016以降、Windowsでもサポートされ、Windowsコンテナによるモダンアプリケーション開発やレガシアプリケーションのモダン化を可能にしました。
しかしながら、コンテナ技術の周辺は変化のスピードが速く、どこから手を付けていいのか分からないほど複雑化しています。まずは基本的なところからはじめましょう。
コンテナの基本、仮想化技術との違い
コンテナは、コンテナホストのOS上でアプリケーションを実行するための、軽量のパッケージです。独自の(仮想的な)ハードウェアを持ち、ゲストOSやアプリケーションをインストールして実装するのとは異なり、コンテナはホストOSのカーネルを共有し、レイヤー化されたコンテナの基本部分であるベースOSイメージが、ホストOSによって提供されないシステムサービスやAPIをアプリケーションに対して提供します。
コンテナはホストとの差分で提供される分離されたファイルシステムとレジストリを参照することができ、変更はコンテナにのみ反映され、通常(永続ストレージを使用しない限り)、その変更はコンテナ停止時に破棄されます。
ホストOSのカーネルを共有するという仕様上、Linuxコンテナを実行できるのはLinuxのコンテナホストだけであり、Windowsコンテナを実行できるのは、WindowsまたはWindows Serverのコンテナホストだけです。