CentOS7, PHP7, Lalavel7を動かすDocker環境メモ

2021/06/13に公開

概要

CentOS7上でPHP7及びLalavel7が動作できる環境を作る

バージョン

CentOS Linux release 7.9.2009 (Core)
PHP 7.4.20 (cli) (built: Jun 1 2021 15:41:56)
Composer version 2.1.3
Laravel Framework 7.30.4

Docker環境

下記に作成したDokcer環境のコードをまとめた。
https://github.com/tash11ro/cent7php7laravel7

環境構築方法

適当な場所にクロン。

git clone https://github.com/tash11ro/cent7php7laravel7.git

イメージをビルドして立ち上げ。

cd cent7php7laravel7
docker-compose build
docker-compose up -d
docker-compose exec centos /bin/bash

初回時は/var/www/html配下に何もないので下記でLaravelのプロジェクトを作成。
作成が完了するとローカルのcent7php7laravel7/src配下からも参照できるようになる。

composer create-project --prefer-dist laravel/laravel 【アプリ名】 7.3

apacheが起動していることを下記コマンドから確認して http://127.0.0.1:8080/ へアクセス。
問題なければapacheのデモページが表示される。

systemctl status httpd

確認できたら、http://127.0.0.1:8080/【作成したアプリ名】/public/ でLaravelのデモページが表示される。
あとは、バーチャルホスト設定するなり、コード書き換えるなり好きにやる。

メモ

Dockerfileの内容

CentOS7のDockerイメージは公式のものを使用。
CentOS7の最終バージョンが入る。

FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]

上の記述だけだとsystemctlが効かずに実行時にapacheが立ち上がれないので下記を記述。

RUN yum clean all; systemctl enable httpd.service

CentOS7は標準でPHP7のインストールができないのでこの記事を参考にして専用のリポジトリを追加。

yum -y update
yum -y install epel-release
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

バージョンを確認してphpとか諸々をインストール。

  • 今回はPHP7.4を使うのでphp74を指定
  • git zip unzip gccはcomposerとLaravelのインストール時に必要
yum search httpd php74
yum -y install httpd git zip unzip gcc php74 php74-php php74-php-bcmath php74-php-ctype php74-php-json php74-php-mbstring php74-php-openssl php74-php-PDO php74-php-tokenizer php74-php-xml

インストール後はphp74の名前になっているのでシンボリックリンクを貼ってphpで実行できるようにする。

ln -s /usr/bin/php74 /usr/bin/php 

公式ページの手順で新しいcomposerを入手。
yum経由でインストールも可能だがバージョン1.xが入って、Laravel7のインストールができなくなるので、公式の手順でバージョン2以上のものを入れる。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

composerで実行できるように移動。

mv composer.phar /usr/local/bin/composer

Laravel読み込み

composer global require laravel/installer

docker-compose.ymlの内容

適当なポード番号で80番ポートにポートフォワーディングする。

ports: 
  - 8080:80

CentOS内でsystemctlが実行できないのでこちら参考にして設定を入れる。

cap_add:
  - SYS_ADMIN
security_opt:
  - seccomp:unconfined

入れないと下記のようなエラーが出る

$ systemctl status httpd
Failed to get D-Bus connection: Operation not permitted

Discussion