Docker

【Docker】 Laravelの環境構築をやってみた

この記事では、DockerでLaravelの環境構築をやっていこうと思います。

初学者の方(自分。。)には少し難しいので、ある程度勉強を進めた方を対象としています。

また、自分もほとんど初学者みたいなものなので、今回は以下の記事を参考にさせていただいてます。(めちゃくちゃわかりやすかったです、ありがとうございます!)
Laravelの環境をDockerで構築するチュートリアル

僕の記事は僕の備忘録として、また、別視点としての記事として少しでも役に立てれば、と思ってます。

流れ

・Nginxでwebサーバーを立てる
・PHPとLaravelでアプリケーションサーバーを立てる
・MySQLでDBサーバーを立てる

この「サーバーを立てる」というのは、それぞれ「コンテナを構築する」
と捉えてください。

なので今回は、

・webサーバー(Nginx)
・アプリケーションサーバー(Laravel)
・DBサーバー(MySQL)

の3つのコンテナを構築します。

準備

これから構築していくための準備をします。
以下のような構成で、ディレクトリを作成してください。

dockerLaravelProject
├── docker
│   ├── app
│   │   └── Dockerfile
│   └── web
│       └── default.conf
├── index.html
└──docker-compose.yml

Dockerfile

PHPとLaravelをインストールするイメージを作成します。

default.conf

Nginxの設定ファイルです。

設定ファイルの記述の仕方については、以下の記事を参考にして下さい。
Nginx設定のまとめ
nginx.confの構成

docker-compose.yml

コンテナを作成するファイルです。
このファイルを実行することで、コンテナを作成します。

index.html ⇔ LaravelApp

とりあえず、Nginx起動確認のためにindex.htmlを置いています。

Laravel構築のところで、LaravelAppに置き換えます。

以降、この中にLaravelのアプリケーションが置き換えられますが、それ以外にファイルを追加することはないです。

このファイルにどんどん書き込んでいきます。

Nginxでwebサーバーを立てる

index.html

<h1>Hello Docker</h1>

Nginxの設定ファイル

server {
    listen 80;

    root  /var/www/html;
    index index.html index.htm;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;
}

listen

指定したポート番号で待ち受けます。

root

静的ファイルの存在するパスを指定します。

index

URLがディレクトリ(“/”)にアクセスしている時に表示するファイルを指定します。

上の書き方では、index.htmlが存在すればアクセスし、無ければindex.htmにアクセスします。

docker-compose.yml

version: '3'
services:
  web:
    container_name: laravel.nginx
    image: nginx:1.15.6
    ports:
      - "8000:80"
    volumes:
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
      - .:/var/www/html

コンテナの作成・起動

以下のコマンドでNginxコンテナを起動してみましょう。

$ docker-compose up -d

http://localhost:8000にアクセスして以下のように表示されれば成功です。

PHPとLaravelでアプリケーションサーバーを立てる

Dockerfile

このファイルでは、PHPとLaravelをインストールをしています。

FROM php:7.2-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

Nginxの設定ファイルを編集

NginxでPHPが実行できるように記述を追加していきます。

server {
    listen 80;

    root /var/www/html;
    index 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   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;
      }
}

docker-compose.yml

version: '3'
services:
  web:
    container_name: laravel.nginx
    image: nginx:1.15.6
    ports:
      - "8000:80"
    volumes:
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
      - .:/var/www/html
    depends_on:  # 追加
      - app

  # 以下全て追加
  app:
    container_name: laravel
    build: ./docker/app
    volumes:
      - .:/var/www/html

コンテナの作成・起動

コンテナを作成・起動します。

$ docker-compose up -d

Laravelアプリケーションを作成

それでは、今ビルドしたアプリケーションサーバーのコンテナに入って、LaravelのアプリケーションをComposerで作成します。

以下のコマンドでコンテナに入りましょう。
(laravelの部分はコンテナ名を入れてください。)

$ docker exec -it laravel bash

コンテナに入れたら、以下のコマンドでlaravelを作成して下さい。

$ composer create-project --prefer-dist laravel/laravel [アプリ名]

時間かかります。。。。

NginxのrootとindexをlaravelAppに対応

NginxのrootとindexをLaravel内のpublic/index.phpに指定します。

root  /var/www/html/dockerLaravelApp/public;
index index.php index.htm;

変更を反映させるために以下のコマンドを実行します。

$ docker-compose restart

http://localhost:8000にアクセスして、Laravelの画面が表示されれば成功です。

DBサーバー(MySQL)を立てる

docker-compose.yml

version: '3'
services:
  web:
  # 省略 ....

  app:
    container_name: laravel.app
    build: ./docker/app
    volumes:
      - .:/var/www/html
    depends_on: # 追加
          - mysql

  # 以下全て追加
  mysql:
    container_name: laravel.mysql
    image: mysql:5.6
    environment:
      MYSQL_DATABASE: laravelApp # データベース名
      MYSQL_USER: user # ユーザー名
      MYSQL_PASSWORD: root # パスワード
      MYSQL_ROOT_PASSWORD: root # パスワード
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

Laravel側でDB設定

Laravel側で、.envファイルにDBの設定を記述します。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravelApp
DB_USERNAME=user
DB_PASSWORD=root

コンテナの作成・起動

MySQLコンテナを作成・起動します。

$ docker-compose up -d

コンテナに入ってマイグレーションを実行

$ docker exec -it laravel bash

$ cd laravelApp

$ php artisan migrate

データベースを確認

では、マイグレーションが完了しましたが、データベース自体はどこにできているのでしょうか?

答えは、構築したMySQLのコンテナ内に作成されています。

なので、MySQLのコンテナに入って確認する必要があります。
以下のコマンドでMySQLのコンテナに入りましょう。

$ docker exec -it [MySQLのコンテナ名] bash

コンテナに入れたら、mysqlにアクセスします。

$ mysql -u user -p

パスワードが聞かれるので、認証できたら、以下のコマンドでも実行してみましょう。

mysql > show databases;

いかがでしたか?
データベースが存在していれば完了です。

これでDockerをLaravelを用いた環境構築は終了です。

僕自身の感想ですが、丸一日かかってでき、このブログ書きながら理解を深めたって感じです。

何度も手を動かしてやってみることが大切ですね。

僕は、3回環境構築しました笑

COMMENT

メールアドレスが公開されることはありません。