39
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerでWordPress環境を構築したらしくじった。でも頑張ったら上手く行ったので情報共有します。

Last updated at Posted at 2019-04-03

初投稿です。覚書のようなものなので、ざーっとラフに記載します。

こちらの記事を参考にさせていただきつつ、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

スクリーンショット 2019-04-03 20.58.45.png

追記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
39
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?