13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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がそれ)

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

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?