LoginSignup
51
60

More than 5 years have passed since last update.

はじめてのLaravel5+Docker

Posted at

Dockerに入門してみました。
Dockerを活かそう!というわけでPHPにも入門しました。
せっかくなので新しい感じのするLaravelを触ってみようというわけでMac + Docker + Laravelという環境でやってみました。
以下、その記録です。

Dockerの準備

DockerでLAMP環境を作るには以下の記事を参考にしました。

Docker Hubのオフィシャルイメージを使ったLAMP環境(Apache+PHP+MySQL)構築
Docker Composeを使ってLAMP環境を立ち上げる
docker-composeを使うと複数コンテナの管理が便利に

今回の例では上記の参考記事(上2つ)で作成したDockerfileやdocker-compose.ymlがある前提で進めます。

Laravelの準備

composerが必要なのであらかじめインストールしておきます。

composer global require "laravel/installer=~1.1"

これでインストール完了です。
最初のプロジェクトを作成します。

composer create-project laravel/laravel MyFirstLaravel

"Application key [(ランダムな英数列)] set successfully."と表示されたら成功です。
ここで表示されているApplication keyは暗号化の際に使用されるランダムな英数列です。
MyFirstLaravelディレクトリが出来ているの移動して「.env」ファイルを開いてみます。

APP_ENV=local
APP_DEBUG=true
APP_KEY=(ランダムな英数列)

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

〜略〜

ここのAPP_KEYに先ほど出力されたApplication keyの値が設定されているのが分かります。
DB系の設定はDockerの環境に合わせて編集します。

DB_HOST=l72.XX.X.XXX
DB_DATABASE=testdb
DB_USERNAME=root
DB_PASSWORD=pass

DB_HOSTはDocker上で動いているmysqlコンテナのホストを指定します。
DB_DATABASEにはデータベース名を指定します。
あらかじめmysqlに作成しておきましょう。
ユーザー名とパスワードも設定に合わせて指定します。

Laravel+Dockerの準備

Lalavelをdockerで動かすためにもう少しdocker-compose.ymlの編集が必要です。
最終的な記述は以下の通りです。

docker-compose.yml
mysql:
  image: mysql:5.7
  environment:
    MYSQL_ROOT_PASSWORD: pass
    MYSQL_DATABASE: testdb
    MYSQL_USER: test
    MYSQL_PASSWORD: testtest
  volumes:
    - ./my.cnf:/etc/mysql/conf.d/my.cnf
    - /var/lib/mysql
  container_name: mysql
php:
  build: php
  ports:
    - "80:80"
  volumes:
    - ./MyFirstLaravel:/var/www/html
    - ./apache2.conf:/etc/apache2/apache2.conf
  links:
    - mysql:mysql
  container_name: php

mysqlでデータベース「testdb」を作成し、testユーザーを追加しています。

environment:
  MYSQL_ROOT_PASSWORD: pass
  MYSQL_DATABASE: testdb
  MYSQL_USER: test
  MYSQL_PASSWORD: testtest

php側のvolumesでapache2.confを上書きしています。

volumes:
  - ./www:/var/www/html
  - ./apache2.conf:/etc/apache2/apache2.conf

Laravelのプロジェクト全体がコンテナから見えるようにMyFirstLaravelを/var/wwww/htmlにマッピングしていますが、Laravelはさらにその下のpublicディレクトリがドキュメントルートであることを想定して動作します。
Laravel側で変更する方法があるんだろうとは思いますが、ここではコンテナ側のapache2.confを上書きしてドキュメントルートを/var/www/html/publicに変更しています。

apache2.conf
(省略)
DocumentRoot /var/www/html/public
(省略)

他の部分はコンテナに入っているapache2.confそのままから変更ありません。

phpコンテナはphpディレクトリにDockerfileを用意してビルドしています。

FROM php:5.6-apache
RUN apt-get update \
  && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libmcrypt-dev \
  && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt \

次にMyFirstLaravel直下のstorageディレクトリのパーミッションを変更してコンテナのapacheから書き込めるようにしておきます。
サブディレクトリも全て変更しておきます。
これをしておかないと500 Internal ServerErrorが返ってきてハマります。

これでようやくコンテナを起動できます。
docker-compose.ymlのあるディレクトリに移動して以下のコマンドを実行します。

docker-compose up -d

phpコンテナとmysqlコンテナが起動していることを「doker ps」で確認しましょう。
Laravelは最初にmigrateする必要があるので以下のようにして実行します。

docker exec -it php php artisan migrate

Dockerfileかdocker-compose.ymlで自動実行してくれる方法がありそうなんですが、わからず。。
とりあえず1コマンドだけ手動でながしこんでいます。

ブラウザからアクセスしてLaravelのWelcomeページが表示されれば成功です。
screen1.png

51
60
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
51
60