CentOS7, PHP7, Lalavel7を動かすDocker環境メモ
概要
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環境のコードをまとめた。
環境構築方法
適当な場所にクロン。
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