1
4

More than 1 year has passed since last update.

【2023年版】Dockerを使ったLaravelの環境構築

Last updated at Posted at 2023-01-26

はじめに

最近は現場でも、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 9.10.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にログイン.

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)

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

1
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
1
4