当記事の目的
2017年現在、ブームというより必須スキルとなったdockerを勉強して時代遅れエンジニアにならないようにする
dockerを含めた、アプリケーションの基盤(アプリそのものではなく)を構築することによって、低レイヤの部分も意識できるエンジニアになる
dockerの概要
コンテナ型仮想環境
Linuxカーネルが持つ「コンテナ」機能などを使用して実行環境を他のプロセスから隔離し、その中でアプリケーションを動作させる。
コンテナはLinuxの通常のプロセスとほぼ同じものだが、利用できる名前空間やリソースが他のプロセスやコンテナからは隔離され、それぞれ固有の設定を持てるようになっている。そのためコンテナ内のアプリケーションから見ると、独立したコンピュータ上で動作しているように振る舞う。
そして、コンテナはLinuxカーネルが持つ次の機能を利用して実現している。
名前空間の隔離機能
ファイルシステムやコンピュータ名、ユーザ名(ユーザID)、グループ名(グループID)、プロセスID、ネットワーク機能などをコンテナごとに独自に設定できる。
リソースの隔離機能
CPUやメモリ、ディスクI/Oなどをコンテナ内で利用するリソースをほかのコンテナから隔離したり、設定に基づいて振り分けたりする機能。
ハイパーバイザ型(VMwareなどの従来の仮想環境)との違い
図1を見るとコンテナだけでなくdocker(コンテナの管理プロセス)自体もホスト上のアプリケーションレベルで動作している。docker自体はLinuxにもともとある仮想化関連の技術を組み合わせるとともに、それらを管理する機能を提供している。
まとめ
従来のハイパーバイザ型と比べて軽いこと(動作だけでなく、持ち運びも)が読み取れる。
次回、もう一回だけ座学をして、その次に実際に動かしてみよう。