KUSANAGI RoDの使い方(1)

宮﨑悟

2019年8月にリリースされたKUSANAGI Rus on Docker (RoD)は、Docker上でKUSANAGIと同じ環境を動かすソフトウェアです。RoDはhttpd(Apache/nginx)/PHP/MariaDBを機能要素として、docker-composeで複数コンテナを制御し、KUSANAGI環境を立ち上げ、WordPressなどの構築を行います。この記事では、RoDのインストール方法、動作要件、そしてWordPressの作成方法を詳しく説明しています。独自のコンテナ管理方法により、柔軟かつ効率的なweb環境を実現します。

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 の概念図となります。

KUSANAGI 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構築の詳細について述べようと思います。次回をお楽しみに。

<< KUSANAGI RoDの使い方(5) (高速Dockerの話)KUSANAGI RoDの使い方(2) >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解