🤯

Dockerってなんぞや?🤔💭

2023/11/10に公開

〜Dockerを学習するにあたって、知識定着を目的に記述する。〜

■ Docker📦とは、どんなサービスか?
はじめにググると、『軽量で高速に動作するコンテナ型仮想環境用のプラットフォームです。』
と、検索にヒットするが、そもそもコンテナ型仮想環境用のプラットフォームがハテナ😅

なので、理解を深めるためにこのサービスの成り立ちや歴史を調べた🔍

まとめ記事などを参照し、自分用になるべく簡潔にまとめようと思う。

■Dockerの歴史

◎2013年3月に当時のdotCloudからDockerが登場
Dockerという技術が作られた目的は、
開発者にとって長年の頭痛だった"私のマシンでは動くけど、プロダクション環境では動かない"
という問題を解決するべく生まれた。みたい🤔

■Dockerの特徴💪

◎環境の一貫性
コンテナ型仮想化は、開発環境と本番環境の違いによる問題を解決する。
アプリケーションとその依存関係を一つのパッケージ(コンテナ📦)にまとめることで、環境の一貫性を保証する。

◎アプリケーションの隔離
同じマシン上で複数のアプリケーションを実行する際、コンテナ型仮想化はそれぞれのアプリケーションを独立した環境(コンテナ📦)に隔離することで、アプリケーション間のリソース干渉や競合を防ぐ。

◎高効率と速度🏃‍♂️
コンテナ型仮想化は、伝統的なハードウェアレベルの仮想化(VM)と比べて軽量で高速🚄
各コンテナはホストOSのカーネルを共有し、必要なアプリケーションとその依存関係のみを含むため、リソース利用が効率的で、起動・シャットダウンも迅速。

■まとめ

コンテナ型仮想環境用プラットフォームとは
┣コンテナ型仮想環境は、アプリケーションとその依存関係を一緒にパッケージ化する技術。
┣これにより、アプリケーションはどのシステムでも同じように動作する。
┗Dockerなどのプラットフォームは、これらのコンテナを作成、展開、運用するためのツールを提供する。

※用語が専門的で理解しづらいので、以下理解しやすいように捕捉。

🚨コンテナ型仮想化とハードウェアレベルの仮想化(VM)は、その方法と特性には大きな違いがある。

○ハードウェアレベルの仮想化(VM)🖥

ハードウェアレベルの仮想化では、物理的なハードウェア上に仮想マシン(VM)を作成。
各VMは、自身のOS(WindowsやMac OSなどのゲストOS)を持ち、ハードウェアを完全に模倣。
これにより、異なるOSを同一の物理マシン上で独立して実行することが可能となる。

しかし、各VMが独自のOSを持つため、必要なリソース(CPU、メモリ、ストレージなど)が重複して消費されてしまう。また、起動やシャットダウンに時間がかかるという特性もある。

○コンテナ型仮想化📦

一方、コンテナ型仮想化は、ホストOSのカーネル(ハードウェアとソフトウェアの間で情報をやりとりする役割のもの)を共有しつつ、各コンテナが独立した実行環境を持つことで隔離を実現。コンテナ内には、アプリケーションとその実行に必要なライブラリや依存関係がパッケージ化されている。

利点は、軽量であることと高速に起動・停止できること。
ホストOSのカーネルを共有しているため、リソース消費が少なく、各コンテナの起動・停止は非常に迅速。
また、コンテナの内容は移植性が高く、開発環境から本番環境へのデプロイが容易。

ただ一方で、全てのコンテナが同一のホストOSのカーネルを共有しているため、異なるOSでの実行が難しいという制限がある。

Discussion