この記事は現役ウェブディベロッパーがわかりやすさにこだわって作成しました
【WORDPRESS】KUSANAGI Runs on Docker
はじめに
WindowsでLinuxのローカル環境を構築するには一昔前ならVMやVIRTUALBOXが主流でしたが、Windows10以降では、Linux実行環境の「WSL」(Windows Subsystem for Linux)が標準搭載され、「本物のLinux」がすぐに使えるようになりました。
このWSL上でWordPressを最速でインストールするために、Docker社(旧dotCloud)が開発するコンテナのアプリケーション実行環境を管理するオープンソースソフトウェア(OSS)と、Docker上で利用することができるKUSANAGI Runs on Docker (略称 KUSANAGI RoD)を利用して爆速でWordPressローカル環境を構築します。
超高速CMS実行環境「KUSANAGI」をDocker上で利用することにより、WordPress等のCMSを高速・セキュアに動作させることができます。 そのほか次のような特徴があります。 WordPressのほか、concrete5、Drupal 7/8、LAMP、LEMP環境としても利用できます。
ちなみに、このDockerですがLinuxのコンテナ技術を使っています。よく仮想マシン(ハイパーバイザー型)と比較されるのですが、仕組みは大きく異なります。
仮想マシンといえば、VirtualBoxやAWSのなどのクラウドサーバーが有名ですがこれは、ホストマシン(WindowsやMacOSなど)上でハイパーバイザーという技術を利用しゲストOS(Windows、MacOS、LinuxなどすきなOS)を動かし、その上でミドルウェアなどを稼働させていますが、一方、コンテナ技術はホストマシンのカーネル(OSの中心となるソフトウェア)を利用し、プロセスやユーザなどを隔離することで、まるで別のマシンが動いているかのように稼働させる仕組みです。
メリットとしては、リソースの消費量が少なく、軽量、高速に起動や停止などが可能なことです。
Windows ターミナルをインストール
Microsoftの公式サイトを参照してターミナルを設定します
WSL環境設定
Microsoftの公式サイトを参照してWSL開発環境を設定します
前提条件
WSL 2を利用するには現在最新のWindows 10であるWindows 10 May 2020 Update (Ver.2004、ビルド19041)以降である必要があります。
古いWindows 10を利用している場合はまずアップグレードが必要となります。
また、今回の環境は64bit版 Windows 10 Proとなります。
ちなみにWSL 2はWindows 10のすべてのエディションで利用可能です。
機能の追加
はじめにWLS 2を利用するには以下の2つの「Windowsの機能」が必要です。
- Linux 用 Windows サブシステム
- 仮想マシン プラットフォーム
管理者としてPowerShellコンソール(またはコマンドプロンプト)を起動しDISMを使いこれらの機能を追加します。
WSLインストール
Windowsターミナルから以下のコマンドを入力します。
wsl --install
–install コマンドでは、次のアクションが実行されます。
- オプションの WSL および仮想マシン プラットフォームのコンポーネントを有効にする
- 最新の Linux カーネルをダウンロードしてインストールする
- WSL 2 を既定値として設定する
- Ubuntu Linux ディストリビューションをダウンロードしてインストールする (再起動が必要になる場合があります)
このインストール プロセス中にコンピューターを再起動する必要があります。
Dockerインストール
Dockerの公式サイトを参照してインストールします
Windows Home マシンで WSL2 バックエンドを使うと、Docker Desktop をインストールできます。Docker Desktop on Windows Home は、Linux コンテナ開発用の Docker Desktop の完全なバージョンです。
このページは、Docker Desktop を Windows 10 Home にインストールするための情報です。Docker Desktop を Windows 10 Pro、Enterprise、Education にインストールする情報をお探しであれば、 Windows に Docker Desktop をインストール をご覧ください。
Docker Desktop on Windows Home を使えば、以下の利点があります:
- Windows Home マシン上で、最新版の Docker が使える
- Windows Home 上で、1回クリックするだけで Kubernetes をインストールする
- 統合 UI によって、実行中コンテナの表示・管理
- 10 秒もかからず Docker Desktop を起動
- Linux ワークスペースの使用
- リソースとメモリの動的な割り当て
- ネットワーク・スタックにより、http プロキ設定や信頼できる CA 同期のサポート
WSLインテグレーションの有効化
これが設定されていないとWSL側で使用できません。必ず確認しましょう。WSLでDockerコマンドが使用できなくなったときはここの設定が外れていないか確認して、Refreshボタンをクリックしてください。
KUSANAGI Runs on Dockerのインストール
Kusanagiの公式サイトを参照しKusanagi を設定します
以下のようにコマンドを実行すると、KUSANAGI RoDが$HOME/.kusanagi 以下にインストールされます。
$ curl https://raw.githubusercontent.com/prime-strategy/kusanagi-docker/master/install.sh |bash
インストールが終わったらkusanagiコマンドを実行できるよう.bashrcの最後にPATHを追加しておきます。
$HOME/.bashrc
PATH=/home/kusanagi/.kusanagi/bin:$PATH
KUSANAGI RoDコマンドでWordPress環境作成(プロビジョニング)
プロビジョニング(KUSANAGI RoDの環境を作成)を行うことでWORDPRESS環境が簡単に構築できます。$HOMEディレクトリでkusanagi-dockerコマンドを実行します。fdqnオプションは必須です。それ以外のオプションは省略できますが、極力設定しておいたほうがわかりやすくてよいです。
オプション | 環境変数 | 説明 |
–fqdn(必須) | FQDN | 作成するサイトのドメイン名を指定します |
–wp | (なし) | WordPressの環境を構築します |
–wplang | ja | WordPressの言語を一つだけ指定します |
–admin-user | ユーザ名 | WordPressの管理者ユーザ名を指定します |
–admin-pass | パスワード | WordPressの管理者パスワードを指定します |
–admin-email | メールアドレス | WordPressの管理者メールアドレスを指定します |
–wp-title | タイトル | WordPressのタイトルを指定します |
–kusanagi-pass | KUSANAGIパスワード | WordPressでの更新で使用するkusanagiユーザのパスワードを指定します |
–dbname | DB名 | 接続するDB名を指定します |
–dbuser | DBユーザ名 | 接続するDBユーザ名を指定します |
–dbpass | DBパスワード | 接続するDBパスワードを指定します |
–http-port | HTTPポート番号 | ホストにポートフォワードするhttpポート番号を指定します |
–tls-port | HTTPSポート番号 | ホストにポートフォワードするhttpsポート番号を指定します |
WordPressプロビジョニング作成
WordPressプロビジョニングを作成するのは簡単です。Kusanagiコマンドでprovisionコマンドを実行します。
kusanagi-docker provision --wp --wplang=ja --admin-user={ユーザ名} --admin-pass={パスワード} --admin-email={メールアドレス} --wp-title={タイトル} --kusanagi-pass={KUSANAGIパス} --dbname={DB名} --dbuser={DBユーザ名} --dbpass={DBパスワード} --http-port=80 --tls-port=443 --fqdn {ドメイン名} {プロビジョニング名}
次はサンプルコマンドです。
$ kusanagi-docker provision --wp --wplang=ja --admin-user=admin --admin-pass=password --admin-email=sample@wp.local --wp-title=test --kusanagi-pass=password --dbname=wordpress --dbuser=wordpress --dbpass=password --http-port=80 --tls-port=443 --fqdn wp.local wplocal
こちらのサイトを参考にさせていただきました
hostsファイルの編集
FQDNで設定したドメイン名にローカルホストIP(127.0.0.1)を紐づけるために、WINDOWSのhostsファイルを編集する必要があります。
以下のフォルダに存在するhostsファイルを編集します。
C:\Windows\System32\drivers\etc
権限により直接編集できないためいったんデスクトップにコピーして次のコードを追加します
127.0.0.1 {ドメイン名} # local host
編集が完了したら、元のフォルダに移動します。
この際、以下の確認画面がでますので続行を選択します。
ブラウザで確認
ブラウザでFQDNオプションで設定したドメインにアクセスします
Kusanagi Rod のコンテナの設定を変更
phpのコンテナにiniファイルを追加する
追加するINIファイルを作成
docker-compose.yml の置かれているフォルダの配下にphpフォルダを作成して、そこに下記ファイルを作成、配置する
uploads.ini
file_uploads = On memory_limit = 256M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 600
docker-compose.ymlファイル修正
docker-compose.ymlファイルのphp
、volumesのサービス※に下記のコードを追加する
- ./php:/usr/local/etc/php/conf.d #※追加を追加する
docker-compose.ymlファイル に以下のように追加します
php:
container_name: kusanagi01_php
image: primestrategy/kusanagi-php:7.4.8-r0
・・・
volumes:
- ./php:/usr/local/etc/php/conf.d #※追加
プロビジョニングフォルダ内の./phpフォルダ
に置かれているすべてのファイルが、コンテナ内の/usr/local/etc/php/conf.d
配下に生成されます
修正の反映
コンテナの再構築を行います
最初に終了のコマンドを実行します
docker-compose down
次に起動のコマンドを実行します
docker-compose up -d
Docker内ファイルのパーミッションを変更する
wp-contentフォルダやファイルのパーミッションは必要に応じて変更します
find /home/kusanagi/wp.local/DocumentRoot/wp-content/ -type d -exec chmod 777 {} +
find /home/kusanagi/wp.local/DocumentRoot/wp-content/ -type f -exec chmod 777 {} +
【参考】サービス(docker-composer.xml設定項目)について
こちらのサイトを参考にしました
Serviceの内容の設定項目はかなりたくさんあります。よく使うものをピックアップし、簡単な表にまとめられています。(上記サイトから抜粋)
項目 | 意味 | リファレンスリンク |
restart | 実行時に再起動するかどうか | https://docs.docker.com/compose/compose-file/#restart |
environment | DBについての環境変数設定(パスワードなど) | https://docs.docker.com/compose/compose-file/#environment |
ports | DBのDockerImageを立ち上げる際のポート番号 | https://docs.docker.com/compose/compose-file/#ports |
volumes | マウントする設定ファイルのパスを指定(mysqlのconfなど)。 | https://docs.docker.com/compose/compose-file/#short-syntax-3 |
build | ComposeFileを実行し、ビルドされるときのpath | https://docs.docker.com/compose/compose-file/#build |
depends_on | Service同士の依存関係 | https://docs.docker.com/compose/compose-file/#depends_on |
entrypoint | デフォルトのentrypointを上書きする | https://docs.docker.com/compose/compose-file/#entrypoint |
driver | ボリュームに使用するドライバ(動かすための接続先)の指定。 | https://docs.docker.com/compose/compose-file/#driver |
【参考】KUSANAGI RoDコマンド
主なサブコマンドは以下になります。
- provision KUSANAGI RoDの環境を作成します
- remove KUSANAGI RoDの環境を削除します
- ssl KUSANAGI RoDのSSL関連の設定を変更します
- config KUSANAGI RoD の設定を行います
- wp WordPressのCLIコマンドを実施します(WordPressのみ)
- import/export Docker上に設定したファイルおよびDB情報をローカルディレクトリにimport/exportします
- start/stop/restart 作成したKUSANAGI RoD環境を開始/停止/再起動を行います
- status 作成したKUSANAGI RoD環境の状態を確認します
こちらのサイトより抜粋
KUSANAGI RoDで使用できるコマンド一覧(ヘルプ参照)
KUSANAGI RoDで使用できるコマンドは、-hオプションを指定することで一覧表示することが可能です
kusanagi-docker -h
対象のプロビジョニングに移動
先に作成したWordPress環境(プロビジョニング)は、wp.localフォルダに作成されています。
以下のコマンドでフォルダを移動します
cd wp.local/
作成したプロビジョニングのフォルダ内で、KUSANAGI RoDのコマンドが使用できるようになります。
プロビジョニングの停止
ローカルに複数のプロビジョニングを作成している場合は、同時に起動することはできません
次のコマンドで起動中のプロビジョニングを停止します
kusanagi-docker stop
プロビジョニングの開始
次のコマンドで起動中のプロビジョニングを開始します
kusanagi-docker start
複数のプロビジョニングを作成しておき、必要に応じてそれぞれの環境を立ち上げることができます
こちらはの例では別に作成したプロビジョニング(wp2.local)を起動しました
コンテナのWordPressソースを展開する
対象のプロビジョニングのフォルダを参照すると、contentsフォルダがあります。
次のコマンドでDockerコンテナ内に存在するDocumentRoot以下のWordPressソースを上記contentsフォルダに展開することができます。
kusanagi-docker config pull
WordPressソースをコンテナ内に格納する
次のコマンドで上記contentsフォルダ内のWordPressソースをDockerコンテナに格納することができます。
kusanagi-docker config push
WP-CLIを使用する
KUSANAGI RoDのコマンドからWP-CLIを実行することが可能です
WP-CLIバージョンを参照
例えば、WP CLIのバージョンを参照したい場合は、以下のコマンドを実行します
wp
から右のオプションはwp-cliのオプションになります。
kusanagi-docker wp --version
データベースのエクスポート
データベースのエクスポートは、以下のコマンドで可能です
wp db export ファイル名
ただし、エクスポート先のフォルダはコンテナ内になりますので、kusanagi-docker config pull
コマンドを実行してcontentsフォルダ内に展開することで参照できるようになります。
【参考】 Dockerコマンド
Dockerコマンドは公式サイトに詳しく説明されています
dockerコマンドは以下のフォーマットで使用します。
docker [OPTIONS] COMMAND
主要なコマンドの紹介
コンテナ作成
コンテナ一覧
コンテナ操作(1)
コマンド | 引数 | 説明 |
rm | container名 | コンテナを削除する |
start | container名 | コンテナを開始する |
stop | container名 | コンテナを停止する |
kill | container名 | コンテナを強制停止する |
restart | container名 | コンテナを再起動する |
pause | container名 | コンテナ上のプロセスを一時停止する |
unpause | container名 | コンテナ上のプロセスを再開始する |
コンテナ操作(2)
コンテナ操作(3)
コマンド | 引数 | 説明 |
cp | srcfile dstfile | コンテナに(から)ファイルをコピーする |
rename | container名 newname | コンテナ名を変更する |
update | container名 | コンテナの設定(CPU数等)を変更する |
コンテナ詳細
Dockerレジストリ関連
コマンド | 引数 | 説明 |
pull | name | レジストリからイメージをダウンロードする |
push | name | レジストリにイメージをアップロードする |
search | term | Dockerレジストリからイメージを検索する |
login | N/A | Dockerレジストリにログインする |
logout | N/A | Dockerレジストリからログアウトする |
イメージ管理
コマンド | 引数 | 説明 |
images | N/A | イメージの一覧を表示する |
rmi | images | イメージを削除する |
history | image | イメージのヒストリを表示する |
commit | container名 | コンテナからイメージを作成する |
tag | image NEWimage | イメージにタグをつける |
build | dockerfile | イメージをビルドする |
trust | N/A | イメージに署名する |
ボリューム管理
コマンド | 引数 | 説明 |
volume | N/A | Dockerボリュームを管理する |
ネットワーク管理
コマンド | 引数 | 説明 |
network | N/A | Dockerネットワークを管理する |
インポート/エクスポート/セーブ/ロード
コマンド | 引数 | 説明 |
export | container | コンテナをファイルにエクスポートする |
import | file | エクスポートファイルをイメージとしてインポートする |
save | image | イメージをファイルにセーブする |
load | file | セーブファイルをイメージとしてロードする |
Docker Swarm(クラスタリング)関連
コマンド | 引数 | 説明 |
swarm | N/A | Swarmを管理する |
node | N/A | Swarmノードを管理する |
stack | N/A | Swarmスタックを管理する |
secret | N/A | Swarmシークレットを管理する |
service | N/A | Swarmサービスを管理する |
その他
コマンド | 引数 | 説明 |
version | N/A | バージョンを表示する |
help | N/A | ヘルプを表示する |
info | N/A | Dockerに関するシステム情報を表示する |
inspect | N/A | 様々なDockerオブジェクトの詳細情報を表示する |
diff | container | コンテナ生成後の更新ファイルを表示する |
wait | container | コンテナの停止を待ち合わせる |
events | N/A | Dockerエンジンのイベントを監視・表示する |
image | N/A | イメージ管理系コマンドを実行する |
container | N/A | コンテナ管理系コマンドを実行する |
builder | N/A | イメージビルド系コマンドを実行する |
system | N/A | システム管理系コマンドを実行する |
config | N/A | コンフィグを管理する |
context | N/A | ビルド時のコンテキストを管理する |
engine | N/A | Dockerエンジンを管理する |
plugin | N/A | プラグインを管理する |
詳細はこちらを参照
Dockerコマンドに使用例
起動中のコンテナの一覧
起動中のコンテナを一覧表示します
docker ps
次のように一覧表示されます
停止中のコンテナもすべて表示する場合は-aオプションを使用します
docker ps -a
起動中のコンテナの中に入る
起動中のコンテナの中に入る場合は、上記のコンテナ一覧のコンテナIDを指定して、下記コマンドにより、コンテナ内に入ることができます
docker exec -it --user root {コンテナID} /bin/sh
以下のように、対象コンテナの中を参照することができます
さいごに
今回は、KUSANAGI Runs on Dockerを紹介しました。Kusanagiは開発環境としてはもちろん、AWSをはじめ多くのサーバーで使用できます。Dockerを使うと手軽にローカル環境にKusanagiの開発環境を構築することができます。是非一度ご自身のPCに環境を構築してみてはいかがでしょうか。
参考資料
この記事についてのご質問またはお困りのことがございましたら、お気軽にお問い合わせください。