LoginSignup
4
4

More than 5 years have passed since last update.

Dockerでlaravel環境を構築してみた

Posted at

Dockerでlaravel環境を構築してみた

Dockerでlaravel環境を構築した際の手順を備忘録的に残しとこうと思い投稿しました。

導入ミドルウェア

  • HTTPサーバ nginx:1.15.8
  • PHP php:7.3-fpm
  • DB mysql:8

フォルダ構成

設定ファイルなどの事前に作成するファイルの格納場所を示しています。

project/
├docker-compose.yml
├docker/
  └ap/
   └Dockerfile
├server/
  └ap/
  └db/
  └web/
   └etc/
    └nginx/
     └conf.d/
      default.conf

各種設定ファイルの記載

docker-compose.yml

dockerの構成の大元となるファイルを設定していきます。
HTTPサーバとDB製品に関しては、公式イメージをそのまま使用します。

version: '3'
services:
  web:
    image: nginx:1.15.8
    ports:
      - "8000:80"
    depends_on:
      - ap
    # 設定ファイルをnginx に読み込ませる
    volumes:
      - ./server/web/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
  ap:
    build: ./docker/ap
    depends_on:
      - db
    # ソースフォルダとして利用する
    volumes:
      - ./server/ap/application:/var/www/html
  db:
    image: mysql:8
    environment:
      MYSQL_DATABASE: dbname
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"
    # containerを停止してもデータが消えないように永続化する
    volumes:
      - ./server/db/var/lib/mysql:/var/lib/mysql

Dockerfile

phpの導入に関しては、composerの導入などがあるため、公式イメージ + 作業を記載していきます。

FROM php:7.3-fpm

# composerの導入
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim

# PHPのExtensionsを導入
RUN apt-get update \
&& apt-get install -y libpq-dev \
&& docker-php-ext-install pdo_mysql pdo_pgsql

WORKDIR /var/www/html

default.conf

nginxの設定ファイルを更新します。

server {
    listen 80;

    # appnameはlaravelプロジェクトの名前を設定
    root   /var/www/html/appname/public;
    index index.php index.html index.htm;

    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_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass   ap:9000;
          fastcgi_index  index.php;

          include        fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param  PATH_INFO $fastcgi_path_info;
      }
}

起動&MySQLのユーザ設定

設定ファイルがかけたらDockerを起動します。docker-compose.ymlのファイルがある箇所で以下を実行する。

docker-compose up -d

MySQL利用者設定

laravelからDB接続する際に、デフォルトだと認証エラーが発生してしまいます。
MySQL8だとデフォルトの認証方式が変わったのですが、laravel側が対応できてないみたいです。
そのため、利用者の設定をするため、dbコンテナに入ります。

docker-compose exec db bash

mysqlの認証方式を変更します。

mysql -u root -p
ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

設定が終わったら、dbコンテナからexitで抜けましょう。

laravelプロジェクトの作成

apコンテナの中に入って、laravelプロジェクトを作成します。

docker-compose exec ap bash
# appnameは好きな名前にしてください
composer create-project --prefer-dist laravel/laravel appname

ここまできたら、laravelプロジェクトにアクセスができるはずです。
http://localhost:8000/

最後にマイグレーションファイルの作成

最後にマイグレーションファイルを作成しましょう!
projeect/server/ap/application/appname配下にある「.env」ファイルのDB定義を書き換えます。

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=user
DB_PASSWORD=password

以下のコマンドを入力して、マイグレーションファイルを作成しましょう。

docker-compose exec ap bash
cd appname
php artisan migrate

「Migration table created successfully.」と出力されれば完了です。

最後までみていただき、ありがとうございました。
ミスや不明な点があれば、ご連絡ください。

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