DockerでWordPressを動かす #2

2014.11.10

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

概要

前回の記事で、Dockerを使ってCentOS 6のコンテナを立ち上げることができるようになりました。
今回は、CentOS 6のコンテナにApache, MySQL, PHPをインストールし、その状態をイメージとして保存してみます。
ついでにローカルのブラウザからコンテナにアクセスしてみます。

Dockerコマンドの説明

今回使用するDockerコマンドについて説明します。

イメージからコンテナを起動してターミナルに入る

docker run -i -t イメージ名(:タグ名) /bin/bash

/bin/bashと指定していますので、bashがフォアグラウンドで立ち上がります。

コンテナのターミナルを抜け出す場合は、ctrl+pctrl+qと入力します。
exitctrl+dで終了させてしまうと、フォアグラウンドで動いているbash自体が終了してしまいます。
docker runで指定したコマンド(今回はbash)がフォアグラウンドでなくなった瞬間に、コンテナは終了してしまいますので注意してください。

一度抜けだしたコンテナのターミナルに再度入る

docker attach コンテナ名

ただし、コンテナのフォアグラウンドでシェルが動いている必要があります。
起動中のコンテナの名前はdocker psで確認できます。

コンテナをコミットし、イメージとして保存する

docker commit コンテナ名 新規イメージ名

コンテナにApache, MySQL, PHPをインストールする

まずはCentOS 6のイメージからコンテナを作り、ターミナルにアタッチします。

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

CentOS 6にApache,MySQL,PHPをインストールします。ここではインストール手順の一例を記述します。

yum -y install sudo openssh-server nmap python-setuptools ntp
yum -y httpd php mysql mysql-server gd php-mysql php-gd php-mbstring
echo "ServerName 127.0.0.1:80" >> /etc/httpd/conf/httpd.conf
echo "Hello World ^o^" > /var/www/html/index.html
sed -e "/^\[mysqld\]$/a character-set-server = utf8" /etc/my.cnf
mysql_install_db
/etc/init.d/mysqld start
mysqladmin -u root password "password"
/etc/init.d/mysqld stop

これで、コンテナにLAMP環境が構築出来ました。

コンテナをコミットしてイメージ化する

ctrl+pctrl+qでターミナルからデタッチし、先ほどインストールを済ませたコンテナの名前を確認しましょう。

 docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf98ea967d74
centos:centos6 "/bin/bash" 2 hours ago Up About an hour madoka_sayaka

コンテナ名がmadoka_sayakaであることが確認できました。
それでは、このmadoka_sayakaコンテナをコミットして、centos6_lampという名前のイメージにしましょう。

 docker commit madoka_sayaka centos6_lamp

これで、LAMP環境がインストールされた新しいイメージcentos6_lampが作成できました。

ポートフォワード設定を行う

ローカルからコンテナにアクセスするのは

  • ローカル → boot2docker-vm → コンテナ

という流れになっています。

ローカル → boot2docker-vm のポートフォワード設定

まず、boot2docker-vmを停止させます。

 boot2docker down

ローカルのlocalhost(127.0.0.1)、ポート8080へのアクセスを、boot2docker-vmのポート8080につなげるよう設定します。

 VBoxManage modifyvm "boot2docker-vm" --natpf1 "HTTPD,tcp,127.0.0.1,8080,,8080"

再びboot2docker-vmを立ち上げます。

 boot2docker up

boot2docker-vm → コンテナ のポートフォワード設定

docker runコマンドの-pオプションで、コンテナを起動するときに設定します。

docker run -p VMのポート:コンテナのポート ...

自作イメージを用いてコンテナを起動する

先ほど作ったcentos6_lampイメージを使って、コンテナを立ち上げます。
この際、VMのポート8080をコンテナのポート80(Apache)で受け取るように設定します。

 docker run -i -t -p 8080:80 centos6_lamp /bin/bash

コンテナに入り、Apacheを起動します。

 apachectl start

これで、localhost:8080を待ち受けるコンテナが設定できました。

試しにローカルのブラウザからhttp://localhost:8080/へアクセスしてみます。

docker-apache-screenshot-001

確認できました!

続く

今回は、コンテナにLAMP環境を構築し、イメージとして保存し、イメージからLAMP環境を立ち上げ、ローカル環境からアクセスできるようにするところまで記載致しました。
次回は、環境構築をDockerfileで自動化し、実際にWordpressを動かしてみます。