Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

こちらの記事を参考にさせていただきつつ、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
dee909
WEB Frontend / Backend Engineer(つまりホームページ手作りおじさん)DTMでの音楽制作とゲームが好き。qiita友達(というか先輩と先生)大募集中です。
https://nadia.bz
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした