結構ハマったのでメモ。
このへんを参考にした。
ディレクトリを作る
$ mkdir wp $ cd wp $ mkdir db-data logs nginx wordpress
Nginx設定ファイル
$ cat nginx/wordpress.conf server { listen 80; server_name hoge; root /var/www/html; index index.php; access_log /var/log/nginx/hoge.log; error_log /var/log/nginx/hoge.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass wordpress:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
docker-compose.yml
version: '2.0' services: nginx: image: nginx ports: - '8080:80' volumes: - ./nginx:/etc/nginx/conf.d - ./logs/nginx:/var/log/nginx - ./wordpress:/var/www/html links: - wordpress restart: always mysql: image: mariadb ports: - '3306:3306' volumes: - ./db-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=pass restart: always wordpress: image: wordpress:4.9-php7.1-fpm ports: - '9000:9000' volumes: - ./wordpress:/var/www/html environment: WORDPRESS_DB_NAME: wpdb WORDPRESS_TABLE_PREFIX: wp_ WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD: pass links: - mysql depends_on: - mysql restart: always
実行
$ docker-compose up
ブラウザからlocalhost:8080にアクセスすればOK。
使い方
ログ、Wordpressの構成ファイル、DBのデータはそれぞれlog, wordpress, db-dataに保存される。dockerコンテナを終わらせてもデータ消えない。環境汚さない。便利!
ローカルからコマンドラインのmysql clientでlocalhostに接続しに行こうとする(※dockerコンテナのポートをローカルにマッピングしている、上記参照)と、unixドメインソケットを読もうとしてエラーになるので下記のようにする。
$ mysql --protocol tcp -u root -p
ハマりポイント
ハマりポイントというか、これは単純なミスだったのだけど…。
- 設定しているとおり、DBの内容やログ、wordpressの構成ファイルはマウントされているボリュームに保存される。だからdockerコンテナをストップさせても保存される。あとでdocker-compose.ymlをいじってMariaDBのパスワードを変更してもデータベースのデータを消去しない限りは更新されない。
- mariadbの公式dockerイメージではMYSQL_ROOT_HOSTでrootがログインできるホスト名を指定できるが、これはデフォルト(無指定)で%が指定される。access_deniedになった場合は多分許可ホストの設定じゃなくてパスワードが間違ってる可能性大。
上記二つのコンボで2時間位ハマってしまった。
まとめ
docker-composeクッソ便利。覚えたらローカルに環境構築したくなくなる。
いいね! 1+