2019年8月、KUSANAGI Rus on Docker(以降RoD)をリリースしました。RoDは、KUSANAGIと同じ環境をアプリケーションコンテナDocker上で動かすツールです。
KUSANAGI RoDの概要
RoDは、httpd(Apache/nginx)/PHP/MariaDBを機能要素として、 それぞれコンテナイメージとしてhubs.docker.comに用意しています。RoDでは複数コンテナをdocker-composeで制御するため、docker-compose.ymlファイルの作成を行います。そしてdocker-composeでKUSANAGI環境を立ち上げ、WordPressなどの構築を行います。
下記の図は、RoD の概念図となります。
docker-compose で、httpd/php/db というコンテナが作成されます。
httpdとphpは内部ネットワークで接続し、外部からの接続は行われません。
DBはデフォルトではunix socket を使用し、ネットワーク通信を行いません。DB情報はDockerボリューム(Docker Host内の恒久的なディスク領域)であるdbに配置され、PHPとDBはボリュームdbをマウントすることで、socket通信を行います。
phpは、httpdからのリクエストからPHPの実行結果を返します。phpとhttpdは、DocumentRoot以下をDockerボリュームkusanagiに配置されます。
configはDockerとDocker外のやり取りを行うためのDockerです。WordPressの場合はwpcliを、それ以外はkusanagi-config が使用されます。
ftpdは、KUSANAGI同様にWordPressのみ使用し、WordPressからプラグイン・テーマのアップロードに使用されます。
KUSANAGI RoDのインストール方法
README.md にある通り、kusanagi RoDはkusanagi-docker コマンドによりコントロールされます。kusanagi-dockerをインストールするために以下のコマンドを実行します。
curl https://raw.githubusercontent.com/prime-strategy/kusanagi-docker/master/install.sh | bash
このとき注意していただきたいのは、動作要件です。
- bash(4.x 以上)
- Git
- sed
- awk
- grep
- gettext(gettext.sh, envsubst)
- curl
- docker(over 18.0x)
- docker-compose
- docker-machine
docker-machineは必須でありません。ただしDocker Server が用意されていない場合などで、docker-machineは必要になります。
それ以外すべてのコマンドが、whichコマンドで見つけられることを動作要件としています。macOSではHomebrewなどでbash/gettextなどのコマンドをインストールする必要があると思いますが、PATHも設定しておいてください。
KUSANAGI RoDでWordPressを作成する
念の為、docker version
で、Dockerが動作する状態になっていることを確認してください。以下実行例です。Serverに接続できていることを確認してください。
$ docker version
Client: Docker Engine - Community
Version: 19.03.1
API version: 1.40
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:21:05 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.0-rc2
API version: 1.40 (minimum version 1.12)
Go version: go1.12.5
Git commit: f97efcc
Built: Wed Jun 5 01:42:10 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
次に、以下のようにコマンド実行してください。FQDNとしてwp.localhost、ターゲットディレクトリとしてwordpressを指定します。
$ kusanagi-docker provision --fqdn wp.localhost wordpress
Creating network "wordpress_default" with driver "bridge"
Creating volume "wordpress_database" with default driver
Creating volume "wordpress_kusanagi" with default driver
Creating wordpress_config ...
Creating wordpress_httpd ...
Creating wordpress_config
Creating wordpress_httpd ... done
Creating wordpress_php ...
Creating wordpress_ftp ...
Creating wordpress_certbot ...
Creating wordpress_db ...
Creating wordpress_php
Creating wordpress_ftp
Creating wordpress_certbot
Creating wordpress_ftp ... done
MYSQLの初期化を待っています....
WordPressを配置します
Downloading WordPress 5.2.3 (en_US)...
Warning: Failed to create directory '/.wp-cli/cache/': mkdir(): Permission denied.
md5 hash verified: bde83b629bc7a833f7000bc522cde120
Success: WordPress downloaded.
Success: Generated 'wp-config.php' file.
sendmail: can't connect to remote host (127.0.0.1): Connection refused
Success: WordPress installed successfully.
The file will have its original line endings in your working directory.
INFO: 完了しました。
これで、./wordpressというディレクトリが作成され、そこでWordPressがDocker上で起動されています。
以下は、wordpressディレクトリに移動して行います。
$ cd wordpress/
$ kusanagi-docker status
Name Command State Ports
---------------------------------------------------------------------------------------------------------
wordpress_certbot certbot --version Exit 0
wordpress_config docker-entrypoint.sh wp -- ... Exit 0
wordpress_db docker-entrypoint.sh mysqld Up
wordpress_ftp /bin/sh -c /docker-entrypo ... Up
wordpress_httpd /docker-entrypoint.sh /usr ... Up 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp
wordpress_php /usr/local/bin/docker-entr ... Up
kusanagi-docker statusで、現在のコンテナの状況がわかります。コンテナ名はターゲットディレクトリ名が頭に付きます。wordpress_httpd は、Dockerホストから80/443ポートがポートフォワードされます。
そのため、/etc/hostsに以下のように記述してブラウザで確認すると、WordPress画面を確認できます。
$ cat /etc/hosts
127.0.0.1 localhost wp.localhost
終わりに
今回は、KUSANAGI RoDによって簡単にDockerで動作するWordPressを作成できました。次回は、WordPress構築の詳細について述べようと思います。次回をお楽しみに。