個人的メモ。
厳密なことは書かない。
コンテナとハイパーバイザの違い
コンテナを使うとゲストOSを無くして仮想化環境を用意することが出来る。それぞれのコンテナ(アプリ)はホストのOS(カーネル)を共有して利用している。但し、それぞれのコンテナはNamespace等を使って仮想的に分離されているからお互いに影響を与える可能性は限りなく低い。また、cgroupを使って各コンテナが使用できるホスト側のCPUやメモリ等を制限することも可能。
OSは基本的にLinux系になる(WindowsでもDocker DesktopがあるがWindows Subsystem for Linux(WSL)を使っている時点でLinuxに依存したシステムだと思う。)

暴論になるかもだけど、WindowsPCがあって、その上で様々なアプリを動かしたとする。
メモリは32GBを積んでいるPCと想定。

コンテナ(NamespaceやCgroup)で仮想化するという事はこのアプリ同士を秘匿化(お互いが見えない)しつつ、メモリの使用量をそれぞれのアプリで明確に分けるという事。

コンテナ周りの技術
volume
コンテナは一度消えてしまうと、コンテナが生成したデータも消えてしまう。

volumeはホスト側のストレージ(SSDとかHDD)にDockerのデータを格納するためのやつ。
マウント的なイメージを個人的には持っている。

network
デフォルトだとコンテナを導入した内部はこうなっている。
仮想的なBridgeを作って、それぞれのコンテナはそれに紐づいている。またこのBridgeはNICとも紐づいている。だから外部ネットからコンテナにアクセスすることが出来たりする。

こういうことをすることも可能
Docker SwarmはKubernetesを勉強したいなら先に触ってみるといいと思う。

レジストリ
DockerだとDocker Hub。Docker Imageがたくさん置いてある。
本当にざっくりいうなら、ISO的なものがたくさん置いてある場所。
以下はUbuntuの公式イメージ
docker pull ubuntuを実行するとこいつをローカルに引っ張ってくる
Dockerfile
イメージを作成するためのレシピ的なヤツ。
イメージのOS、ミドルウェア、アプリを定義する。
デプロイしたコンテナに入って設定を入れ込んで、それをイメージ化することで再利用することも出来るが、本当であればこっちに全部記述したほうがいい。
バージョン管理やドキュメントとしての役割を果たせるようになる。
今後随時更新予定




