初投稿です。覚書のようなものなので、ざーっとラフに記載します。
こちらの記事を参考にさせていただきつつ、Docker上でWordPressのローカル環境を構築してみたものの、自分の環境ではうまく動きませんでした。環境は下記。
- MacBookPro2018 + MacOSX Mojave(10.14.3)
- DockerDesktop 2.0.0.3(31259)
ローカルWEBサーバー(WordPress側)、ローカルDBサーバー(MySQL側)共に動作しているのですが、WordPress側がMySQL側を参照できていないようで Error establishing a database connection
が表示されました。
原因を調べたところ、MySQLのバージョンがVer8系だったことに起因していました。バージョン未指定でMySQLのImageをDocker Hubからpullすると、latest(Ver8系最新版)がダウンロードされます。しかしWordPressはそのままではMySQL Ver8系では正常動作しないようです。
ググってみたところ、MySQL Ver8系でWordPressを正常動作させる方法は色々あるようですが、一旦動作するところまで持っていきたかったため、 docker run
コマンドでコンテナを走らせる際、Ver5.7系のImageを使うよう、下記の指定をしたところ無事に動作しました。
docker pull mysql:5.7.25
docker pull wordpress:4.9.1
docker run --name mysql5.7.25 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7.25
docker run --name wordpress4.9.1 -v /Users/dee909/dev/docker:/tmp --link mysql5.7.25:mysql -d -p 8080:80 wordpress:4.9.1
動作検証は、WordPress Ver4.9.1、MySQL Ver5.7.25で行いました。
もし、私と同様に行き詰まった際はお試しください。
セキュリティ等の観点からWordPress、MySQL共に最新版が望ましいので、自力解決できる方はチャレンジいただければと思います。
そしてヒントを下さった、@pugiemonnさん、@maimaxさん、ありがとうございました。
追記1
コンテナを走らせる際に、MySQL側にポートフォワーディングを追加してやると、Sequel Pro等からもDBへのアクセスが可能になります。下記はポート3307を3306にフォワードさせています。GUI操作がお好みの方は、一緒に設定してしまうと良いと思います。
docker run --name mysql5.7.25 -e MYSQL_ROOT_PASSWORD=password -d -p 3307:3306 mysql:5.7.25
追記2
WordPress側の -v
オプションはホストとコンテナ内のディレクトリ共有のための紐付けですので、ご自身の環境に合わせて変更してください。共有が不要ならば、まるっと削除しても問題ないです。
サンプルの docker run
コマンドではホスト上の /Users/dee909/dev/docker
ディレクトリをコンテナ内の /tmp
ディレクトリに紐付けしていますが、 -v /Users/dee909/dev/docker:/var/www/html
と変更することで、ホスト側(MacOSXやWindows上)に設置したWordPressをコンテナのWEBサーバー上で動作させることができます。
こちらの方がホスト側のテキストエディタでコード編集が行えますし、ホスト上のディレクトリをgit管理することもできますので、使い勝手が良いと思います。
追記3
社内の人間から「複数のディレクトリ共有はできないのか?」と聞かれました。結論を述べますと「できます」。非常に簡単でして、 -v ホストディレクトリ名:コンテナ内ディレクトリ名
の引数を複数指定するだけです。またMySQL側のコンテナも、データベースファイルのディレクトリをホストとコンテナで共有してやることで、データベースの永続化(コンテナを作り直してもデータベースが初期化されない)が可能となります。最終的に私の環境では下記の設定でコンテナを起動、運用する形を取っています。
docker run --name mysql5.7.25 -v /Users/dee909/dev/docker/mysql:/var/lib/mysql -v /Users/dee909/dev/docker/tmp:/tmp -e MYSQL_ROOT_PASSWORD=password -d -p 3307:3306 mysql:5.7.25
docker run --name wordpress4.9.1 -v /Users/dee909/dev/docker/html:/var/www/html -v /Users/dee909/dev/docker/tmp:/tmp --link mysql5.7.25:mysql -d -p 80:80 wordpress:4.9.1