Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

https://github.com/uutarou10/lamp-docker-compose

作りました。中身は

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

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

mogamin3
fringe81
Fringeは、最新のテクノロジーとプロフェッショナルによるサービスにより、社会課題に仮説を立てて市場に広げていくことで、数十年という長期的なスパンで価値を生み出し続け、より良い世界を創る集団です。 既存の領域に限らず、時流を読み、仮説を生み出し、テクノロジーの力で優れたサービスを生み出し続けます。
https://www.fringe81.com/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした