コンテナとは
1つのホストOS上で複数のアプリケーションの独立した実行環境を少ないリソースで構築する技術
使用する一番の目的は作成したアプリの配布や共有を楽にするため。
本記事は以下の記事を参考に作成しています。
https://future-architect.github.io/articles/20230614a/
https://thinkit.co.jp/article/17301
コンテナの起源
UNIXの「chroot」というアプリケーションのファイルアクセスを特定のディレクトリ化に制限するための機能が起源だとされ、そこにメモリの管理機能やプロセス分離の機能が追加されたものがコンテナとなっていった。
参考:https://thinkit.co.jp/article/17301
↓
根本的にはアプリケーションの分離を目的としてコンテナが作られた!
仮想化技術との違い
仮想化
・一つのホストOS上で複数の仮想的なハードウェアを実行するための技術
・コンテナよりもリソース使用量が増えるが、分離性は高いためセキュアな環境を作成できる
コンテナ
・VMWareなどのH/W仮想化 とは異なり、OSそのものは共有しているが名前空間の分離やリソースの割り当てを分離しているもの
参考:https://future-architect.github.io/articles/20230614a/
仮想化技術とコンテナ技術は組み合わせて使用されることが多い
メリット
1. 開発者や環境ごとの差異を吸収できる
・チームで開発を進める際、MacとWindowsでローカル環境を実行する際にそれぞれ別の手順を実行する必要があり、手順書の作成が必要になる。
→ 境構築に時間がかかる
・アプリケーション用のミドルウェアやライブラリを開発端末にインストールして開発を進めるとアプリケーションのバージョン管理等が煩雑になる。
→ Dockerなどのコンテナ技術を使用するとDockerfileが存在していればコマンド一つでアプリケーションのビルドと起動が行えるので環境構築が素早く行える。
・ローカル環境、テスト環境、本番環境で同じコンテナイメージを使用することで環境によって動かないという問題を無くすことができる
2. 起動が高速(柔軟性)
・サーバー環境におけるメリットが大きい
→ オートスケーリング時の起動が素早くなり、突発的な大量アクセス(スパイク)に対応することができるようになる。
・一つのコンテナイメージから複数のプロセスを起動することでスケール速度を向上することができる。
3. マイクロサービスアーキテクチャを導入しやすくなる
マイクロサービスアーキテクチャとは
・複数の独立した機能の組み合わせでサービスを構築する設計手法
・大規模サービスになるほどサービスを一元管理することが困難になるため、サービスの分割が必要になってくる。
マイクロサービスアーキテクチャとの相性
・各マイクロサービスを一つのコンテナとして開発することで、迅速なデプロイやスケーリングを行うことができる。
・コンテナイメージを作成することで開発環境構築のスピードを上げることができる。