以前 MySQL のダウングレードができたので、 PHP も試してみることにしました。
コンテナ起動
まずはイメージダウンロードとコンテナの起動。
> docker run --name php56_sample -it centos:centos7 /bin/bash
# 略
#
OK。
前準備、 Apache のインストール
設定したりApache等の必要なものをインストールしたり。
# cp -p -f /usr/share/zoneinfo/Japan /etc/localtime
cp: overwrite '/etc/localtime'? y
# yum -y update && yum -y install epel-release sudo less iproute httpd-devel zip unzip openssl mod_ssl openssh-server
# 略
Installed:
epel-release.noarch 0:7-11 httpd-devel.x86_64 0:2.4.6-97.el7.centos.2 iproute.x86_64 0:4.11.0-30.el7
less.x86_64 0:458-9.el7 mod_ssl.x86_64 1:2.4.6-97.el7.centos.2 openssh-server.x86_64 0:7.4p1-22.el7_9
openssl.x86_64 1:1.0.2k-22.el7_9 sudo.x86_64 0:1.8.23-10.el7_9.2 unzip.x86_64 0:6.0-22.el7_9
zip.x86_64 0:3.0-11.el7
Dependency Installed:
apr.x86_64 0:1.4.8-7.el7 apr-devel.x86_64 0:1.4.8-7.el7
apr-util.x86_64 0:1.5.2-6.el7 apr-util-devel.x86_64 0:1.5.2-6.el7
centos-logos.noarch 0:70.0.6-3.el7.centos cyrus-sasl.x86_64 0:2.1.26-23.el7
cyrus-sasl-devel.x86_64 0:2.1.26-23.el7 expat-devel.x86_64 0:2.1.0-12.el7
fipscheck.x86_64 0:1.4.1-6.el7 fipscheck-lib.x86_64 0:1.4.1-6.el7
groff-base.x86_64 0:1.22.2-8.el7 httpd.x86_64 0:2.4.6-97.el7.centos.2
httpd-tools.x86_64 0:2.4.6-97.el7.centos.2 initscripts.x86_64 0:9.49.53-1.el7_9.1
iptables.x86_64 0:1.4.21-35.el7 libdb-devel.x86_64 0:5.3.21-25.el7
libmnl.x86_64 0:1.0.3-7.el7 libnetfilter_conntrack.x86_64 0:1.0.6-1.el7_3
libnfnetlink.x86_64 0:1.0.1-4.el7 mailcap.noarch 0:2.1.41-2.el7
make.x86_64 1:3.82-24.el7 openldap-devel.x86_64 0:2.4.44-24.el7_9
openssh.x86_64 0:7.4p1-22.el7_9 perl.x86_64 4:5.16.3-299.el7_9
perl-Carp.noarch 0:1.26-244.el7 perl-Encode.x86_64 0:2.51-7.el7
perl-Exporter.noarch 0:5.68-3.el7 perl-File-Path.noarch 0:2.09-2.el7
perl-File-Temp.noarch 0:0.23.01-3.el7 perl-Filter.x86_64 0:1.49-3.el7
perl-Getopt-Long.noarch 0:2.40-3.el7 perl-HTTP-Tiny.noarch 0:0.033-3.el7
perl-PathTools.x86_64 0:3.40-5.el7 perl-Pod-Escapes.noarch 1:1.04-299.el7_9
perl-Pod-Perldoc.noarch 0:3.20-4.el7 perl-Pod-Simple.noarch 1:3.28-4.el7
perl-Pod-Usage.noarch 0:1.63-3.el7 perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
perl-Socket.x86_64 0:2.010-5.el7 perl-Storable.x86_64 0:2.45-3.el7
perl-Text-ParseWords.noarch 0:3.29-4.el7 perl-Time-HiRes.x86_64 4:1.9725-3.el7
perl-Time-Local.noarch 0:1.2300-2.el7 perl-constant.noarch 0:1.27-2.el7
perl-libs.x86_64 4:5.16.3-299.el7_9 perl-macros.x86_64 4:5.16.3-299.el7_9
perl-parent.noarch 1:0.225-244.el7 perl-podlators.noarch 0:2.5.1-3.el7
perl-threads.x86_64 0:1.87-4.el7 perl-threads-shared.x86_64 0:1.43-6.el7
sysvinit-tools.x86_64 0:2.88-14.dsf.el7 tcp_wrappers-libs.x86_64 0:7.6-77.el7
Complete!
# echo ServerName www.example.com:80 >> /etc/httpd/conf/httpd.conf
OK。
remiリポジトリのインストール・有効化と PHP のインストール
remiリポジトリのインストール・有効化
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi2021
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
warning: /var/tmp/rpm-tmp.cazqVA: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:remi-release-7.9-2.el7.remi ################################# [100%]
OK。
# yum-config-manager --enable remi && yum-config-manager --enable remi-php56
remi
, remi-php5.6
リポジトリを有効にします。
PHP インストール
# yum -y install php php-devel php-pdo php-mysqlnd php-mbstring php-gd php-pear php-pecl-apc-devel zlib-devel php-xml php-mcrypt php-pecl-xdebug
# 略
Installed:
php.x86_64 0:5.6.40-32.el7.remi php-devel.x86_64 0:5.6.40-32.el7.remi
php-gd.x86_64 0:5.6.40-32.el7.remi php-mbstring.x86_64 0:5.6.40-32.el7.remi
php-mcrypt.x86_64 0:5.6.40-32.el7.remi php-mysqlnd.x86_64 0:5.6.40-32.el7.remi
php-pdo.x86_64 0:5.6.40-32.el7.remi php-pear.noarch 1:1.10.13-1.el7.remi
php-pecl-apcu-devel.x86_64 0:4.0.11-2.el7.remi.5.6 php-pecl-xdebug.x86_64 0:2.5.5-1.el7.remi.5.6
php-xml.x86_64 0:5.6.40-32.el7.remi zlib-devel.x86_64 0:1.2.7-19.el7_9
Dependency Installed:
autoconf.noarch 0:2.69-11.el7 automake.noarch 0:1.13.4-3.el7
dejavu-fonts-common.noarch 0:2.33-6.el7 dejavu-sans-fonts.noarch 0:2.33-6.el7
fontconfig.x86_64 0:2.13.0-4.3.el7 fontpackages-filesystem.noarch 0:1.44-8.el7
freetype.x86_64 0:2.8-14.el7_9.1 fribidi.x86_64 0:1.0.2-1.el7_7.1
gd-last.x86_64 0:2.3.3-2.el7.remi graphite2.x86_64 0:1.3.10-1.el7_3
harfbuzz.x86_64 0:1.7.5-2.el7 jbigkit-libs.x86_64 0:2.0-11.el7
keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-51.el7_9
libX11.x86_64 0:1.6.7-4.el7_9 libX11-common.noarch 0:1.6.7-4.el7_9
libXau.x86_64 0:1.0.8-2.1.el7 libXpm.x86_64 0:3.5.12-1.el7
libcom_err-devel.x86_64 0:1.42.9-19.el7 libedit.x86_64 0:3.0-12.20121213cvs.el7
libedit-devel.x86_64 0:3.0-12.20121213cvs.el7 libjpeg-turbo.x86_64 0:1.2.90-8.el7
libkadm5.x86_64 0:1.15.1-51.el7_9 libmcrypt.x86_64 0:2.5.8-13.el7
libpng.x86_64 2:1.5.13-8.el7 libraqm.x86_64 0:0.7.0-4.el7
libselinux-devel.x86_64 0:2.5-15.el7 libsepol-devel.x86_64 0:2.5-10.el7
libtiff.x86_64 0:4.0.3-35.el7 libtool-ltdl.x86_64 0:2.4.2-22.el7_3
libverto-devel.x86_64 0:0.2.5-4.el7 libwebp7.x86_64 0:1.0.3-1.el7.remi
libxcb.x86_64 0:1.13-1.el7 libxml2-devel.x86_64 0:2.9.1-6.el7_9.6
libxslt.x86_64 0:1.1.28-6.el7 libzip5.x86_64 0:1.8.0-2.el7.remi
libzstd.x86_64 0:1.5.0-1.el7 m4.x86_64 0:1.4.16-10.el7
ncurses-devel.x86_64 0:5.9-14.20130511.el7_4 openssl-devel.x86_64 1:1.0.2k-22.el7_9
pcre-devel.x86_64 0:8.32-17.el7 perl-Data-Dumper.x86_64 0:2.145-3.el7
perl-Test-Harness.noarch 0:3.28-3.el7 perl-Thread-Queue.noarch 0:3.02-2.el7
php-cli.x86_64 0:5.6.40-32.el7.remi php-common.x86_64 0:5.6.40-32.el7.remi
php-pecl-apcu.x86_64 0:4.0.11-2.el7.remi.5.6 php-pecl-jsonc.x86_64 0:1.3.10-2.el7.remi.5.6
php-pecl-jsonc-devel.x86_64 0:1.3.10-2.el7.remi.5.6 php-pecl-zip.x86_64 0:1.20.0-1.el7.remi.5.6
php-process.x86_64 0:5.6.40-32.el7.remi t1lib.x86_64 0:5.1.2-14.el7
xz-devel.x86_64 0:5.2.2-1.el7
Complete!
OK。
remiリポジトリの無効化
# yum-config-manager --disable remi && yum-config-manager --disable remi-php56
Composer インストール
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php && php -r "unlink('composer-setup.php');" && mv composer.phar /usr/local/bin/composer
All settings correct for using Composer
Downloading...
Composer (version 2.1.14) successfully installed to: //composer.phar
Use it: php composer.phar
Apache, PHP の設定ファイル
# cat /etc/php.ini
# vi /etc/php.ini
# cat /etc/httpd/conf.d/ssl.conf
# vi /etc/httpd/conf.d/ssl.conf
# cat /etc/httpd/conf.d/php.conf
# vi /etc/httpd/conf.d/php.conf
Apache, PHP の設定ファイルを編集。
Apache
ssl.conf
# SSLProtocol all -SSLv2 -SSLv3
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLはTLS1.1まで無効に。
php.conf
# mod_php options
<IfModule mod_php5.c>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
<FilesMatch \.(php|phar)$>
# 略
</FilesMatch>
# 略
</IfModule>
一応 phar
も受け付けるようにしておきますかね……くらいのもの。
php.ini
続いて PHP 側。
;max_execution_time = 30
max_execution_time = 1200
;memory_limit = 128M
memory_limit = 4G
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL
;error_log = syslog
error_log = "/var/log/php/php_errors.log"
;post_max_size = 8M
post_max_size = 16G
;upload_max_filesize = 2M
upload_max_filesize = 16M
;date.timezone =
date.timezone = 'Asia/Tokyo'
;session.save_path = "/tmp"
session.save_path = "/tmp"
;mbstring.language = Japanese
mbstring.language = "Japanese"
;mbstring.internal_encoding =
mbstring.internal_encoding = "UTF-8"
; XDEBUG ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
xdebug.remote_enable=1
; 192.168.1.2 ...
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
この辺りを修正。後は仮想ホストの設定を追加。
WP-CLI
# cd ~
# curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5951k 100 5951k 0 0 1153k 0 0:00:05 0:00:05 --:--:-- 1279k
# chmod +x wp-cli.phar
# mv wp-cli.phar /usr/local/bin/wp
OK。
Apache 起動、テスト
# /usr/sbin/httpd -DFOREGROUND &
[1] 39
# cd /var/www/samplesite/web/
# vi index.php
<?php phpinfo();
# exit
これで phpinfo()
の内容が表示される……と思ったのですが、アクセスできません。
そこでポートフォワーディングしていないことに気付きました。
ポートフォワーディング
コンテナをイメージ化
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
XXXXXXXXXXXX centos:centos7 "/bin/bash" 43 minutes ago Up 4 seconds php56_sample
> docker commit XXXXXXXXXXXX php56-sample:0.0.1
sha256:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
docker ps
でコンテナIDを表示させ、 docker commit
でイメージ化。
> docker stop php56_sample
php56_sample
>
いったんコンテナを停止させて破棄。
イメージ化したコンテナを再度起動してポートフォワーディング
> docker run -d -p 8080:80 -p 4043:443 --name php56_sample -it php56-sample:0.0.1 /bin/bash
OK。起動したコンテナのシェルに入ります。
> docker container exec -it php56_sample /bin/bash
#
OK。 Apache が停止しているので起動させます。
# /usr/sbin/httpd -DFOREGROUND &
[1] 34
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 13444 3408 pts/0 Ss+ hh:ii 0:00 /bin/bash
root 17 0.1 0.1 13444 3464 pts/1 Ss hh:ii 0:00 /bin/bash
root 34 0.8 1.3 480620 26472 pts/1 S hh:ii 0:00 /usr/sbin/httpd -DFOREGROUND
apache 35 0.0 0.7 480620 15580 pts/1 S hh:ii 0:00 /usr/sbin/httpd -DFOREGROUND
apache 36 0.0 0.7 480620 15580 pts/1 S hh:ii 0:00 /usr/sbin/httpd -DFOREGROUND
apache 37 0.0 0.7 480620 15580 pts/1 S hh:ii 0:00 /usr/sbin/httpd -DFOREGROUND
apache 38 0.0 0.7 480620 15580 pts/1 S hh:ii 0:00 /usr/sbin/httpd -DFOREGROUND
apache 39 0.0 0.7 480620 15580 pts/1 S hh:ii 0:00 /usr/sbin/httpd -DFOREGROUND
root 40 0.0 0.1 53348 3956 pts/1 R+ hh:ii 0:00 ps aux
# exit
OK。
これで今度こそアクセスすると phpinfo()
の内容が表示されました。
> docker stop php56_sample
php56_sample
>
コンテナを停止させて終了。
参考
Dockerコマンド
コンテナをイメージ化
docker commit XXXXXXXXXXXX IMAGE_NAME:TAG_NUMBER
コンテナを再び起動
docker container start CONTAINER_NAME
コンテナのシェルに入る
docker exec -i -t CONTAINER_NAME bash
ポートフォワーディング
> docker run -d -p 8080:80 -p 4043:443 --name CONTAINER_NAME -it IMAGE_NAME:TAG_NUMBER /bin/bash
未使用
WP-CLI
WP-CLIの現在の動作要件が >=php5.6