Dockerの仮想化の特徴と基本用語

アプリケーションのための仮想環境

Linuxイメージから自作イメージやコンテナへ


基本用語

当サイトでの使い方。

Linuxカーネル

LinuxのOSとしての核となるソフト。ハードウェアと一般のソフトウェアとの間をつなぐ役割。CPUやメモリなどハードウェアやプロセスを管理する。

コンテナはホストのLinuxカーネルを共有する。

Linuxディストロ

例えばCentOSやDebian、Ubuntuなどのように、Linuxカーネルに様々な基本的なソフトを加えたもの。

同じLinuxディストロでも本来はデスクトップ用など様々あるが、基本的なイメージはサーバ用。

ホストLinux

Dockerはクライアント・サーバ型ソフト。DockerサーバをインストールしたLinuxディストロをホストという。ここでは、クライアント(dockerコマンド)とサーバは同じホストにインストールしているものとする。

Dockerコンテナ

アプリケーションを入れるための柔軟な仮想環境がコンテナで、「まるごとOS」を入れるデカくて重い建物(仮想マシン)とは違って、手軽に作成・移動・稼働・削除ができる。

まるごとのOS起動で常駐する様々なプロセス(systemd等)なしに、目的のソフトを一つだけでも動かせる(それが基本)。前提のLinuxディストロはホストと異なっても、カーネル共有の範囲で動く。

コンテナは、イメージをもとにして作成し、起動し、不要になったら停止・削除する、というサイクルになる。

Dockerイメージ

コンテナのもとになる読込専用のテンプレート。特定のLinuxディストロのファイルデータや「実行するコマンド(プログラム)」の設定が含まれる。例えばcentos:7イメージには、Centos7サーバのルートファイルシステムと「Bashを起動」というコマンド実行設定が含まれる。それらをカスタマイズして目的のコンテナを作成する。

基本的なイメージはデフォルトのレジストリ「Docker hub」に揃っていて、docker pullコマンドでホストに取り込める(ダウンロード)。カスタマイズしたコンテナを新規イメージとして保存できる。

プロセス

動作中の一つ一つのプログラムをプロセスという。その状態の把握、CPUやメモリなど資源の割り当て、一時停止や再開、終了、他のプログラムとのやり取りなどの文脈において、特にプロセスと呼ぶ。プロセスIDという番号で管理。

ホストや仮想マシンではOSとして多数のプロセスが動くが、コンテナは目的のプログラム(プロセス)一つだけでも動かせる。

イメージID、イメージ名、タグ

各イメージはイメージIDでユニークに識別できるが、dockerコマンドでは通常、分かりやすい「イメージ名:タグ」で特定する。タグはバージョンのような意味。最新バージョンのタグはlatestで、タグを省略するとlatest扱い。

CentOS7の場合は(現在)、centos:7centos:centos7centoscentos:latestどれでも同じ。

Dockerfile

あるイメージをもとに別のイメージを作るまでの作業をまとめた、ビルド自動化のためのテキストファイル。

各行が「指令 引数..」という単純な構造で、基本的な指令は15個ほど。