わかりそうでわからないコンテナをわかりやすく解説

2021年6月19日土曜日

Architecture

Dockerなどコンテナ技術に関連する用語を目にする機会が増えてきている昨今。
なんとなく分かるが何となくわからないコンテナ技術について、専門用語を用いることなく解説していきます


コンテナとは?

コンテナの始まり

そもそもコンテナとは何なのでしょうか?

改めてソフトウェア技術のコンテナではなく
貨物船に利用される物理的なコンテナの役割を見てみましょう。

1950年代に、貨物をコンテナと呼ばれる一律の形状の箱に納めて、航行するようになります。

1950年代以前の貨物船は、様々な形状の荷物を様々な方法で積み上げていました。
このため積み上げ作業の属人性が高く、人によっては非常に早く終わる時もあり、また非常に遅いときもある訳です。

このため貨物の積み上げ、積み下ろし作業が非効率な作業となっていました

この問題を解消するためにコンテナは発明されました
様々な貨物を統一された規格のコンテナにまとめ、コンテナを貨物船に積むことにしたのです。

この変化によって貨物の積み上げ、積み下ろし作業が統一され
コストダウンにつながりました

ソフトウェア技術としてのコンテナとは?

ソフトウェア技術としてのコンテナも
貨物船のコンテナと普及の動機は同じであると考えられます

年々ソフトウェアに求められる機能は多様化、高機能化し
ソフトウェアの開発規模は肥大化しています

ここで、あるWebサービスを自社で管理しているケースを想定します
年々肥大化するWebサービスをクラウド上に移行することにしました

このとき自社のWebサーバーに会社独自の方法で実装された
様々な機能を逐一クラウドに移行することは前述の様々な形状の貨物を貨物船に運び込むことに類似します。
このような問題に対する技術がコンテナ技術となるのです

ソフトウェアを機能ごとにコンテナにまとめることで
ソフトウェアを移行させやすくしたのです

このようにソフトウェアの移植性の向上が
メリットの一つとして挙げられます

コンテナの規格は?

紹介させて頂いたコンテナ技術ですが、
コンテナのメリットは、コンテナの規格が統一されることで発揮されます

様々な、幅、高さ、奥行きを持つコンテナを貨物船に積まなければならないのであれば
結局メリットは目減りしてしまいます

このため貨物船のコンテナも、ソフトウェアにおけるコンテナ技術も
規格が統一されています

このソフトウェアにおけるコンテナ技術の規格が
Dockerなのです

厳密には他のコンテナ技術の規格も存在しますが
2021年現在、ほぼほぼ標準規格と言って差し支えないと思います

こうしてDockerに対応した同一OSのWebサーバーAとWebサーバーBは
Dockerコンテナの移行がスムーズになるのです

コンテナの管理は?

再度、貨物船のコンテナに話を戻します
コンテナ船の航行は、コンテナの管理が必要となります

日本とアメリカ間で航行する日本発アメリカ着ばかりの航行が続けば、アメリカにコンテナが溜まっていきます。
一方で、日本ではコンテナを沢山製造しなければ、貨物をまとめるコンテナが不足していきます。

このような状況では、貨物の積み上げ、積み下ろしで削減したコストを
コンテナの製造費用で食いつぶしてしまいます。

こうした事態をさけるため航行の本数や貨物の量を管理する必要があります。
コンテナの総量を管理し、一定の箇所でコンテナが滞留しないように航行を調整する必要があるのです。

同様の事がソフトウェア技術におけるコンテナでも発生します

あるWebサービスがいくつかのコンテナで構成されていたとします
この時Webサービスを継続的に提供していくためにはそれぞれのコンテナが
正常に稼働し続けている必要があります
コンテナの数が2~3個であれば手動で管理も可能ですが
コンテナの数が数百~数千と増えていったとき
これらの稼働状況の監視やアップデート等の管理を手動で行っていくことは
現実的ではありません

事前に管理のルールを定義し、自動でコンテナを管理するシステムがKubernetesです
kubernetesにより、大量のコンテナを効率的に稼働させ、一元的な管理を可能にします。

コンテナのメリット

コンテナのメリットは、VM(Virtual Machine)と比較して語られることが一般的です。

VMとは、Windows OSが搭載されたパソコン上で、Linux OSを動作させた状態を想像していただくとわかりやすいかと思います。

VMとは、あるOSで稼働するシステム上に、別のゲストOSを搭載して仮想化します。
一方で、コンテナはOSを共有しつつ、必要なライブラリやミドルウェアのみ搭載して仮想化します。

このことにより、VMと比較して仮想化に求められるハードウェアリソースが少ないというメリットがあります。

まとめ

コンテナについて専門用語を極力省いて解説させて頂きました
少しでもイメージをつかんで頂けたら幸いです

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology