Docker 環境に CentOS7 + PHP5.6 環境を構築できるか検証する

以前 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。

Docker 上に PHP5.6 が動作していることを確認
Docker 上に PHP5.6 が動作していることを確認

これで今度こそアクセスすると 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

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。