Docker Composeはアプリケーションの動作に必要なソフトウェアをコンテナーに一気にデプロイするツールです。 デプロイするアプリケーションや設定はYAMLに記述します。Webで検索するとたくさん情報やテンプレートが見つかります。
ちょっとすぐWordPressの環境が必要になり、検索していたらDockerの公式サイトや日本語のドキュメントサイトが見つかりました。Docker Composeでデプロイする例がズバリ掲載されていました。
WordPressの方はlatestイメージを使っており、MySQLの方は5.7を使っています。現在はMySQLの方は8系のイメージが公開されており、バージョンとして8やlatestを指定すると8が利用されます(もちろん、5.6や5.7のイメージも引き続き利用可能です)。せっかくだったら新しいものを使いたいところです。
というわけで、試しにmysql:latestを指定してDocker ComposeでWordPressをデプロイしてみました。
進捗はdocker-compose psで確認し、MySQLとWordPressがUpになったことを確認し、8000番ポートで待ち受けしているWebサーバーにアクセスしてみると、「Error establishing a database connection」と表示されています。要するにデータベースエラーですね。
docker-compose logsコマンドを実行してみると認証系のエラーが出ています。ソースを忘れましたが、MySQL 8でデフォルトの認証系の設定が変わったらしく、そのままではデプロイできないことがわかりました。
wordpress_1 | MySQL Connection Error: (2002) Connection refused wordpress_1 | wordpress_1 | MySQL Connection Error: (2002) Connection refused wordpress_1 | wordpress_1 | MySQL Connection Error: (2002) Connection refused wordpress_1 | wordpress_1 | MySQL Connection Error: (2002) Connection refused wordpress_1 | [28-Jul-2019 11:19:36 UTC] PHP Warning: mysqli::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] in Standard input code on line 22 ... wordpress_1 | wordpress_1 | MySQL Connection Error: (2054) The server requested authentication method unknown to the client wordpress_1 | wordpress_1 | WARNING: unable to establish a database connection to 'db:3306' wordpress_1 | continuing anyways (which might have unexpected results) wordpress_1 |
とりあえずこの問題を回避するには
引き続きMySQL 5.7を使う
使えるうちはMySQL 5.7のDockerイメージを使うという方法です。いますぐに使えなくなることはないかと思いますが、いずれサポート終了になる可能性があります。
MySQL 8の認証の設定を変えてデプロイする
こんな感じでYAMLを書いたところ、うまくいきました。Dockerのバージョンによって利用できるCompose Versionは異なりますが、今回は日本語のドキュメントと同じ2を使った例にしてみます。
次のように書き換えると、MySQL8を使ってコンテナー上にWordPressアプリケーションをデプロイできます。実際にデプロイする場合はデータベース名、パスワードなどを書き換えて実行してください。
何を追加しているか簡単に説明すると、イメージの下で、コマンドオプションとして「--default-authentication-plugin=mysql_native_password」を追加しています。
ちなみに一度失敗したときのデータベースがプロジェクト用ディレクトリーの.dataに存在しますので、書き換えて実行してもうまくいかない場合はこれを削除してからdocker-compose up -dを実行してみてください。
version: '2'
services:
db:
image: mysql:8
command: --default-authentication-plugin=mysql_native_password
volumes:
- "./.data/db:/var/lib/mysql"
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
docker-compose up -dを実行します。しばらくすると、ブラウザーでアクセスできます。

うまくいきました。
ちなみに片付ける場合はdocker-compose downコマンドで実行します。