概要
コンテナとDockerについて、仕組みや特徴などに加え、初心者が疑問をいだきやすい箇所についても解説します。
#コンテナ
コンテナとは?
コンテナとは、従来の仮想化のボトルネックであったゲストOSと仮想マシンを不要とし、より軽量で高速に動作するアプリケーションの動作技術。:smi
コンテナを使うと何がいいのか?
- 仮想サーバを立ち上げるオーバーヘッドが不要になり、より身軽なアプリケーションの実行基盤を提供できる
- ミドルウェアとOSのいち部を同梱することでどこでも実行可能になる
なぜゲストOSが不要なのか?
アプリの動作はカーネル(OSの中核部)の機能を呼び出して動作しており、
Linux系のOSであるCentOSやUbuntuなどは共通のカーネルを使用している。
したがって、アプリの実行に必要なライブラリさえあればどのディストリビューションでもアプリの実行が可能。
コンテナの3つの特徴的な技術と利点
コンテナはそれぞれが1つのプロセスとして扱われ、下記3つの機能から成り立つ。
① Namespace
ユーザーIDなどを用いて、他のプロセスとの分離・独立させる
→1つのコンテナを1つのプロセスとして管理できる。
② cgroup
プロセスをグループ化し、ホストOSの物理リソース(CPUやRAMなど)を分割・割当を行う。
→ホストOSや他のプロセスへの影響を抑制
③ capability
root権限のうち必要な権限のみを一時的にプロセスに付与する。
→与える権限を最小化し、プロセスの脆弱性などによる危険性を極力抑える。
Docker
Dockerの構成要素
① Docker Engine
アプリケーションの実行環境とアプリケーション本体をDockerイメージとして作成する
② Docker Hub
Dockerイメージのリポジトリ(Dockerイメージの移動や管理、共有など)
GithubのリポジトリにDockerfileを作成しておけば、自動でDockerイメージを生成することが可能。
Dockerはステートレス
コンテナ(プロセス)が処理の途中で削除されれば、処理中のデータは保存されない。この欠点を改良するため
- データボリューム
- データボリュームコンテナ
を利用することでデータの永続化を可能としている。
複数のコンテナを管理したいときはDocker Composeを使う
1プロセスに1コンテナが原則だが、コンテナが増えると管理負担が大くなるため、
複数のコンテナを一括管理できるDocker Composeを使う。
Docker Composeを使うと
- Dockerイメージ
- コンテナの設定
- ネットワーク
- ボリューム ... etc.
をcomposeファイルとして定義し、1つのコマンドでコンテナのビルドや複数コンテナの起動などが可能になる。