DockerでWordPressを動かす #1

2014.11.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

概要

簡単に仮想環境を構築、共有できるDockerを使用して、LAMP環境を構築する手順を記載します。最終的に、構築した仮想環境でWordpressが動くようになることを最終的な目標とします。

今回は、Dockerのおおざっぱな概要をつかみ、MacOSからDockerを扱うことができる環境を構築するまでを目標とします。

Dockerの概要

Dockerのしくみ

詳細については、「はじめてのDocker on Mac OS X」に素晴らしい解説がありますので、そちらに譲ります。
ここでは、おおざっぱな仕組みだけを解説します。

  • イメージ(OSイメージ)を元に、コンテナ(仮想環境)を立ち上げる。
  • コンテナはいくつでも立ち上げることが可能。
  • コンテナ上で作業を行い、変更を加えた後、そのコンテナを新規イメージとしてコミット(保存)することが可能。
  • 構築したイメージを共有するのがとっても楽。

Dockerのシステム構成イメージ図

濃い青の箱が1回のコミットを表しています。BaseImageから始まって、コミット毎にイメージの差分が追加されていく感じです。

Dockerはどこで動くのか

Linux上で動きます。ホストOSとしてはCoreOSAtomicなどが多く利用されているようです。
MacOSやWindowsから利用する場合は、Dockerを動かすためのVMを用意し、その上で動かします。
今回は、Dockerを動かすためのVMを、ええかんじに立ち上げて、ええかんじにローカル環境と接続してくれるboot2dockerを使用する方法を説明します。

Docker環境の構築

boot2dockerのインストール

Homebrewを用いてインストールします。

brew install docker boot2docker

boot2dockerを使用してDockerホストVMを立ち上げ

boot2dockerには、vagrantライクなコマンド郡が用意されています

初回立ち上げ時のみ、ホストOSのイメージを取得する必要があります。

boot2docker init

イメージの取得が終わったら、boot2docker-vmを立ち上げましょう。

boot2docker up

立ち上げに成功した場合、次のような文章が表示されます。

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.1.100:2376
    export DOCKER_CERT_PATH=/Users/yourname/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

実行環境によってyourname192.168.1.100:2376の部分は異なりますので注意して下さい。
これは「環境変数を設定しろ」ということですので、export DOCKER...の3行をそのまま実行します。

export DOCKER_HOST=tcp://192.168.1.100:2376
export DOCKER_CERT_PATH=/Users/yourname/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

注 これらの環境変数はroot権限で参照されますので、あなたの~/.bash_profileに記述しても意味はありません。

設定が終わったら、Dockerがboot2docker-vmに正しく接続されているかを確かめましょう。

docker version

表示結果の中に、サーバーの情報がみあたるならば、設定は成功しています。

Server version: 1.3.1
Server API version: 1.15

これでDockerを使用する準備が整いました。

CentOS 6のコンテナを起動してみよう

せっかくなので、CentOS 6のイメージを取得し、コンテナとして実行してみましょう。
まずは、Docker Hub RegistryからCentOS 6のイメージを取得します。
docker pull イメージ名(:タグ名)を使用して、イメージを取得することができます。
どのようなタグが用意されているかは、オフィシャルレポジトリのページに記載されています。

docker pull centos:centos6

すると、ダウンロードが始まり、最終的に次のような結果が得られると思います。

centos:centos6: The image you are pulling has been verified
511136ea3c5a: Pull complete
5b12ef8fd570: Pull complete
70441cac1ed5: Pull complete
Status: Downloaded newer image for centos:centos6

正しく取得されたかどうか確かめるためには、次のように入力しましょう。

docker images
REPOSITORY          TAG                 IMAGE ID              VIRTUAL SIZE
centos              centos6             70441cac1ed5          215.8 MB

CentOS 6が正しく取得されていることが確認できます。

ダウンロード時に表示されていた、511136ea3c5a5b12ef8fd570は、70441cac1ed5 (centos:centos6)の親(差分元)イメージであるため一覧には表示されません。

それではCentOS 6のコンテナを立ち上げてみましょう。

docker run -i -t centos:centos6 /bin/bash

バージョンを確認してみます。

$ cat /etc/redhat-release

CentOS release 6.6 (Final)

CentOS 6.6が起動していることがわかります。
この状態でctrl+pctrl+qと入力し、仮想環境から抜け出しましょう。
起動中のコンテナ一覧を表示して、先ほど立ち上げたCentOS 6のコンテナが起動していることを確認します。

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
229a8dfa5716        centos:centos6      "/bin/bash"         8 minutes ago       Up 8 minutes                            evil_nobel

evil_nobelという名前でコンテナが起動していることが確認できます(名前はランダムで設定されます)。
コンテナのターミナルにもう一度入ってみましょう。evil_nobelの部分は各自の環境に合わせて下さい。

docker attach evil_nobel

何度かEnterを入力すると、再度コンテナの中に入ったことが確認できると思います。

コンテナのbashを終了させます。

exit

フォアグラウンドで動いているプロセスが終了すると、コンテナは終了します。

docker ps

実行中のコンテナはひとつもありませんので、何も表示されないことを確認して下さい。

続く

今回は、MacOSからDockerを扱うことができる環境を構築するところまでを記載致しました。
次回は、LAMP環境を構築して、ローカルのブラウザからページを表示してみます。