※当サイトの記事には、広告・プロモーションが含まれます。

Windows 10 Home で KUSANAGI Runs on Dockerを試みる

Dockerを使えば、WordPress高速化界隈で有名なKUSANAGI(プライム・ストラテジーさん開発)をローカル環境に構築できるということでチャレンジしてみました。

⇩  Docker環境がない方は下記サイトが参考になると思います。 

Docker Toolboxを使ってWindows10 HomeでDocker環境を構築する - write ahead log

⇩  gitが使える環境も用意しといたほうが良いかと。

私家版 Git For Windowsのインストール手順 | OPC Diary

自分の環境は、 Windows 10 Home(64bit版)

docker -v
Docker version 17.05.0-ce, build 89658be
VBoxManage -v
5.1.18r114002
git --version
git version 2.13.0.windows.1    

という感じです。

仮想マシン作成でエラー

何なんでしょうね、今回もハマりにハマっていく未来が見えてきますね。

KUSANAGI Runs on Docker – KUSANAGI のコマンドを実行。

docker-machine create --driver virtualbox --virtualbox-memory=8192 --virtualbox-cpu-count=2 kusanagi-machine    

そして、エラー。

f:id:ts0818:20170527112538p:plain

Error creating machine: Error in driver during machine creation:
 Unable to start the VM: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe startvm kusanagi-machine --type headless failed:
VBoxManage.exe: error: The virtual machine 'kusanagi-machine' has terminated unexpectedly during startup with exit code 1 (0x1).
  More details may be available in 'C:\Users\Toshinobu\.docker\machine\machines\kusanagi-machine\kusanagi-machine\Logs\VBoxHardening.log'
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MachineWrap, interface IMachine

『C:\Users\ユーザー名\.docker\machine\machines\kusanagi-machine\kusanagi-machine\Logs\VBoxHardening.log』の VBoxHardening.logに詳しいこと書いてあるよ、らしいので見ました。

Driver is probably stuck stopping/starting. Try 'sc.exe query vboxdrv' to get more information about its state. Rebooting may actually help.
2ab8.1660: supR3HardenedWinCheckChild: enmRequest=2 rc=-101 enmWhat=3 supR3HardenedWinReSpawn: NtCreateFile(\Device\VBoxDrvStub) failed: 0xc0000034 STATUS_OBJECT_NAME_NOT_FOUND (0 retries)

Driver is probably stuck stopping/starting. Try 'sc.exe query vboxdrv' to get more information about its state. Rebooting may actually help.
2ab8.1660: Error -101 in supR3HardenedWinReSpawn! (enmWhat=3)
2ab8.1660: NtCreateFile(\Device\VBoxDrvStub) failed: 0xc0000034 STATUS_OBJECT_NAME_NOT_FOUND (0 retries)

『Try 'sc.exe query vboxdrv'』コマンドを実行してみて、ってあるんで実行。

⇩  sc(sc.exe)コマンドなんて知らなんだ

Tech TIPS:scコマンドでWindows OSのサービスを確認/一覧/開始/停止する - @IT

f:id:ts0818:20170527114202p:plain

で、vboxdrvなんて無いらしい、駄目じゃん...。 

⇩  WindowsでのVirtualBoxの不具合解消法は下記サイトへ

VirtualBoxが起動しないときの対処法

⇩  下のサイトは仮想マシンに入れてからの話なのかな?

【Virtualbox】vboxdrv setupエラー | わいのメモ帳 Steamとか

で、C:¥Program Files¥Oracle¥VirtualBox¥drivers¥USB¥filter¥VBoxUSBMon.inf ファイルを右クリックで『インストール』。

f:id:ts0818:20170527120757j:plain

『OK』を選択。

f:id:ts0818:20170527120212j:plain

C:¥Program Files¥Oracle¥VirtualBox¥drivers¥vboxdrv¥VBoxDrv.inf ファイルを右クリックで『インストール』。 

f:id:ts0818:20170527120218j:plain

『OK』。

f:id:ts0818:20170527120215j:plain

再び、『sc.exe query vboxdrv』コマンド実行。KERNEL_DRIVERって仮想マシンのコア的なものでは...それがインストールされてなかったって致命的な気が...。

f:id:ts0818:20170527120608j:plain

止まってるのは分かったけど、どうやって起動させていいのか分からない。

⇩  下記サイトにありました、ありがとうございます。 

Docker 1.10.2 (Windows) インストール備忘録 - ナチュラル @rch850

 

sc start vboxdrv

エラー。

f:id:ts0818:20170527124054p:plain

アクセス権ないらしい。

sc.exe でサービスのスタートアップの種類を変更する - 日々是笑心

どうやら、git bashを管理者権限で実行してないとまずかったみたいです。

ConEmuのタブ(git bash)上で右クリックし「Restart or duplicate」>「Restart as Admin」を選択。

f:id:ts0818:20170527130650j:plain

管理者権限で実行

sc start vboxdrv

f:id:ts0818:20170527130227j:plain

動き出しました。今度は仮想マシンを起動!

f:id:ts0818:20170527131348j:plain

 『docker-machine env』コマンドを実行しろ、ということですかね。

docker-machine env kusanagi-machine

f:id:ts0818:20170527132030j:plain

また、エラー!

⇩  下記サイトによると、TLS証明書を再度作成すればOKのようです。

"docker-machine env"実行エラー - Error running connection boilerplate: Error checking and/or regenerating the certs: - Qiita

いざいざ、

docker-machine regenerate-certs kusanagi-machine

f:id:ts0818:20170527132820j:plain

docker-machine env kusanagi-machine

おお~!なんか仮想マシンの起動準備ができたっぽいですぞ。

f:id:ts0818:20170527132814j:plain

 そいじゃ、『Run this command to configure your shell:』って言ってるので、コマンドを実行してみましょう。

$ eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env kusanagi-machine)

結果は?

$ docker-machine ls
NAME               ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
kusanagi-machine   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.05.0-ce

f:id:ts0818:20170527133841j:plain

仮想マシン、動きました! 

Docker-compose で KUSANAGI RoD 構築

ようやく、KUSANAGIを構築するところまできましたね。

とりあえず、仮想マシン内に入りますか。(仮想マシン内に入る必要はないので、このへんの手順は飛ばしちゃってください。)

docker-machine ssh kusanagi-machine

f:id:ts0818:20170527141842j:plain

CoreOSというものが存在するらしい..知らんかった。

cat /etc/os-release

Docker上でCentOSを動かす - Qiita

f:id:ts0818:20170527143001j:plain

Windows上で動かすためのLinux仮想マシンに入ってるわけですね。まだ、CentOSUbuntuといったOSが入ってない状態ってことですかね?

とりあえず、一旦、仮想マシンの外に退避。

exit

ホスト側で良いのか分からんけど、KUSANAGIを構築するための設定ファイルを持ってくる。

git clone https://github.com/prime-strategy/kusanagi-docker.git
cd kusanagi-docker
ls -A                                

f:id:ts0818:20170527135352j:plain

C:¥Users¥ユーザー名¥kusanagi-docker ができるみたい。

f:id:ts0818:20170527140739j:plain

KUSANAGIのプロビジョニング – KUSANAGI

 によると、docker-compose.ymlの『kusanagi-engine』の項目の「FQDN」の部分をlocalhostに変更しました。で、docker-compose.ymlの設定を適応させます。

eval $(docker-machine env kusanagi-machine)

そして、docker-compose.yml を使用して、docker-machine で dockerを起動。

docker-compose -p kusanagi-machine up

実行すると、またエラー。MariaDBの処理で止まる。

『 [Warning] 'proxies_priv' entry '@% root@b8166aa4b8bf' ignored in --skip-name-resolve mode.』

で調べてると、skip-name-resolveを使うとホスト名の解決を行わなくなるらしいのですが、FQDN」の部分をlocalhostに変更しちゃってるんでした。ただ、Macでやってる人は、localhostでいけてるみたいなんですよね。

skip-name-resolveを書くとDBに接続できない場合 – netcreates. blog

超PHPer | Mac上にKUSANAGIを構築する

 

f:id:ts0818:20170527175352j:plain

とりあえず、Ctrl + Cで処理を中断するしかない状態に。

いままでの流れイメージ図

f:id:ts0818:20170528162217p:plain

docker-compose.ymlのkusanagi-nginx:のenvironment:のFQDNに何を指定すればいいのか

そもそも、FQDNの設定が、すごい曖昧なんですよね、本番環境だと本番側のサーバで用意されているものを設定すれば良いみたいなんですが、ローカル環境の場合の設定が分かりづらいですね。

で、仮想マシン内の、/etc/hostsファイルにURLが記述してあると下記サイトにあり、

virtualboxのIPアドレスを変更する - Qiita

Dockerの公式サイトっぽいところでは、

DOCKER_HOST のアドレスはローカルホストのアドレス(0.0.0.0)ではないためです。そのかわり Docker 仮想マシンのアドレスを使います。

  1. default VM のアドレスを取得します。
$ docker-machine ip default

Mac OS X — Docker-docs-ja 1.13.RC ドキュメント

ってなっていて、 /etc/hosts ファイルとVMのアドレスのIPが異なるという...どうすりゃいいっちゅうねん!

/etc/hosts

f:id:ts0818:20170528102822j:plain

VM のアドレス 

f:id:ts0818:20170528114004j:plain

⇩  下記サイトによると、/etc/hostsファイルにホスト追加でいけるとか

mog project: Docker: Pull From the Private Registry Failed with I/O Timeout

 

原因は...

間際らしいんですが、 『 [Warning] 'proxies_priv' entry '@% root@b8166aa4b8bf' ignored in --skip-name-resolve mode.』が出ていても問題なかったようです。

f:id:ts0818:20170528163751j:plain

この状態で、別のgit bashを起ち上げて、

docker ps

普通に各々のdockerコンテナがインストールされて動いてました。

f:id:ts0818:20170528163754j:plain

で、ブラウザ側でアクセスするときに、仮想マシンのIPでアクセスします。なので仮想マシンのIPを確認しときます。

docker-machine ip kusanagi-machine 

f:id:ts0818:20170528163758j:plain

ブラウザで『http://192.168.99.100/』にアクセスしたところ無事いつものインストール画面が表示されました。localhost/、localhost:80/、localhost:443/はともにアクセスできなかったですね。

f:id:ts0818:20170528164336j:plain

ここからは、プライム・ストラテジーさんの

KUSANAGI Runs on Docker – KUSANAGI に記述してる『WordPress 設定』の通りに進めていけばでいけます。

f:id:ts0818:20170528164337j:plain

このへんはWordPressのログイン情報ですね。

f:id:ts0818:20170528164339j:plain

インストールしちゃいましょう。

f:id:ts0818:20170528164340j:plain

インストール後、ログインすると、いつもの管理画面に。

ただ、速度計みたいなものが設置されてますね。プライム・ストラテジーさんがKUSANAGIの技術に自信を持っている様子が伺えますね、素晴らしい!

f:id:ts0818:20170528164341j:plain

サイトのアドレスも仮想マシンIPアドレスになっちゃってますが、ドンマイ!

f:id:ts0818:20170528172231j:plain

なんとか、Windowsのローカル環境にKUSANAGIをインストールはできましたが、仮想マシンIPアドレスでのアクセスになってしまっているので、Macの人がやってたみたいにlocalhostでインストールしたかったですね。

一応、今回自分が使った最終的なdocke-compose.ymlの情報です。

version: '2'

services:
  kusanagi-data:
    container_name: kusanagi-data
    image: busybox
    restart: always
    stdin_open: true
    tty: true
    volumes:
      - /var/lib/mysql
      - /etc/nginx/conf.d
      - /etc/httpd/conf.d
      - /etc/kusanagi.d
      - /home/kusanagi
    command: /bin/sh

  kusanagi-nginx:
    container_name: kusanagi-nginx
    image: primestrategy/kusanagi-nginx:1.10.0-1
    environment:
      PROFILE: kusanagi
      FQDN: localhost
      WPLANG: ja
      BCACHE: "off"
      FCACHE: "off"
    volumes_from:
      - kusanagi-data
    links:
      - kusanagi-php7:php
      - kusanagi-mariadb:mysql
    ports:
      - "80:80"
      - "443:443"

  kusanagi-mariadb:
    container_name: kusanagi-mariadb
    image: mariadb:10.0.24
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
      MYSQL_USER:     user
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: wordpress
    volumes_from:
      - kusanagi-data

  kusanagi-php7:
    container_name: kusanagi-php7
    image: primestrategy/kusanagi-php7:7.0.6-1
    links:
      - kusanagi-mariadb:mysql
    volumes_from:
      - kusanagi-data

FQNDをlocalhostにしてるのに、仮想マシンIPアドレスでしかアクセスできませんでしたが...

 

今回もハマりにハマって無駄な時間ばかりかかってしまいましたが、Windowsのローカル環境にKUSANAGIをインストールするとこまでできてよかったです。

インストールが簡単なWordPressでここまで苦戦するのも残念無念ですが...。 

今回はこのへんで。