今回から2回に渡り、Dockerの概要から基本的な使い方の説明までを行います。なお、Dockerの使い方の説明については全てCentOS7での操作手順となります。
目次
Docker(ドッカー)とは
Dockerは、Solomon Hykes氏が開発したコンテナ型仮想化の技術です。
Dockerでは、単純にコンテナ型仮想化を実現しているだけではなく、設定済みのコンテナをリポジトリに登録し、配布することができます。
Dockerのリポジトリは、インターネット上でも公開されていて、様々な定義済みのイメージを入手することができます。
Dockerでは、まずリポジトリからイメージを入手します。イメージは、いわば必要なファイルのアーカイブです。コンテナは、このイメージと、その上で動作させるアプリケーションをセットにして起動します。逆に言えば、それ以外のプログラムは一切動作しません。
コンテナ型仮想化
Dockerがどんなものかひとことで言ってしまえば、「アプリケーションを動かす環境を簡単に作れるツール」です。
Dockerを導入して、Webアプリケーションを開発しておけば、ミドルウエア設定やライブラリなどもすべて含めて、現在のサーバの開発環境と全く同じ環境を、別のサーバ上で動かすことができます。
ハイパーバイザー型の仮想化とコンテナ型の仮想化の違い
サーバ仮想化の手段として広く使われているのは、ハイパーバイザーを使った仮想化です。ハイパーバイザーとは、仮想化を実現するソフトウェアのことで、ハードウェアに搭載されているプロセッサーやメモリ、ストレージの容量を細かく分割して複数のユーザーに割り当てる機能を持っています。
「サーバ仮想化」を実現するもう1つのやり方として、コンテナを使う方法があります。この方法は、1つのOSにコンテナといわれる「独立したサーバと同様の振る舞いをする区画」を複数作り、それを個別のユーザーやサービスに割り当てます。利用するユーザーやサービスから見れば、別々のサーバがあたかも独立した個別サーバであるかのように見える点は、ハイパーバイザーを使う場合と同様です。異なるのは、同じOS上で実現するので、全てのコンテナは同じOSしか使えない点です。
ハイパーバイザー型の仮想化とコンテナ型の仮想化の違いをまとめると下記のようになります。
Dockerの利点
・動作が軽い
利点として動作が非常に軽いということが挙げられます。
従来の仮想化技術はやはり物理環境と比較すると「起動が遅い」「処理速度が落ちる」といった弊害がありました。
OS上のアプリケーションを操作する場合、ハードウェア仮想化においては、仮想化されたハードウェアおよびハイパーバイザーを経由して処理が行われます。この経由している分だけ、通常の物理マシンよりも処理に余分な時間(オーバーヘッド)を要します。
一方で、コンテナ型仮想化はカーネルを共有しており、各プロセスが処理を行うのと同じ程度の時間しかかからないため、ほとんどオーバーヘッドがありません。
・どこでも使える
もう一つの利点としては、どこでも使えるという点が挙げられます。
Linuxカーネルを使っている環境の上であればどこでも動作するため、プラットフォームを意識することなく利用できます。
例えば、AWSのイメージをGoogleのクラウドに移動させる機能などは、各クラウドベンダーでは実装されていませんが、Dockerでイメージのやり取りをすることによって、異なるプラットフォーム間でイメージを共有できます。
Dockerの欠点
Docker 上のコンテナはホストの kernel をそのまま利用します。 そのため、kernel を共有できる Red Hat Enterprise Linux や Ubuntu は共存できるものの、根本的に kernel の異なる Windows Server はホストとなる Linux 上で動かすことはできません。
HyperVisor 型の仮想化はゲストの Kernel 自体も仮想的に動作させるため、Linux 上で Windows を動かしたり、またその逆も実現可能です。
これらの特徴から、Docker には以下の様な欠点があると言えます。
- 提供できるホストの種類が少ない(Windows Serverはできない)
- 完全仮想化に比べて、管理者が学ぶべきことが多い
Dockerの設定方法
Dockerの使い方についての説明に入ります。基本的な操作については次回の記事で紹介しますので、本記事ではインストールして起動するまでの手順を紹介します。
設定の流れ
- Dockerをインストール
- リポジトリからイメージを入手
- イメージを起動
インストール
Dockerを利用するためには、dockerパッケージをインストールする必要があります。CentOS7のインストールDVDには同梱されていませんが、CentOSの標準インストールで利用可能ですので、yumコマンドを使ってインストールすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# yum install docker =========================================================================================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 =========================================================================================================================================================================================== インストール中: docker x86_64 1.8.2-10.el7.centos extras 10 M 依存性関連でのインストールをします: audit-libs-python x86_64 2.4.1-5.el7 base 69 k checkpolicy x86_64 2.1.12-6.el7 base 247 k docker-selinux x86_64 1.8.2-10.el7.centos extras 63 k libcgroup x86_64 0.41-8.el7 base 64 k libsemanage-python x86_64 2.1.10-18.el7 base 94 k policycoreutils-python x86_64 2.2.5-20.el7 base 435 k python-IPy noarch 0.75-6.el7 base 32 k setools-libs x86_64 3.3.7-46.el7 base 485 k 依存性関連での更新をします: device-mapper x86_64 7:1.02.107-5.el7 base 251 k device-mapper-event x86_64 7:1.02.107-5.el7 base 167 k device-mapper-event-libs x86_64 7:1.02.107-5.el7 base 169 k device-mapper-libs x86_64 7:1.02.107-5.el7 base 304 k device-mapper-persistent-data x86_64 0.5.5-1.el7 base 350 k libsemanage x86_64 2.1.10-18.el7 base 123 k lvm2 x86_64 7:2.02.130-5.el7 base 1.0 M lvm2-libs x86_64 7:2.02.130-5.el7 base 872 k policycoreutils x86_64 2.2.5-20.el7 base 803 k トランザクションの要約 =========================================================================================================================================================================================== インストール 1 パッケージ (+8 個の依存関係のパッケージ) 更新 ( 9 個の依存関係のパッケージ) 総ダウンロード容量: 16 M Is this ok [y/d/N]: |
サービスの起動
Dockerを使うためには、サービスを起動する必要があります。CentOSにおけるDockerのユニット名は、docker.serviceです。dockerは、スタンドアロンのデーモンプロセスとして常駐します。
サービスの自動起動
dockerパッケージをインストールした時点では、dockerサービスは自動的に起動されるように設定されていません。dockerを自動的に開始したい場合には、自動機能の設定を行って下さい。
1 2 |
# systemctl enable docker.service ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service' |
サービスの手動制御
dockerは、systemdによって管理されます。そのため、systemctlコマンドを使って制御することができます。なお、docker.serviceは、reloadコマンドをサポートしていません。
1 |
# systemctl start docker.service |
次回は、Dockerの基本操作について詳しく紹介します。それでは!