#前提
本日学んだことを書いていきます。
#本題
#コンテナとは
内部にものを貯める容器・運搬可能
容器にはアプリケーションが入っている。
自宅のPCやラップトップ、データーセンターで稼働しているサーバー
AWSやAZUREやGCPの仮想サーバーへ持ち運び、アプリケーションを実行することができる。
#従来の技術モデル
アプリケーションが実行される環境が変わってきている。
一つのハードウェアに一つのOSがあり複数のアプリケーションをインストールして使用する。
このような形が従来型のアプリケーションの実行環境。
少々リソースに無駄があり、コストが高くつくのが難点。
#仮想化技術
ハードウェア、OSについては同様。
ハイパーバイザーというシステムをインストール(VMWereやXen、Hyper-V)。
ハイパーバイザーにWindowsやLinuxなどのOSをインストールし、仮想的に一台のサーバーを実行できる(Virtual Server)
ハイパーバイザーは複数のバーチャルサーバを実行することができ、EC2などの仮想サーバーもバーチャルサーバとして実行されている。
##メリット
OS丸ごとのバックアップの取得が簡単。
#コンテナ
ハードウェアやOSは同様。
コンテナエンジン、コンテナデーモンをインストール。(Dockerが一番有名)
コンテナ同士は独立しており、互いに鑑賞することはない。
それぞれの実行環境がコンテナという一つの容器にまとまっている形をイメージ。
##なぜ軽量なのか
コンテナのOSと異なっていてもLinuxのカーネルは互換性があるため互換性の範囲内であればアプリケーションは動作できる。
→コンテナはLinuxイメージが動作している
Linuxイメージ = filesystem / libraries
OS = filesystem / libraries + kernel
それぞれのコンテナ(RedhatやSuze、Ubuntu)はホストOSのカーネルを共有しており、カーネルまで含めて仮想化しているバーチャルサーバと比べて動作が軽量。
#コンテナのライフサークル
・Dockerデーモンをホストマシンにインストール
→コンテナイメージを実行したり、ネットワーク周りを管理したり、コンテナ全般の管理を行うもの
・Dockerclientをインストール
→デーモンに対して指示を出す役割のもので、デーモンに対してビルドやコマンドやランコマンドを実行したりする。
・Registry
Dockerイメージを保管する領域。
DockerHubが有名。
AWSではECR、Elastic Container RegistryというプライベートなDockerイメージのアップロード場所をサービスとして提供している。
DockerclientがRun
コンマンドをデーモンに対して実行。
↓
デーモンは場合によってRegistryからコンテナイメージをダウンロードし、コンテナとして実行。
※buildコマンドでどのようなコンテナイメージを作成するかによる
#コンテナの人生
DockerHubなどのコミュニティにある様々なコンテナ
↓
自分のパソコン(Dockerclient)にpull
↓
行いたい作業に合わせて編集しDockerHubなどのコミュニティ(Registry)にpush
↓
Dockerデーモン(ホスト)に対してRunコマンドを実行
↓
DockerデーモンはRegistryよりイメージをダウンロード
↓
コンテナの実行