Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker + CentOS 6, 8 PHP 動作確認環境の構築

Docker + CentOS 6, 8 PHP 動作確認環境の構築

Hitoshi Kurokawa

August 15, 2020
Tweet

More Decks by Hitoshi Kurokawa

Other Decks in Programming

Transcript

  1. Docker + CentOS 6, 8 PHP 動作確認環境の構築 黒川 仁 @krhitoshi

    2020/08/15 Kanazawa.rb meetup #96 オンライン
  2. 自己紹介 • 黒川 仁 @krhitoshi • 個人事業主 Next SeeD •

    サーバ管理 • システム開発 • 好きな言語: Ruby
  3. はじめに • CentOS 6 のEOL: “CentOS-6 updates until November 30,

    2020” https://wiki.centos.org/FAQ/General#head-fe8a0be91ee3e7dea812e8694491e1dde5b7 5e6d • CentOS 8 への移行を随時行っている • 稼働中のPHPプログラム ◦ PHPのバージョンが変わるので CentOS 8 では動作しないケースがある ◦ PHP 7.0.0 で削除された関数: split, ereg, eregi_replace 等 新しい環境で現行のプログラムが動作するか確認したい
  4. 最初は・・・ • Mac ローカル環境 Apache + PHP 環境 ◦ PHPのバージョンはOK

    (7.3系) ◦ 微妙に想定環境と挙動が違うような (php.iniのデフォルト値の違いが原因 ?) • 実サーバの開発領域 ◦ ファイルのアップロード ◦ 元々のプログラムのバグかどうか確認するために新旧環境を行ったり来たり Dockerでローカルのファイルを編集するだけで両環境の動作確認ができ ると便利そう
  5. こんな感じ • プロダクション環境として使うわけではない ◦ パフォーマンスは気にしなくてよい ◦ とりあえず動けば良い • DBも使わないような小さなPHPプログラムを動かしたい •

    なるべく実環境のように動作してほしい ◦ 実環境と同等な設定ができるように (php.ini、httpd.conf 等) コンテナイメージ: PHPバージョンベース (php:5.3, php:7.3) ではなく CentOSベース (centos:6, centos:8) のイメージを利用する
  6. CentOS 6 と CentOS 8 の比較 CentOS 6 PHP 5.3系

    Apache 2.2系 Apache (httpd) + mod_php (モジュール) デーモン: 1個 Apacheをフォアグラウンドで動かせばよい CentOS 8 PHP 7.3系 (dnf module enable php:7.3) Apache 2.4系 Apache (httpd) + php-fpm (デーモン) デーモン: 2個 systemdを動かすか、コンテナを分けるかする 必要がある
  7. ディレクトリ構成 ├── docker-centos6 │ ├── Dockerfile │ ├── httpd.conf │

    └── php.ini ├── docker-centos8 │ ├── Dockerfile │ ├── httpd.conf │ ├── php.ini │ └── www.conf ├── docker-compose.yml ├── explode.php ├── info.php └── split.php ディレクトリ直下にファイルを置けば動作確認できるようにする <?php phpinfo();
  8. docker-compose.yml: CentOS 6 部分 version: "3.8" services: centos6: build: context:

    . dockerfile: docker-centos6/Dockerfile ports: - "8080:80" volumes: - .:/var/www/html - ./docker-centos6/httpd.conf:/etc/httpd/conf/httpd.conf - ./docker-centos6/php.ini:/etc/php.ini http://localhost:8080/ httpd.conf, php.iniはコピーし ておく DocumentRoot
  9. docker-compose.yml: CentOS 8 部分 services: centos8: build: context: . dockerfile:

    docker-centos8/Dockerfile ports: - "8081:80" tmpfs: - /tmp - /run stop_signal: SIGRTMIN+3 volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro - .:/var/www/html - ./docker-centos8/www.conf:/etc/php-fpm.d/www.conf - ./docker-centos8/httpd.conf:/etc/httpd/conf/httpd.conf - ./docker-centos8/php.ini:/etc/php.ini http://localhost:8081/ (参考) Docker実践ガイド 第2版 ;listen.owner = nobody ;listen.group = nobody listen.owner = apache listen.group = apache ;listen.acl_users = apache,nginx [pool www] failed to read the ACL of the socket '/run/php-fpm/www.sock': Operation not supported (95) www.conf systemd関連の設定
  10. docker-centos6/Dockerfile: CentOS 6 イメージ用 FROM centos:6 RUN yum -y install

    httpd php php-mbstring php-pear php-gd && \ yum clean all WORKDIR /var/www/html CMD ["httpd", "-DFOREGROUND"] 実際にはいろいろインストールしている
  11. docker-centos8/Dockerfile: CentOS 8 イメージ用 FROM centos:8 RUN dnf -y module

    enable php:7.3 && \ dnf -y install httpd php php-mbstring php-pear php-gd && \ dnf clean all RUN systemctl enable httpd && systemctl enable php-fpm WORKDIR /var/www/html CMD ["/sbin/init"] systemd: デーモン有効化
  12. 動作確認 split.php <?php ini_set('display_errors', 1); $text = "Kanazawa.rb meetup #96

    祝8周年 LT大会 オンライン"; foreach ( split(" ", $text) as $word ) { echo $word."<br>\n"; } This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0. Alternatives to this function include: • preg_split() • explode() • str_split() https://www.php.net/manual/en/function.split.php
  13. 動作確認 explode.php <?php ini_set('display_errors', 1); $text = "Kanazawa.rb meetup #96

    祝8周年 LT大会 オンライン"; foreach ( explode(" ", $text) as $word){ echo $word . "<br>\n"; } echo "PHP " . phpversion(); Alternatives to this function include: • preg_slit() • explode() • str_split()
  14. 最後に • Docker + CentOS 6, 8 でPHPの動作確認環境を構築した • ローカルファイルを編集するだけで両環境で動作確認ができる

    • ファイルを置けば気軽に両環境で動作確認ができる • Centos 6 → 8 への移行を支援する環境を構築できた • 自分の中でDockerを便利に使えたケース