php5系のプログラムをdockerで動かすメモ
FROM php:5.6-apache
RUN sed -i 's/deb.debian.org/archive.debian.org/g' /etc/apt/sources.list
RUN sed -i '/stretch-updates/d' /etc/apt/sources.list
RUN sed -i '/security.debian.org/d' /etc/apt/sources.list
RUN apt update
# composer
RUN apt install -y unzip libzip-dev && docker-php-ext-install zip
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
COPY --from=composer:1 /usr/bin/composer /usr/bin/composer
phpなんとかapacheとかで素直にやった方が楽なんじゃないかな〜。stretchのupdateラインなどはもう使えないのでarchiveに書き直さないといけない。シンプルにしんどい。
またcomposer2も使えないのでcomposer1で
mysql
# mysql module
RUN docker-php-ext-install mysql
#RUN docker-php-ext-install pdo_mysql
古い拡張を入れている。うーん
composer系の対応
まず、PEARを取ってくるのは絶望的っぽいのでcomposer2で入れたりするようにしないといけないかも。でもcomposer2はphp5では動かないからねえ… まあ今動いているもののvendorを丸コピーできないならもう諦めた方がいいかもしれませんね。
jpgraphなんかが入っていた
# GD module
RUN apt install -y zlib1g-dev libpng-dev libjpeg-dev libfreetype6-dev
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install gd
# set timezone
RUN echo 'date.timezone = "Asia/Tokyo"' >> /usr/local/etc/php/conf.d/docker-php-timezone.ini;
まともに日本語で動かしたいなら fonts-ipafont なんかも必要かとは思う
起動後の対応
基本的にはあとはdatabaseと思う
utf8mb4の問題
[Error message: Server sent charset unknown to the client. Please, report to the developers]
[Native code: 2054]
とかいう無慈悲なメッセージが現われる。これはphp5とmysql8だとほぼ確実に現われる。これに関しては
ってわけで、ローカルの場合はmy.cnfとかで対応するがawsの場合はパラメーターセットで対応。ここではawsを見てみよう(まあ、案件がawsなので)
awsのパラメーターセット
awsの場合パラメーターセットが無い場合は新規に起こす必要がある
このようにmysql8用のデフォルトをまず適当な名前つけて保存する。ここではtest としている
そしたら character_set_server を探してだしてきて値を変更する。ここではutf8をセットする
そしたらこのパラメーターグループを当該Databaseに適用していく
そしたらこの「Modifyしたパラメーターセット」を既存のDBに割り当てていくぞい
この時に当該DBのパラメーターグループを見て正しく「同期中」となっている事を確認すること。