私は初心者です。間違っていたりもっと良いやり方がありましたら教えていただけるとありがたいです
こちらのリンクにコードを置きました
参考
- docker-composeでPHPとMySQLを連携させてみる - Qiita
- https://hub.docker.com/_/php
- https://hub.docker.com/_/mysql
- FuelPHPでのMySQL接続時にThe server requested authentication method unknown to the client [caching_sha2_password] となった場合に対処してみた - Qiita
- Docker Laravel Mysql: could not find driver - Stack Overflow
docker-compose.yml
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
# ホストのdefault.confを同期
- ./default.conf:/etc/nginx/conf.d/default.conf
# ホストの./myappフォルダを同期
- ./myapp:/var/www/html
depends_on:
- php
php:
build: .
volumes:
# ホストの./myappフォルダを同期
- ./myapp:/var/www/html
db:
image: mysql
# PDOでhostを指定するときにこのコンテナ名を使う
container_name: mysql
# MySQL8.0でのデフォルトの認証方式が「caching_sha2_password」なので変更する
# 設定しないと "The server requested authentication method unknown to the client" とエラーになる
command: --default-authentication-plugin=mysql_native_password
environment:
# 設定必須、rootパスワード
- MYSQL_ROOT_PASSWORD=root
# この設定はオプション、イメージの起動時に作成されるデータベース名
- MYSQL_DATABASE=sample
ports:
- 3306:3306
default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
root /var/www/html;
location / {
index index.php index.html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Dockerfile
FROM php:7-fpm
# 拡張モジュールをインストール
RUN docker-php-ext-install pdo pdo_mysql
myapp/index.php
<?php
try {
echo (new PDO(
'mysql:host=mysql;dbname=sample;charset=utf8mb4',
'root',
'root',
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
))
->query('select concat(\'MySQL Version :\', version()) v')
->fetch()['v'];
} catch (PDOException $e) {
echo $e->getMessage();
}
以上です。m(_ _)m