Docker Laravel

DockerComposeでLaravelの開発環境構築をやってみる

DockerComposeでLaravelの開発環境構築をやってみる

概要

docker-compose を用いて、Laravel + Nginx + MariaDB の開発環境を構築してみます。 docker-omposeは、docker-compose.ymlというファイルにコンテナの構成情報をまとめて定義することで、同一のホスト上の複数のDockerコンテナを一括管理し連動させることができます。 dockerってなんぞやという方は以前の記事をご覧ください。

使用した環境

  • Mac OS
  • PHP  ー7.4
  • Nginx ー1.17
  • MariaDB  ー10.5
  • Laravel  ー7. x

環境構築手順

  1. ディレクトリの作成
  2. docker-compose.ymlの作成
  3. nginxの設定
  4. Dockerfileによるコンテナ作成
  5. MariaDBの設定
  6. Laravelのプロジェクト作成
  7. MariaDBへの接続

1.ディレクトリの構成

最終的なディレクトリ構成は以下のようになっています。

laravel-test
 │ 
 ├── docker
 │   |
 │   ├── app
 │   │   │ 
 │   │   └── Dockerfile    (アプリケーションコンテナの設定ファイル)
 │   │   
 │   └── web
 │       |
 │       └── default.conf   (nginxの設定ファイル)
 │       
 ├── db-data
 │       
 ├── LaravelProject
 │       
 └── docker-compose.yml 

上記のLaravelProjectにLaravelのファイルが生成されます。

2.docker-compose.ymlを作成

docker-compose.ymlに、システム内で稼働する複数のサーバ群の構成をまとめて定義します。

docker-compose.ymlに記述

version: '3'    # Dockerのバージョン

services:
    web:    # WEBサーバのコンテナの設定
        container_name: nginx.test  # コンテナの名前を決める
        
        image: nginx:latest # phpのイメージを利用
        
        ports:  # ポート設定 今回は8000番ポートで接続
        - "8000:80" 
        
        volumes:    # 開発ディレクトリと公開ディレクトリをマウント(共有)
        - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
        - .:/var/www/html
       
        depends_on: 
        - app   # webコンテナとappコンテナを連携


    app:    # アプリケーションサーバのコンテナの設定
        container_name: laravel.test    # コンテナの名前を決める
        
        build: ./docker/app    # ./docker/appの Dockerfileから構築
        
        volumes:    # 開発ディレクトリと公開ディレクトリをマウント(共有)
        - .:/var/www/html   

3.nginxの設定

ここではnginxを使用できるように設定していきます。

default.confに記述

server {
    # nghinxポート番号を設定
    listen 80;

    # サーバのルートディレクトリを指定
    root  /var/www/html/LaravelProject/public;
    index index.php index.htm;
    
    # アクセスログ・エラーログの出力先パスを指定
    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;
    
    # 全てのリクエストをLaravelに送るための設定
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   app:9000;
        fastcgi_index  index.php;

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

4.Dockerfileによるコンテナ作成

ここではappコンテナ構築時に使われるDockerfileを設定していきます。

docker/app/Dockerfileに記述

#  phpのイメージを利用
FROM php:7.4-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

RUN apt-get update \
    && apt-get install -y libpq-dev \
    && docker-php-ext-install pdo_mysql pdo_pgsql

WORKDIR /var/www/html

5.MariaDBの設定

ここではMariaDBの設定をしていきます。 MariaDBはMySQLと仕様がほとんど同じなので設定も同様に行えます。

docker-compose.ymlに追記

version: '3' 
#....省略
    app:
        container_name: laravel.test
        build: ./docker/app 
        volumes:
        - .:/var/www/html

#ここに追記
    mariadb:    # DBサーバのコンテナの設定
        container_name: mariadb.test    # コンテナの名前を決める
        
        image: mariadb:latest   # mariaDBのイメージを利用
        
        ports:  # ポート設定 (3306がデフォルト)
            - 3306:3306
        
        environment:    # DBの環境設定
            MYSQL_ROOT_PASSWORD: root
            MYSQL_USER: test
            MYSQL_PASSWORD: test
            MYSQL_DATABASE: testdb
        
        volumes:    # 開発ディレクトリと公開ディレクトリをマウント(共有)
            - ./db-data:/var/lib/mysql

6.LaravelProjectの作成

ここまでのファイルを作り終えた後、Dockerを動かして実際にLaravelをインストールしていきます。

dockerで起動

$ docker-compose up -d

appコンテナに入る

$ docker exec -it laravel.test bash

Laravelプロジェクト作成

$ /var/www/html # composer create-project --prefer-dist laravel/laravel LaravelProject

http://localhost:8000に接続して以下の画面が出力されるか確認します。

このような画面が出力されれば成功です。

7.MariaDBへの接続

LaravelProject/.envを編集し、mariadbコンテナの内容を記述

DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=testdb
DB_USERNAME=test
DB_PASSWORD=test

appコンテナに入り、マイグレーション実行を行う

$ docker exec -it laravel.test bash
$ /var/www/html # cd LaravelProject
$ /var/www/html/LaravelProject # php artisan migrate

Migration table created successfully. という表示ができれば成功です。

まとめ

docker-composeを使いこなすことができればどんな環境でも容易に作ることができると分かりました。今後は、Nuxt.jsなどの環境開発にも挑戦したいと思います。

関連記事

最近の投稿