Help us understand the problem. What is going on with this article?

【ふくだ学習録】Docker入門 part2【21日目】

ふくだ学習録とは?

ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。

読了した本

データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]
ゼロから作るDeepLearning
PHPフレームワーク CakePHP 3入門
SQLアンチパターン

今読んでいる本

Docker入門

Docker入門

ハードウェアレベル仮想化,OSレベル仮想化とは?

ハードウェアレベル仮想化
サーバーハードウェアを擬似的に再現した「仮想化マシン」を提供。
仮想マシン上に、ゲストOSをインストールして、その上でアプリケーションを稼働させる。

メリット:ホストOSと異なるゲストOSを自由に選択できる。ホスト環境とゲスト環境の分離度が高いため、セキュリティ面では安全性が高い。
デメリット:ハードウェアの再現やゲストOSが必要になるため性能が出にくい。

OSレベル仮想化
アプリケーション実行環境を分割した「隔離環境」をホストOSの機能で提供。隔離環境内では、あたかもホストOSを自分だけが占有しているかのように外部環境とは独立してアプリケーションを実行できる、

メリット:ホストOSで通常のアプリケーションを実行する場合と、ほぼ同じ利用資源量でアプリケーション実行ができるため軽量。
デメリット:ホストOSと異なるOSを隔離環境内で使用できない。分離度が比較的低いため、安全性が脅かされる可能性がある。

Namespaceとは?

Linuxカーネルが提供してくれる機能の一つ。プロセスに対してリソースを分離する機能。
Dockerでは、各コンテナの資源をホスト環境から分離して相互参照できないようにするために使用している。

namespace (名前空間)

Cgroupsとは?

control groupsの略で、タスクをグループ化したり、そのグループ内のタスクに対して割り当てる様々なリソースを制御している。
Dockerでは、コンテナ内で実行するプロセス群を、それ以外で実行するプロセスと区別するために使用されている。

cgroups

NamespaceとCgroupsの役割の違い

namespaceではホスト名やPID空間などのカーネル/OSが扱うリソースを制御(隔離)する。
cgroupsで制御するのはCPUやメモリといった物理的なリソース。

chrootとは?

システムの基準ディレクトリを一時的に別のディレクトリに置き換える機能。
コンテナごとのルートディレクトリを変更するために使用している(っぽい)

chrootとは何でしょうか?

Netfilterとは?

ネットワークパケットを適切なサイズごとに分割&処理してくれる機能。あとはNATとしての役割も持っている。
下記サイトがわかりやすかった!

Netfilterに関するエトセトラ

仮想ネットワークドライバ

(あくまでこの本内の文脈上だが)あるアプリケーションなどがハードウェアを占有しようとすると、仮想デバイスドライバがその命令を奪い返して、複数の命令が重なっても不都合なく実行できるようにするためのもの。
下記サイトの説明が分かりやすかった。(windowsって書いてるけど、多分windowsだけに限った概念じゃないはず)

仮想デバイスドライバ

AUFS,OverlayFSとは?

Linux のファイルシステムサービスであり、複数の異なるファイルシステム (ブランチと呼ばれる) のファイルやディレクトリ同士を透過的に重ねる (マージする) ことができる技術。そういったシステムのことをユニオンファイルシステムという。
Dockerで、イメージの積み重ねをすることができるのは、この技術を使用しているから。

AUFSとOverlayFSはその代表格。

aufs
OverlayFSについて

device-mapperとは?

Linux上で多くのボリューム管理技術の基盤となるカーネルベースのフレームワーク。
dockerでは、イメージを統合する際のストレージ・ドライバ1つとして使用されている。

Dockerのストレージドライバを理解する

dockerインストール向きのホストOS

「CentOS」か「Ubuntu Server」がおすすめ。
理由はサーバー用Linuxディストリビューションのため、軽量(GUIサポートなどの必須ではないコンポーネントが入っていない)かつサポート期間が長いから。

またDockerの利用を前提として作られた「Core OS」「CentOS Atomic Host」といったディストリビューションもあり、こちらはさらに効率化されているものになるので、パフォーマンス改善の時には検討しても良いかも。

apt-getコマンド

apt-getコマンドは、Debian系のディストリビューション(DebianやUbuntu)のパッケージ管理システムであるAPT(Advanced Package Tool)ライブラリを利用してパッケージを操作・管理するコマンド。

今日の一言

結論、下記サイトがいっちゃん分かりやすい説。

Docker ドキュメント日本語化プロジェクト

fukuda_fu
フロントエンドエンジニアです。普段はReact書いたりしてます。 勉強がてらにアウトプットします。よろしくです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away