現在の構成図
現在は下図のようになっています。
構成の説明
- マルチドメインのサイトにしたかったので、リバースプロキシを立てました。
- MySQLはいくつかのコンテナから使いたかったので、独立したコンテナを1つ作りました。(インターネット上でよく説明されているDockerのWordpressでは、専用のMySQLをWordpressコンテナ内に持つ構成となっていると思います。)
具体的な構成
役割 | コンテナイメージ |
リバースプロキシ | ・jwilder/nginx-proxy ・nginxproxy/acme-companion ※acme-companionは、Let’s EncryptでSSL化するためのイメージです。 |
beautiful-moon.tokyo(このサイト) | ・wordpress |
archives(静的HTML) | ・httpd |
mysql | ・mysql ・phpmyadmin |
ハマったポイント
WordPressのDBを外部のMySQLに指定するやり方が分からない
docker-compose.ymlのenvironmentの部分に下記を指定すればOKです。
WORDPRESS_DB_HOST: (db_host:3306)
WORDPRESS_DB_USER: (user)
WORDPRESS_DB_PASSWORD: (password)
WORDPRESS_DB_NAME: (wordpress_db)
※( )内の値はサンプルなので、自分の環境の値に書き換えて下さい。
db_hostは、mysqlコンテナのdocker-compose.ymlにcontainer_nameを指定しておくとその値を指定するだけで良くなるので便利。
コンテナ間通信の設定が分からない
WordPressとMySQLの通信ができなくてハマりました。
2つのことをやればOKです。
- ネットワークの作成
$ sudo docker network create mynetwork
※mynetworkの部分は好きな名前を付けて下さい。
- 各コンテナをネットワークへ所属させる
docker-compose.ymlの最後に下記を追記します。
networks:
default:
name: mynetwork
マルチドメインのやり方が分からない
リバースプロキシを立てたものの、マルチドメインを具体的にどう実現するか分からずにハマりました。公式ドキュメントを読めばすぐに分かりました。
リバースプロキシの後ろに配置されるコンテナのdocker-compose.ymlのenvironmentに下記を指定すればOKです。
VIRTUAL_HOST: (example.com)
LETSENCRYPT_HOST: (example.com)
LETSENCRYPT_EMAIL: (example@example.com)
※( )内の値はサンプルなので、自分の環境の値に書き換えて下さい。
以上です。