DockerでPHP7.4のコンテナを使ってhello worldを出力する最低限のコードです。
php-fpmの設定などでハマって問題の切り分けが難しい時などに覚えておくと便利です。
プログラムを用意
mkdir -p src/public
echo '<?php echo "hello world" . PHP_EOL;' > src/public/index.php
cliからコマンドを実行する
- コマンド
sudo docker run --rm --name=php --volume=$(pwd)/src/:/var/www/html php:7.4 php /var/www/html/public/index.php
- 実行結果
$ sudo docker run --rm --name=php --volume=$(pwd)/src/:/var/www/html php:7.4 php /var/www/html/public/index.php
hello world
ビルドインサーバから起動する
- コマンド
# 起動
sudo docker run --rm --name=php --volume=$(pwd)/src/:/var/www/html -p 8080:8080 php:7.4 bash -c "cd /var/www/html/public; php -S 0.0.0.0:8080" &
# 確認
curl http://localhost:8080/
# 停止
sudo docker stop php
- 実行結果(dockerのstdoutと混ざって出力されています)
curl http://localhost:8080/
[Mon Mar 16 07:05:31 2020] 172.17.0.1:57146 Accepted
[Mon Mar 16 07:05:31 2020] 172.17.0.1:57146 [200]: GET /
[Mon Mar 16 07:05:31 2020] 172.17.0.1:57146 Closing
hello world
php-fpmから起動する
- コマンド
# 起動
sudo docker run --rm --name=php --volume=$(pwd)/src/public:/code -p 9000:9000 php:7.4-fpm php-fpm &
# cgi-fcgiコマンドをインストールして動作確認
sudo yum --enablerepo=epel install fcgi -y
SCRIPT_NAME=index.php SCRIPT_FILENAME=/code/index.php REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000
# 停止
sudo docker stop php
- 実行結果(http headerと合わせて出力されています)
$ SCRIPT_NAME=index.php SCRIPT_FILENAME=/code/index.php REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000
X-Powered-By: PHP/7.4.3
Content-type: text/html; charset=UTF-8
hello world
こちらもおススメ