5
6

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 3 years have passed since last update.

DockerでPHP7.4の環境を整えるときの問題点

Last updated at Posted at 2020-07-09

DockerでPHP7.4の環境構築をした話

結論

PHPのDockerfileに以下を加える。

  • DockerでPHP7.4系以上を使うなら、ライブラリの「oniguruma」を入れる。
    • apk add --update --no-cache oniguruma-dev \を追記。
  • DockerでMySQLを使うなら、PDOドライバーを入れよう。
    • RUN docker-php-ext-install -j$(nproc) pdo_mysqlを追記。

対象

  • DockerでPHP7.4以上を使いたい方
  • DockerでMySQLの環境構築。

環境

  • OS Catalina 10.15.4
  • Docker 2.3.0.3
    • php:7.4.7-fpm-alpine

はじめに

phpenvを用いてPHPのバージョン管理すればDockerなんて使わなくていいやと思ってたんですけど、MySQLを使うことになって、5.7と8.0系で認証方式が違うとか、8.0系の方が早いとかありますけど、手元のpcにbrewで8.0から5.7系にダウングレードしたらお手上げ状態になったので、勉強も兼ねてサクッとDockerを使いました。
なお、Dockerfileのことしか主にコードを開示していないので、その他は頑張ってください。

問題点

  • php:7.4.0*の環境のDockerfileをビルド時No package 'oniguruma' foundとエラー。
  • PHPでMySQLを使おうとするとcould not find driverというエラー

上記にもあげている通り、2点問題に遭遇しました。

php:7.4.*の環境のDockerfileをビルド時No package 'oniguruma' foundとエラーがでよる。

はい、1つ目です。

Dockerfile
RUN apk upgrade --update \
  && apk add --update --no-cache oniguruma-dev \ # ここ
  && apk --no-cache --virtual .build-deps add make g++ gcc re2c autoconf \
  && apk --no-cache add gettext-dev libzip-dev curl-dev \
  && docker-php-ext-install -j$(nproc) gettext mbstring zip opcache ctype json bcmath sockets curl \
  && pecl channel-update pecl.php.net

php:7.4以降はlibonig-devというパッケージをする必要があるそうです。
https://github.com/kkos/oniguruma
上記2行目にも書いていますが、apk add --update --no-cache oniguruma-devを追加して下さい。

PHPでMySQLを使おうとするとcould not find driverというエラー

はい、2つ目です。
このエラーが出ている人はphpinfo();をphpファイルに書いてもらって、
PDO項目を見ていただくとわかると思うのですが、sqliteしかないと思われます。
つまりデフォルトでドライバーはsqliteしか入ってないらしいですね。
これには少しびっくりしたと同時に、コンテナは本当に最小限のものしか入ってないのかと思いましたね。。。
というわけでDockerfileに書きましょう。

Dockerfile
# PDO driver(MySQL)
RUN docker-php-ext-install -j$(nproc) pdo_mysql

先ほどと同じDockerfileに追記してください。
buildした後、phpinfo();のPDO driver項目を見るとmysqlが追加されていると思います。
他のデータベースを使いたい時も同じようにDockerfileにかけば使用できるでしょう。

PHPのDockerfile全体

今回はUbuntuでなく、Alpineで軽量化しています。
なので皆さんご存知のapt-getは使えず、apkというパッケージマネージャを使う必要があります。

Dockerfile
FROM php:7.4.7-fpm-alpine

ARG environment

RUN apk upgrade --update \
  && apk add --update --no-cache oniguruma-dev \
  && apk --no-cache --virtual .build-deps add make g++ gcc re2c autoconf \
  && apk --no-cache add gettext-dev libzip-dev curl-dev \
  && docker-php-ext-install -j$(nproc) gettext mbstring zip opcache ctype json bcmath sockets curl \
  && pecl channel-update pecl.php.net

# PDO(MySQL)
RUN docker-php-ext-install -j$(nproc) pdo_mysql

まとめ

  • PHP7.4以上を使う場合はパッケージonigurumaをDockerfileに追記する。
  • PDOドライバーはデフォルトでsqliteしか入ってない。

参考

5
6
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?