LoginSignup
29
38

More than 1 year has passed since last update.

【PHP8.0×Laravel8.0対応】Dockerを使ったLaravelの環境構築

Last updated at Posted at 2020-02-08

はじめに

最近は現場でも、Docker環境下でLaravleを触ることが増えて少しは知見も溜まってきたかと思いますので、忘れないように忘備録として残しておきます

ここでは、dockerdocker-composeのインストールに関しては触れませんので、まだの方はこちらの記事がわかりやすかったので参考にしてみてください

記事内の不備や、もっとこうした方がいいいよというアドバイスがございましたらコメントお願いします

構成

任意のディレクトリにSampleProjectを作成して下記のディテクトり構成で環境を構築します

SampleProject
  ├── docker-compose.yml
  ├── docker
  │   ├── php
  │   │    ├── Dockerfile
  │   │    └── php.ini
  │   └── nginx
  │        └── default.conf
  └── src
      └──  Laravelのプロジェクトファイル

docker-compose.ymlの中身

docker-compose.ymlは複数のコンテナを同時に動かすためのツールである、Docker Composeを利用するために使用するYMLファイルです

docker-compose.yml
version: '3'

services:
  php:
    build: ./docker/php
    volumes:
      - ./src:/var/www

  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./src:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: sample_project
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306

  node:
    image: node:12.13-alpine
    tty: true
    volumes:
      - ./src:/var/www
    working_dir: /var/www

Dockerfileの中身

DockerfileとはDocker上で動作させるコンテナの構成情報を記述するためのファイルです

FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/

RUN apt-get update \
  && apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
  && docker-php-ext-install zip pdo_mysql

#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin


WORKDIR /var/www

RUN composer global require "laravel/installer"

php.iniの中身

php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

default.confの中身

default.confはngninxの設定情報を記述するためのファイルです

default.conf
server {
  listen 80;
    index index.php index.html;
    root /var/www/sampleProject/public;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
    }

  location ~ \.php$ {

    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass php:9000;
    fastcgi_index index.php;
    include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
  }
 }

環境構築の手順

はじめに任意の場所にSampleProjectを作成する

~/ $ mkdir SampleProject

docker-compose.ymlファイルを作成して、中身は冒頭で紹介したdocker-compose.ymlの内容をコピペする

~/SampleProject $ touch docker-compose.yml

Dockerfilephp.iniを作成して、中身は冒頭で紹介したそれぞれのファイルの内容をコピペする

~/SampleProject/docker/php $ touch Dockerfile
~/SampleProject/docker/php $ touch php.ini

defalt.confファイルを作成して、中身は冒頭で紹介したdefault.confの内容をコピペする

~/SampleProject/nginx $ touch default.conf

docker-compose.ymlファイルがあるディレクトリ内で下記コマンドを実行してdockerを起動させる

~/SampleProject $ docker-compose up -d

Creating php                ... done
Creating db-host            ... done
Creating sampleproject_node ... done
Creating nginx              ... done

phpのコンテナ内に入る

~/SampleProject $ docker-compose exec php bash

phpコンテナ内でLaravelプロジェクトを作成する

root@7eb4359bf51c:/var/www# laravel new sampleProject

Laravelのプロジェクトが入っているか確認する
バージョンが出力されればOKです

root@7eb4359bf51c:/var/www/sampleProject# php artisan --version
Laravel Framework 8.27.0

phpコンテナを抜ける

root@7eb4359bf51c:/var/www# exit

これでSampleProject/src内にLaravelのプロジェクトファイルが作成され、
http://localhost/ にアクセスするとおなじみのWelcomeページが表示されます

スクリーンショット 2020-02-01 23.33.35.png

MySQLコンテナに入る

~/SampleProject $ docker-compose exec db bash

MySQLコンテナ内でMySQLにログイン

root@630fbaf32806:/# mysql -u root -proot

今回のプロジェクトで使用するデータベースを作成する
データベース名はdocker-compose.ymlで指定した、MYSQL_DATABASEと合わせる必要があります

mysql> mysql> CREATE DATABASE sample_project;

Query OK, 1 row affected (0.01 sec) 

Laravelのプロジェクトファイル内の.envファイルを下記に修正する

.env
DB_CONNECTION=mysql
DB_HOST=db # docker-compose.ymlに記載したDBのサービス名
DB_PORT=3306
DB_DATABASE=sample_project # 使用するDB名
DB_USERNAME=root
DB_PASSWORD=root

phpコンテナに入る

~/SampleProject $ docker-compose exec php bash

phpコンテナ内でマイグレーションを実行する

root@7eb4359bf51c:/var/www# php artisan migrate

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.06 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.04 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.02 seconds)

マイグレーションが無事に実行されれば成功です!!

nodeコンテナに入る

~/SampleProject $ docker-compose exec node sh
/var/www

無地に環境構築が完了したら、こちらの記事を参考にして作成したプロジェクトをGitHubにあげてみましょう。

29
38
1

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
29
38