LoginSignup
6
8

More than 5 years have passed since last update.

超簡単!Laradockを利用してLaravel開発環境を構築~アジャイルでDevOpsなシステム構築実践~

Last updated at Posted at 2017-12-13

目的

LaravelPHPの開発環境をDockerを利用して構築します。
自前でdocker-composeとDockerfileを作成してもよかったのですが、「既にできているイメージを利用する」のはDockerのメリットの一つです。活用させていただきます。

参考

PHPフレームワーク「Laradock」で、手軽にLaravel+Dockerな開発環境を構築する
※ほとんど記事そのままです(助かりました)。個人的に欲しい情報を追加しています。

環境

Windows10
Docker Tool Box

実践

準備

Windows10の場合ユーザフォルダ直下に作成するのがおすすめです。
ここ以外に作成すると、Virtual Boxのパスが通ってなかったりして、何かと面倒です。

ユーザフォルダ直下から始めます。

プロジェクト用のフォルダを作成し移動
user@xxx ~/
$ mkdir colejo
$ cd colejo
git初期化
user@xxx ~/colejo
$ git init
Initialized empty Git repository in C:/Users/{ユーザ名}/colejo/.git/
Laravelのソースを置くフォルダを作成しておく
user@xxx ~/colejo (master)
$ mkdir src

Laradockをダウンロード

Laradockをダウンロード
user@xxx ~/colejo (master)
$ git submodule add https://github.com/Laradock/laradock.git
Cloning into 'C:/Users/{ユーザ名}/colejo/laradock'...
remote: Counting objects: 6289, done.
remote: Compressing objects: 100% (40/40), done.
remote: Total 6289 (delta 18), reused 29 (delta 7), pack-reused 6241
Receiving objects: 100% (6289/6289), 6.01 MiB | 393.00 KiB/s, done.
Resolving deltas: 100% (3298/3298), done.
Checking connectivity... done.
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.
Laradockをダウンロードを確認
user@xxx ~/colejo (master)
$ ls
laradock/  src/

.envを作成

Laradoc関連ファイルは「laradock」フォルダに格納されています。

Laradockに移動
user@xxx ~/colejo (master)
$ cd laradock/

「env-example」を「.env」という名前でコピーして利用します。

envファイルをコピー
user@xxx ~/colejo/laradock (master)
$ cp env-example .env

.envの修正

Laradockのenvファイルのアプリケーションパスの変更
### Application Path ###################################################################################################
# Point to your code, will be available at `/var/www`.

APPLICATION=../src/

MySQLの設定

/laradock/.env にMySQLのバージョン(2017年12月現在8.0)、データベース名、ユーザ名、ユーザ名のパスワード、ポート番号(3306のまま)、ルートのパスワードを設定します。

セキュリティを考慮してMySQLの初期設定を変更します。
先ほどコピーしたlaradockフォルダ下にある.envファイルを開きます。

LaradockのenvファイルのMySQL設定
### MYSQL ##############################################################################################################

MYSQL_VERSION=8.0
MYSQL_DATABASE={任意のデータベース名 例:colejo}
MYSQL_USER={任意のユーザ名 例:colejo}
MYSQL_PASSWORD={任意のパスワード 例:colejo_pass}
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD={任意のrootパスワード 例:colejo_root_pass}
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

docker-composeコマンドでビルドしてコンテナを立ち上げる

Laradockにはapacheやphpmyadmin、redisなど様々なサービスがあります。
ここではシンプルにnginxとmysqlのみを立ち上げます。

nginxとmysqlをビルドしコンテナを立ち上げる
user@xxx ~/colejo/laradock (master)
$ docker-compose up -d nginx mysql
... インストール たくさんメッセージ ...

Recreating laradock_applications_1 ...
Recreating laradock_mysql_1 ...
Recreating laradock_applications_1
Recreating laradock_applications_1 ... done
Recreating laradock_workspace_1 ...
Recreating laradock_workspace_1 ... done
Recreating laradock_php-fpm_1 ...
Recreating laradock_php-fpm_1 ... done
Recreating laradock_nginx_1 ...
Recreating laradock_nginx_1 ... done

ダウンロード、ビルド、コンテナ起動までやってくれちゃいます…
ブラウザで
http://192.168.99.100
にアクセスするとnginx 404エラーが表示されるはずです。

コンテナが起動していることを確認する
user@xxx ~/colejo/laradock (master)
$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
530b4296be85        laradock_nginx       "nginx"                  56 seconds ago      Up 55 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
80b9ab70dc63        laradock_php-fpm     "docker-php-entryp..."   57 seconds ago      Up 56 seconds       9000/tcp                                   laradock_php-fpm_1
6630e9bd63f6        laradock_workspace   "/sbin/my_init"          57 seconds ago      Up 56 seconds       0.0.0.0:2222->22/tcp                       laradock_workspace_1
949ab9ef9495        laradock_mysql       "docker-entrypoint..."   58 seconds ago      Up 57 seconds       0.0.0.0:3306->3306/tcp                     laradock_mysql_1

laradock_nginx_1
laradock_nginx_1
laradock_workspace_1
laradock_mysql_1
のステータスが「Up」であれば、起動できています。

Laravelプロジェクトを作成

Docker上でcomposerを使いLaravelプロジェクトを作成
user@xxx ~/colejo/laradock (master)
$ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel ./
Do not run Composer as root/super user! See https://getcomposer.org/root for details

Installing laravel/laravel (v5.5.22)
  - Installing laravel/laravel (v5.5.22): Downloading (100%)
Created project in ./
> @php -r "file_exists('.env') || copy('.env.example', '.env');"

... 略 ...

> @php artisan key:generate
Application key [base64:{キー}] set successfully.
$ 

ローカル環境からDocker上でコマンドを実行しています。
Docker上でコマンドを実行しなくてもインストールできますが、あとあと謎の不具合に悩むことになりかねません!!!
必ずDocker上でLaravelのプロジェクトを作成してください!!!
※詳細はDocker Tips コンテナ上でコマンドを実行する(dockerとdocker-composeを使った場合)を参照してください。

ここで
http://192.168.99.100/
にアクセスすると、Laravelのウェルカム画面が表示されます。

MySQLの設定を反映

/laradock/.env に設定したMySQL

LaradockのenvファイルのMySQL設定
### MYSQL ##############################################################################################################

MYSQL_VERSION=8.0
MYSQL_DATABASE={任意のデータベース名 例:colejo}
MYSQL_USER={任意のユーザ名 例:colejo}
MYSQL_PASSWORD={任意のパスワード 例:colejo_pass}
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD={任意のrootパスワード 例:colejo_root_pass}
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

これを、/src/.envファイルに反映します。

srcのenvファイルのMySQL設定
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE={.envで設定したデータベース名 例:colejo}
DB_USERNAME={.envで設定したユーザ名 例:colejo}
DB_PASSWORD={.envで設定したパスワード 例:colejo_pass}

ついでにLaravelのdatabase.phpの値も変更します。
/src/config/database.phpを開きます。

database.php
// 略
    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'mysql'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', '{.envで設定したデータベース名 例:colejo}'),
            'username' => env('DB_USERNAME', '{.envで設定したユーザ名 例:colejo}'),
            'password' => env('DB_PASSWORD', '{.envで設定したパスワード 例:colejo_pass}'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
// 略

Laravelからデータベースにアクセスできることを確認します。
Laravelにはマイグレーションという機能があり、テーブルのスキーマもプログラムで管理できます。
マイグレーションを行う際に、Laravelからデータベースにアクセスするため、確認ついでに実行します。

コンテナ上でマイグレーションを実行
docker-compose exec workspace php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

これでLaravelの開発環境が整いました!

6
8
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
6
8