目次
Dockerとは?
仮想化技術には、ハイパーバイザー型とコンテナ型があります。
Dockerとは、コンテナ型仮想化プラットフォームの一種です。
KVMやHyper-Vなどの仮想化技術ハイパーバイザー型とは違って、ゲストのOSが必要ないというのが特徴です。
ハイパーバイザー型の場合、仮想サーバーごとにゲストOSを立ち上げる必要がありますが、Dockerのようなコンテナ型では、ホストOS上で新しいOSを立ち上げることなく、ホストOSが一つのみ存在し、上のコンテナという容器の中でミドルウェアやアプリケーションを動かすという事になります。
Dockerを利用することで、簡単に同じ環境のアプリケーションを作成可能となりますので、開発者にとって、とてもありがたい技術と言えます。
コンテナ型のメリット
UbuntuのホストOS?を使ったコンテナであれば、Ubuntuのように動きますし、CentOSのホストOS?を使ったコンテナであればCentOSと同じように動きます。
このコンテナのメリットを活用することで、他のDocker環境への移行・構築などのホストOS上の変更することなく、コンテナ単位で一気に動かせるようになるため、管理を容易に行うことができるようにします。
また、ハイパーバイザー型のように新しいホストOSを立ち上げる事なく、ホスト上のカーネル※をコンテナ間で共有して利用することから、オーバーヘッド※が軽減され、軽く高速に動くとされています。
※ カーネル…OSの基本的な機能の役割を担っているソフトウェア。
※ オーバーヘッド…各アプリケーションが動作する時に必要となる余計な処理。
コンテナ型の種類
コンテナ型といえば、Dockerといったイメージを持つ方も多いかもしれませんが、コンテナ技術はDockerが話題になるずっと昔から存在しています。
コンテナ技術が登場するきっかけ、原点ともいえるのが、『Chroot』です。Chroot とは、Change Rootの略で、ルートディレクトリを変更するときに使うコマンドです。当初はLinuxのtreeディレクトリ構造を分割することで、名前のみ変えて別の空間を行き来して利用していました。
そして、コンテナ技術が登場します。Jailから始まり、今ではDockerおよびLXDといったコンテナ技術が誕生しています。
ここでは、Dockerをはじめ、JailやLXDなどのコンテナの種類についてご紹介します。
◆コンテナの種類①Jail(ジェイル)
≪Jailのメリット≫
Jailのメリットとして以下が挙げられます。
- ・ホストOSから隔離された別の環境を利用できる。
先ほど紹介したコンテナ技術の原点であるChrootの場合とは異なり、Jailというコンテナ技術では、自分に割り当てられたファイルシステムだけでなくプロセス空間も隔離することができます。そのため、プロセス空間を隔離する事が出来ないChrootに比べて、ホストOSから隔離された別環境を利用できる点がメリットとして挙げられます。
もうすこしわかりやすく言い換えるとホストOS(Free BSD)上で、別の動作をするFreeBSDマシンを動かす事ができるということです。
【コンテナ型Jailの仕組み】
≪Jailのデメリット≫
Jailのデメリットとして以下が挙げられます。
- ・OSはホストOSと同じFreeBSDしか利用できない
Dockerでは、様々なOS環境のコンテナを立てて、アプリケーションを利用する事が可能なのに対し、Jailでは利用できるOSがFreeBSDだけなので、動かせるアプリケーションに制限があります。
本記事では多く触れませんが、FreeBSDにjailがあるように、LinuxにもLXCという同じように名前空間とプロセス空間を分けられるコンテナ技術があります。
◆コンテナの種類②Docker
Dockerは、コンテナ技術を使ったアプリケーションコンテナで、アプリケーションを開発・実行環境から隔離し、アプリケーションの素早い提供を可能にする技術です。
≪Dockerのメリット≫
Dockerのメリットとして以下が挙げられます。
- ・簡単なアプリケーションのデプロイが可能
オンプレでもクラウドでもOSのインストール、アプリケーションサーバー・DB等のミドルウェアをインストールなど作業が多く時間がかかります。
また、少し設定が違ったり、バージョンが違ったりして正しくアプリケーションが動作しないなどの問題も発生したりします。
Dockerを利用することで、作業の手間がかかるだけでなく、ミスなく常に同じインフラ環境を簡単に用意する事が可能となります。
≪Dockerのデメリット≫
Dockerのデメリットとして以下が挙げられます。
- ・ホストOSのカーネルを利用しているので、コンテナは別々なカーネルでは動作できない。
- ・Dockerはアプリケーション単位でのみ利用でき、OS丸ごとでは利用できない。
- ・ネットワークは必ずNATを利用する必要がある。
◆コンテナの種類③LXD
LXDは、Canonicalが開発したKVMやXenに変わる次世代のシステムコンテナおよび仮想マシンのマネージャーで、ハイパーバイザー型のVMのように様々なシステムコンテナで利用する事ができるコンテナ技術です。
≪LXDのメリット≫
LXDのメリットとして以下が挙げられます。
- ・コンテナを利用した仮想環境である
コンテナ型なので、他の技術同様ホストOSのカーネルを利用しますが、それ以外の部分は通常の仮想VMのようにOS丸ごとに利用できるのがメリットと言えます。
これにより、通常の仮想VMに比べれば軽量になり、ネットワークがDockerに比べブリッジやIPアドレスなど柔軟に設定可能になります。
【コンテナ型LXDの仕組み】
LXDに近いサービスとして、Parallels社が作ったParallels Virtuozzo Containers(ヴァーチュオゾ)などがあります。
弊社VPSサービスはこの技術を利用しております。
また、OpenVZ も同じような技術となりますが、こちらはParallels Virtuozzo Containers for Linuxのオープンソース版になります。
≪LXDのデメリット≫
LXDのデメリットとして以下が挙げられます。
- ・DockerやJailに比べれば重い。
- ・コンテナなので、ホストOSのカーネルを利用していることから制限が存在する。
と、ここまで3種類のコンテナ技術について紹介してまいりました。はじめてのコンテナ技術として注目されたJailですが、いまでは、使われることも少なくなり、現代におけるコンテナ技術としてよく利用されるのは、DockerとLXDです。
本記事では、中でもメジャーといえるDockerの使い方についても簡単に紹介していきます。
Dockerを使ってみよう
ここでは、Dockerを使ってアプリケーションのNginxを立ち上げ、ページを表示させるところまでやってみます。
Dockerのインストール
まず、はじめにDockerデーモンをインストールします。
このDockerデーモンを動かす事で、Dockerデーモン上にコンテナを作成できるようになります。
# yum -y install docker
Dockerサービス起動
先程インストールしたDockerデーモンを起動します。
# systemctl start docker
Docker実行してみる
この内容で、nginxのイメージをダウンロードして、起動まで行います。
# docker run --name nginx -d -p 8080:80 nginx
※オプションの説明
- --name でコンテナの名前を指定
- -d デーモンとして起動
- -p 8080:80 外部からの8080ポートをコンテナ内の80に渡す
ブラウザから表示
ブラウザから下記へアクセスするとnginxが表示されます。
http://[VM IP]:8080
ここまでが、Dockerコンテナを使ったシンプルなNginxの環境の作成方法です。
次回:Docker Composeについて
いかがでしたでしょうか?ぜひみなさんのDocker入門にお役立ちできればと思います。
次回の記事では、複数のコンテナを定義実行するDocker Composeを紹介します。
Docker Composeでは、Dockerを利用し複数のアプリを立ち上げ 「PHP + Apache + MySQL」などの構成を簡単に作成する事が可能になります。