PHPとnginxとMySQLをdocker-composeでミニマム構築
ちょっとPHP
触ってみたくなったのでnginx
とMySQL
なWebアプリケーションをdocker-compose
で構築してみる。
PHPの環境構築
PHPの実行環境をnginxで構築する場合、PHP-FPMを使いやり取りを行うらしい。
nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する - Qiita
php.ini
ファイルが↓
[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese"
Dockerfile
が↓
FROM php:fpm-alpine COPY php.ini /usr/local/etc/php/ RUN docker-php-ext-install mysqli pdo pdo_mysql mbstring
nginxの環境構築
nginxのパラメータは正直ググりながら適当にやったら動いたという代物笑。
本格的に使うときにちゃんと調べる。
server { listen 80; server_name _; root /var/www/html; index index.php index.html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
index.php
何を表示しようかと思ったけど、とりまDBに接続できてればよいかという発想で書いた。
<?php printf("%s\n", date("Y/m/d H:i:s")); $db = new mysqli("php-db", "root", "zaqroot", "test"); if ($db->connect_errno) { echo $db->connect_errno . " : " . $db->connect_error; exit(); } $arr = $db->query("SELECT * FROM hoge"); while ($val = $arr->fetch_assoc()) { var_dump($val); } $db->close() ?>
docker-compose
肝心のdocker-compose
ファイルがこちら。
MySQL
はlatest
を使ってます。
version: '3' services: nginx: image: nginx:alpine container_name: php-nginx ports: - 8000:80 volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf - ./www/html:/var/www/html depends_on: - php php: build: ./php container_name: php-app ports: - 9000:9000 volumes: - ./www/html:/var/www/html depends_on: - db db: image: mysql:latest container_name: php-db ports: - 13306:3306 command: --default-authentication-plugin=mysql_native_password restart: always environment: - "MYSQL_USER=root" - "MYSQL_ROOT_PASSWORD=zaqroot" - "TZ=Asia/Tokyo" volumes: - ./mysql/data:/var/lib/mysql
出来たものがこちら
GitHub - yuki-toida/php-tutorial
感想
全然わからないが、なんとなくPHP
を生のまま書くのは死ねる気がする。
一旦Laravel
使ってみてからじゃないと評価できなそう。
というわけで次回はLaravel
使う。