最速wordpress!KUSANAGI Runs on DockerをGCP(GCE)で試す!
超高速WordPress仮想マシンとして有名なkusanagiがさくらのVPSにも対応したという記事を先日読みました。
その記事を読むまでkusanagi自体を知らなかった自分としては、え?草薙?SM○Pか?という感じで何の事かさっぱりわかりませんでした。
記事を読んだところ、kusanagiはwordpressが高速に動作するようにチューニングした仮想マシンで、内部にnginxやHHVM、MariaDB等を使用して極限?まで高速に動作するよう作られた仮想マシンのようです。
気になって使いたくなりましたので、早速対応しているパブリッククラウドを確認してみました。(2016年11月時点)
- KUSANAGI for Microsoft Azure
- KUSANAGI for SoftLayer
- KUSANAGI for AWS
- KUSANAGI for さくらのクラウド
- KUSANAGI for ConoHa
- KUSANAGI for Z.com
- KUSANAGI for S-Port
- KUSANAGI for IDCF クラウド
- KUSANAGI for Cloudn
- KUSANAGI for ALTUS
- KUSANAGI for NIFTY Cloud
あれ?Googleがない・・・。AWSでもいいのですが、ここは最近熱いGoogle Cloud Platform(GCP)を使って環境を構築したいものです。さらに調べたところ、docker-machine用のコンテナイメージ(KUSANAGI Runs on Docker)が提供されていることが分かりました。おっ、これならGCPでもいけそうだ。
ではGoogle Compute Engine(以下、GCE)を使って、KUSANAGI Runs on Dockerを構築してみます。
方法は公式HP https://kusanagi.tokyo/cloud/kusanagi-runs-on-docker/ を参考にしてます。
目次
1.dockerのホストマシンを作る
ホストマシンは手元のPCでも、クラウドサーバでも何でもよいのですが今回はGCEを使います。
GCEでインスタンスを作成する
GCEの管理画面より、スペックは何でもよいのでサーバを作ります。今回はcentos7で作りました。※cent os6よりは前はdockerがサポートされなくなっているのでcentos7を使用します。
GCEで作成する場合はAPIのアクセス権が必要になるので「すべての Cloud API に完全アクセス権を許可」にチェックをつけてサーバを作成する。途中で変更できないので作成時に指定する必要があります。
dockerインストール
### インストール
$ curl -fsSL https://get.docker.com/ | sh
### deamon起動
$ systemctl start docker
$ systemctl enable docker
### docker動作確認
$ docker run hello-world
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
535020c3e8ad: Pull complete
af340544ed62: Pull complete
(省略)
### dockerコマンドメモ
#### 停止
docker stop CONTAINER
#### 全てのコンテナ停止
docker stop $(docker ps -a -q)
#### 開始
docker start CONTAINER
例)docker start nginx
#### 起動中 コンテナ表示
docker ps
#### 停止を含む全てのコンテナ
docker ps -a
#### コンテナ削除
docker rm CONTAINER
#### 全てのコンテナ削除
docker rm $(docker ps -a -q)
2.docker-machineをGCE上に作る
docker-machineインストール
※v.0.8.2をインストールする。古いバージョンだと後続の手順でエラーになります。
$ curl -L https://github.com/docker/machine/releases/download/v0.8.2/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
ちなみに、docker-machineをバージョンアップする場合
$ rm /usr/local/bin/docker-machine
でコマンドを削除して、再度インストールすればOKでした。
GCEにdocker-machineを作成
参考:この辺りを記事を参考にdocker-machineを作りました。
* http://qiita.com/ma2saka/items/74db9393072ff9e779c7
* http://docs.docker.jp/machine/drivers/gce.html
* https://github.com/rancher/rancher/issues/4711
GCE上にdockerインスタンスを作成するのには、事前に作成元のサーバからoauthで認証をする必要があります。
$ gcloud auth loginでURLが表示されるので、ブラウザでアクセスしトークンを取得。その後取得トークンをコンソールに貼り付けて完了。正しく認証ができれば$ gcloud auth listコマンドでユーザが表示されます。
※ホストマシンがGCEではない場合は、gcloudコマンドが入っていないので、pipにてインストールをする。
### docker-machine 作成コマンド
$ docker-machine create -d google \
–google-disk-size “30” \
–google-project “GCPのプロジェクトID” \
–google-zone asia-northeast1-b \
–google-machine-type “n1-standard-2” \
–google-preemptible \
–google-machine-image “https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20161027” \
gcetest5
これで問題なければdocker-machineが作成されます。管理画面からも作成されたことを確認。足りないポート開放やIPの付与などは管理画面から実施しました。
使用できるディスクイメージは次のコマンドで確認可能
$ gcloud compute images list –uri
以下、docker-machine create時に出るエラーの備考録
エラー1 アクセス権
Running pre-create checks…
(gcetest) Check that the project exists
Error with pre-create check: “Project with ID \”XXXXX\” not found. googleapi: Error 403: Insufficient Permission, insufficientPermissions”
→間違いないなくプロジェクトはあるし、なんでだろう。。。これはホストマシンにGCEを使ったことが原因なのですが、インスタンス作成時のアクセス範囲(scope)が正しく設定できていなかった模様。「すべての Cloud API に完全アクセス権を許可」を設定してサーバを作成すればこの問題は解決されます。途中で変更はできませんのでサーバ作成時の設定する必要があります。
エラー2 docker-machineが古い
Error creating machine: Error running provisioning: exit status 6
open : no such file or directory
notifying bugsnag: [Error creating machine: Error running provisioning: exit status 6]
→docker-machine v0.7系で遭遇。バージョンを0.8.2に上げると解決する
エラー3 centOS7をインストールすると発生
Error running SSH command: Something went wrong running an SSH command!
command : netstat -tln
err : exit status 127
output : bash: netstat: command not found
・・・netstatがないからかな。
※CentOS7では、ifconfigやarp、netstatなどのよく利用しているネットワーク系のコマンドが非推奨となり、iproute2に置き換わってます。推奨されていないがnet-toolsをインストール。これでnetstatが使える。
$ yum -y install net-toolsをインストール
docker-machine動作確認
### 作成したdocker-machineにsshで接続
$ docker-machine ssh gcetest5
### docker-machine動作確認。nginxを設置
$ docker pull nginx
$ docker run -d -p 80:80 –name nginx nginx
2df9284fdf911b3e7b5453057a641a36e8cdf7263318261b601e30bd9ca35b70.
GCEの管理画面から80番で通信できるように設定を追加
$ curl http://$(docker-machine ip gcetest5)
HTMLがレスポンスとして返される
### docker machineコマンドメモ
#### バージョン確認
docker-machine version
docker-machine version 0.8.2, build e18a919
#### マシン開始、停止
docker-machine start|stop マシン名
#### マシンの確認
docker-machine ls
#### マシンの削除
docker-machine rm machine-name
3.Docker Composeをインストール
ホストマシン側にDocker Composeをインストールします。
https://github.com/docker/compose/releases/から安定してそうなバージョンを探す
インストール
$ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
4.KUSANAGI RoDをインストール、起動!
インストール、設定
$ git clone https://github.com/prime-strategy/kusanagi-docker.git
$ cd kusanagi-docker
更新HPを参考にdocker-compose.ymlの設定を作る
起動
#docker-machineの選択
$ eval $(docker-machine env gcetest5)
#docker-machineに設置
$ docker-compose -p gcetest5 up
起動するとコンソールにたくさんログが出てきます。
動作確認
http://XXX.XXX.XXX.XXXでアクセスすると、wordpressの管理画面が出ました。あとは通常のインストールと同じ流れで初期設定をします。
気になる速度は・・・ abコマンドで100リクエスト、100同時接続で試して見た結果です。
何回かやって平均的なものを選びました。マシンがn2-standardを使っていることもあり結構な速度が出ています。通常のwordperssを使った測定結果はこちらの記事「GCP/GCE 東京リュージョンを使ってベンチマークを取る!」に書いてますが、比較するとかなり速いです。KUSANAGIのBCACHEとFCACHEの両方をONにしているので、その辺りも速度に繋がっているのでしょうか。
Server Software: nginx Server Hostname: XXX.XXX.XXX.XXX Server Port: 80 Document Path: / Document Length: 11002 bytes Concurrency Level: 100 Time taken for tests: 0.783 seconds Complete requests: 100 Failed requests: 0 Total transferred: 1128100 bytes HTML transferred: 1100200 bytes Requests per second: 127.68 [#/sec] (mean) Time per request: 783.207 [ms] (mean) Time per request: 7.832 [ms] (mean, across all concurrent requests) Transfer rate: 1406.60 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 5 7 1.0 7 12 Processing: 52 395 196.5 402 730 Waiting: 15 368 208.1 373 722 Total: 60 402 196.4 410 737
dockerなので、自由にミドルウェアを簡単に差し替えできるのが良いですね。今回はPHP7で動かしましたが、HHVMとかで動かすともっと早くなるかも。
次回はKUSANAGI RoDを使って、ひとつサイトを作って見たいと思います。