コンテナ型の仮想環境の1つで、最近人気の Docker を CentOS で導入し、Apache HTTPD サーバーを動かしてみるまでの手順を紹介します。以下の例ではホストの CentOS は6.6(x86_64) を使っています。
docker-whale-home-logo


ところで、最近流行りの Docker を簡単に説明しておきます。上記で「仮想環境の1つ」と紹介しましたが、いわゆる VM を使いません。その意味では「完全な意味での仮想マシン、ではない仮想環境」です。仮想マシンでは1台のサーバーをまるごと仮想化して、そこで動く OS を選ぶこともできるし、その OS 内にインストールされるミドルウェアやアプリケーションソフトウェアも完全に仮想マシンごとに分離されて独立しています。その代わり、例えば起動時などはこの仮想マシンをブートプロセスから起動することになるので通常のマシンと同等の時間がかかりますし、1台の仮想マシンを動かすのに必要なリソースは仮想環境であってもなくても変わりません。 一方、コンテナ型の Docker の場合、仮想環境はホストマシンの1プロセスとして(プロセス空間やファイル空間が制限された状態で)動きます。そのため OS ごと動かすハイパーバイザー型(VM型)の仮想環境と比べてオーバーヘッドが少なく、軽量に動かすことができる、というメリットがあります。 また上記のように OS の1プロセスとして動くので、例えばホストOS自体が仮想環境である Amazon EC2 や VPS など、(ハイパーバイザー型)仮想サーバーの上で更に Docker を動かす、といったことも可能です。 その代わり OS を自由に選ぶということはできず、Linux(Ubuntu, RHEL, CentOS, ..) に限られる、という制約があります。


ではこの Docker 環境を CentOS 上で整えるための導入手順を紹介します。といっても意外と簡単です。

まずは docker のインストールです。CentOS 向けには EPEL リポジトリから提供されているので、必要であれば EPEL リポジトリの追加から行います:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm (EPELリポジトリ追加)
# yum -y install docker-io (Dockerインストール)
# /etc/init.d/docker start (Docker 起動)
# chkconfig docker on (Docker 自動起動ON)
これでインストール及び起動まで完了です。KVM などと比べると超簡単。


実際に Docker を使ってみます。公式 centos イメージの centos6 をインストールして、コンテナ内で /etc/redhat-release の内容を確認してみます:
# docker run -it centos:centos6 cat /etc/redhat-release
  :
(初回実行時はここで公式 centos6 イメージのダウンロードが開始される)
  :
CentOS release 6.6 (Final)

というわけで、現時点では公式 centos6 イメージが 6.6 を使っていることが分かりました。

インストールも動作確認もできましたが、せっかくなのでもう少し実用的な作業を紹介しましょう。コンテナ内のシェルコンソールにログインして Apache HTTPD でもインストールしてみましょうか。

まずはコンテナ内のシェル(/bin/bash)を起動し、Apache HTTPD をインストール&起動し、index.html ファイルを作成します:
# docker run -it centos:centos6 /bin/bash 
(ここから上はホストOS)
(ここから下はコンテナ内)
# yum install -y httpd
# /etc/init.d/httpd start
# echo "Hello CentOS 6 on Docker" > /var/www/html/index.html

更にコンテナ内の IP アドレスを確認します:
# ifconfig
eth0   Link encap:Ethernet  HWaddr 02:42:AC:11:00:03
       inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0 ←この例だと172.17.0.3 がコンテナのアドレス
       inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link
             :
# exit
(ここから上はコンテナ内)
(ここから下はホストOS)
# 

IP アドレスが分かったのでホストOSからブラウザでアクセスしてみます:
2014120701


ちゃんと動いてますね。Apache HTTPD の導入も成功しました。Apache HTTPD 以外のソフトを導入する場合も同様です。