8
4

More than 3 years have passed since last update.

docker-composeで、nginx、php、mysqlの環境を作成してみた

Last updated at Posted at 2020-07-05

私は初心者です。間違っていたりもっと良いやり方がありましたら教えていただけるとありがたいです

こちらのリンクにコードを置きました

参考

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();
    }

Screen Shot 2020-07-06 at 2.20.15.png

以上です。m(_ _)m

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4