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
コマンドで実行します。