【Docker】Dockerの基本的事項メモ
TL;DR
ゼロからはじめる Dockerによるアプリケーション実行環境構築 | UdemyでDockerの講座を受講したのでメモ代わりにDockerの基本的事項 について記載しています。
関連情報
以下を参考にしています。
Dockerとは
- Docker社が提供しているコンテナ型のアプリケーション実行環境
- Docker自体はGo言語で書かれている
Dockerは従来の仮想化(ホスト型仮想化)とは違い、コンテナ型仮想化です。
従来の仮想化(ホスト型仮想化)とコンテナ型の仮想化の違い
上記の図のように
ホスト型仮想化の場合、ホストOSとは別にゲストOSを別にして動作しています。
そのため、LinuxOSやWindowsOSといった別々の任意のOSをゲストOSとして動作させることができます。
ただし、仮想マシンをつくるためのイメージサイズが大きいことやコンテナ型仮想化と比較すると起動が遅い点がデメリットとしてあげられます。
一方、コンテナ型仮想化は、Docker Engine
を介してコンテナを操作して、コンテナはゲストOSを持たず、ホストOSのカーネルを使用しています。
そのためカーネルを共有できないOSはコンテナで動作することができません。
例えば、ホストOSがLinuxOSの場合、Windowsコンテナを使用できないということになります。
仮想化のオーバーヘッドについて
ホスト型仮想化
リソース(CPUやメモリの使用率等)の面でオーバーヘッドが多いため、遅いです。
コンテナ型仮想化
コンテナはアプリケーション実行に必要なものだけを含み、ホストOSのカーネルを使用するため早いです。
アプリケーション実行の再現性
ホスト型仮想化
仮想化ごとにミドルウェアやライブラリをインストールし開発環境と差異が生まれ、稀にアプリケーションが動作しないことがあります。
コンテナ型仮想化
アプリケーションを実行するために必要なものをDockerイメージとしてあるので、Dockerイメージからコンテナを起動すれば環境が変わっても動作します。
OSの自由度
ホスト型仮想化
仮想マシン上で任意のOSを動作させることができます。
コンテナ型仮想化
ホストOSのカーネルを使用するので別のOSを動作させることができません。
分離レベル
ホスト型仮想化
ハードウェアレベルで仮想化されているので、いずれかの仮想化マシンに侵入されても他のマシンへの影響が低く、分離レベルが高いです。
コンテナ型仮想化
ホストOSの一プロセスとして動作するので、影響範囲が大きいため、分離レベルが低いです。