色々とうまくいかなかったのでメモを残します。
WordPressをdocker-composeで動かすまで
Dockerのインストール
下記URLからアプリをダウンロードしてインストール
https://www.docker.com/get-started
Dockerのアイコンが上のバーに出てくるのでdocker.hubのアカウントでログイン
UIでDockerの状況をお手軽に見れるので結構便利
docker-composeの導入
下記ドキュメントを参考にcurlで導入したが、なぜか動かなかった
http://docs.docker.jp/compose/install.html
curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
どうやらバージョンが古かったようなので、下記URLを元に最新のstable版のdocker-composeを指定。
https://github.com/docker/compose/releases
curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
これでチュートリアルに記載されているyamlを指定して動くようになった
[参考]http://docs.docker.jp/compose/wordpress.html
(ローカルのMySQLとポートが被ると嫌なのでローカルの33060ポートを利用して外から確認するため、dbのportsに記述を追記してある)
$ docker-compose up -d
Creating my-wordpress_db_1 ... done
Creating my-wordpress_wordpress_1 ... done
version: '2'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
ports:
- "33060:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
links:
- db
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
試しに動かして見ると正常に動作することを確認できた
http://localhost:8000/
ローカルからMySQLの中身を確認する
外からDBに接続したいのでMacにMySQLを入れる。
[参考]https://brew.sh/index_ja
$ brew update
$ brew install mysql
接続を試みるが失敗する
$ mysql -u root -p -h 127.0.0.1 -P 33060
Enter password:
ERROR 2007 (HY000): Protocol mismatch; server version = 11, client version = 10
余談だが、hostはlocalhostではなく127.0.0.1を指定しなければならないらしい
[参考]https://teratail.com/questions/139019
原因はbrew installでインストールされたMySQLのバージョンが8系だったことのようだった
$ mysql --version
mysql Ver 8.0.19 for osx10.13 on x86_64 (Homebrew)
なので下記記事を参考にローカルマシンのMySQLを5.7系へ変更した
https://qiita.com/t_oginogin/items/76ca2b6ce18d53988dc3
$ brew search mysql@5.7
==> Formulae
mysql@5.7
$ brew install mysql@5.7
(中略)
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
mysql@5.7 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.
If you need to have mysql@5.7 first in your PATH run:
echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
For compilers to find mysql@5.7 you may need to set:
export LDFLAGS="-L/usr/local/opt/mysql@5.7/lib"
export CPPFLAGS="-I/usr/local/opt/mysql@5.7/include"
For pkg-config to find mysql@5.7 you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/mysql@5.7/lib/pkgconfig"
To have launchd start mysql@5.7 now and restart at login:
brew services start mysql@5.7
Or, if you don't want/need a background service you can just run:
/usr/local/opt/mysql@5.7/bin/mysql.server start
==> Summary
🍺 /usr/local/Cellar/mysql@5.7/5.7.29: 319 files, 235.4MB
とりあえずインストールはできたみたい。
ただ、mysqlコマンドは依然8系を利用していた
$ brew services
Name Status User Plist
mysql started hoge /Users/hoge/Library/LaunchAgents/homebrew.mxcl.mysql.plist
mysql@5.7 stopped
$ brew services stop mysql
Stopping `mysql`... (might take a while)
==> Successfully stopped `mysql` (label: homebrew.mxcl.mysql)
$ brew services start mysql@5.7
==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
$ mysql --version
mysql Ver 8.0.19 for osx10.13 on x86_64 (Homebrew)
mysqlコマンドが指す設定を8系から5.7にしたいので、以下の処理をした
$ mv /usr/local/var/mysql/ /usr/local/var/mysql_80
$ brew unlink mysql
Unlinking /usr/local/Cellar/mysql/8.0.19... 88 symlinks removed
$ brew link mysql@5.7 --force
Linking /usr/local/Cellar/mysql@5.7/5.7.29... 87 symlinks created
If you need to have this software first in your PATH instead consider running:
echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
なんか出てたけど気にせず進める。
MySQLのバージョンの確認
$ brew services stop mysql@5.7
Stopping `mysql@5.7`... (might take a while)
==> Successfully stopped `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
$ brew services
Name Status User Plist
mysql stopped
mysql@5.7 stopped
$ brew services start mysql@5.7
==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
$ mysql --version
mysql Ver 14.14 Distrib 5.7.29, for osx10.13 (x86_64) using EditLine wrapper
mysqlコマンドのバージョンが5.7に切り替わったっぽいので、接続を試みる。
$ mysql -u root -p -h 127.0.0.1 -P 33060
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.30 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
繋がった、よかった。
WordPressをローカルで編集する
ただ、このままだとWordPressを外から開発しづらいので、外からマウンドできるような設定にする
version: '2'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
ports:
- "33060:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- "$PWD/wordpress:/var/www/html"
links:
- db
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
volumesにローカルでダウンロードしたWordPressを指定する
最新のWordPressのダウンロードは以下でささっと。
$ curl -LO https://ja.wordpress.org/latest-ja.zip && unzip latest-ja.zip
ローカルの編集がすぐにdockerに反映されるので、サーバ上で開発しているような感覚でできてかなり楽でした。
ログを後からgrepしたい気がしたけど、とりあえず参考になりそうなリンクを見つけてお終い
このままだとエラーが起きた時に開発しづらいなと思ったので、logファイルの特定をしようと思ったが、そんなファイルはなかった
[参考]https://qiita.com/tily/items/adb433505da6c7812725
/var/log/apache2/access.logが/dev/stdoutに出力されていて、docker内部には残っっていないので、どうしようか悩み中。。。
以下を参考にローカルに落とす仕組みを作りたいけど、今の所困っていないので、その設定はまた今度にする。
[参考]https://hacknote.jp/archives/26996/
(追記)
以下のようにアクセスログを外にマウントすればいいのでは?と実験してみたらいい感じに全部ログに落ちたので、取り急ぎはこんな感じで中身を確認するためのログを落とすことにする。
volumes:
- "$PWD/wordpress:/var/www/html"
- "$PWD/access.log:/var/log/apache2/access.log"
終わりに
Dockerで実際にWordPressを開発するまでの流れの知識が散り散りになっていたので、これを機にまとめました。