Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@mogamin3

DockerでLAMP環境を作るときにハマったこと

docker-composeで動くLAMP環境を作った。

作りました。中身は

  • PHP 7.2.3
  • MySQL 8.0
  • phpMyAdmin

という構成。

わかってみれば大したことではないのだが結構ハマって時間を溶かしてしまったので何かのお役に立てばということで書いておく。

LAMP使いたいだけなら↑のリポジトリcloneしてきて云々する方が早い。

Authentication plugin 'caching_sha2_password' cannot be loadedと言われる

MySQLを立ち上げて、mysqlコマンドなりphpMyAdminなりで接続しに行くとAuthentication plugin 'caching_sha2_password' cannot be loadedと言われてしまう。

当然認証情報は合ってるはず。

これは、MySQLの8からデフォルトの認証方式が、caching_sha2_passwordというものに変わったことに起因するようで、デフォルトを従来のmysql_native_passwordにするようにconfigに書いておくことで、従来のアプリケーションからでも利用できる。

MySQL公式のDockerイメージでは、/etc/mysql/conf.d/以下にある.cnfという拡張子のファイルを読み込んでくれるようになっているので私は以下のようなDockerfileと設定を書いてDockerイメージを作成した。

change_default_auth.cnf
[mysqld]
default_authentication_plugin= mysql_native_password
FROM mysql:8

ADD ./change_default_auth.cnf /etc/mysql/conf.d/.

CMD ["mysqld"]

当然、volumeでコンテナの/etc/mysql/conf.dをホストに持ってきてそこに設定ファイルを置くのでも構わないが、コンテナを起動するよりも前においておく必要がある。(コンテナを起動した時にユーザーが作成されるため)

PDOでMySQL使えない

続いてPDOでMySQLが使えない問題。

PHPのDockerイメージは軽くするために、最低限のものしか入っていないそうで、PDOのMySQLドライバーも標準では入っていない。

そこで、これも公式のPHPのイメージをベースにした以下のようなDockerfileを書いて解決した。

FROM php:7.2.3-apache

RUN apt update &&\
    docker-php-ext-install pdo_mysql &&\
    echo 'date.timezone = Asia/Tokyo' >> /usr/local/etc/php/conf.d/99_myconf.ini

CMD ["apache2-foreground"]

拡張をインストールするためのUtilがDockerイメージに含まれているのでそれを使う(RUNの2行目docker-php-ext-installがそれ)

ついでにタイムゾーンも合わせておく。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
12
Help us understand the problem. What are the problem?