PHPフレームワーク市場
PHPフレームワークは2014年からLaravelへの人気が集まっています。
以前symfonyで開発していたのですが、人気は横ばい。Cake、Zendに関しては下火です。
いつの間にかLaravelの一人勝ち状態です。
仮想化市場
VMwareやVirtualboxの仮想化は広く使われいますが、起動が遅かったりと課題もあります。
Dockerの登場でコンテナ型の仮想化が容易になりました。
ホスト型とコンテナ型の違いはこちらの記事がとてもわかりやすいです。
https://qiita.com/akinko/items/8fb50feb6d60eb975dba
カーネルをホストと共有していてその上に複数のコンテナが動くイメージです。
docker導入のメリットをこちらがよく説明してくれています
人気の2つを合わせたLaradock触っとけば間違いない
今回はLaravel+Nginx+phpMyAdminの環境を構築します。
あらかじめ以下をインストールしておく必要があります。
- Docker
- Git
windowsの場合
windows for dockerを以下の手順でインストールします。
https://qiita.com/Ogaaaan/items/99fe54f052ca450889f7
環境構築
Laradockインストール
ワークディレクトリ作成し、githubからclone
$ mkdir Work
$ cd Work
$ git clone https://github.com/LaraDock/laradock.git
コンテナ内のアプリケーションの設定ファイルを作成します。
laradock内のenv-exampleファイルを.envファイルへコピーします。
$ cd laradock
$ cp env-example .env
コンテナの環境設定変更
今回は下記のようなフォルダ構成にしたいと思います。
フォルダ構成
work
┗ laradock
┗ develop
Laradockディレクトリ配下の.envファイルのAPP_CODE_PATH_HOSTを変更してアプリケーションディレクトリを指定することができます。
APP_CODE_PATH_HOSTを../developに、MYSQLのバージョンをlatestから5.7にデータベス名、User、passwordも変更します。
最新版の8.0系はLaravelのmigrateコマンドでこける可能性あります。
$ vi .env
# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../develop
### MYSQL #################################################
MYSQL_VERSION=5.7
MYSQL_DATABASE=laradock
MYSQL_USER=laradock
MYSQL_PASSWORD=laradock
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=laradock
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
### PHP MY ADMIN ##########################################
# Accepted values: mariadb - mysql
PMA_DB_ENGINE=mysql
# Credentials/Port:
PMA_USER=laradock
PMA_PASSWORD=laradock
PMA_ROOT_PASSWORD=laradock
PMA_PORT=8080
コンテナ起動
docker-composeコマンドでnginx、mysql、workspace、phpmyadminを起動します。
-dオプションでコンテナがバックグラウンドで起動し実行し続けます。
docker-composeは、複数のコンテナで構成されるアプリケーションについて、Dockerイメージのビルドや各コンテナの起動・停止などをより簡単に行えるようにするツールです。
dockerは1コンテナ=1プロセスなので、
ホストOSからpsコマンドを叩くとDocker上で動いているプロセスがそのまま確認できます。
$ docker-compose up -d nginx mysql workspace phpmyadmin
$ docker-compose ps
Laravelプロジェクトの作成
workspace(作業領域)に入ります。
--prefer-distでLaravelのバージョン指定できます。
最新は5.7ですが、今回は5.5を指定します。
プロジェクト作成には少し時間がかかります。
$ docker-compose exec --user=laradock workspace bash
laradock@5cf89da63592:/var/www$
laradock@5cf89da63592:/var/www$ composer create-project laravel/laravel develop --prefer-dist "5.5"
Laravelの環境設定変更
作成されたLaravelプロジェクト配下の.envを更新します。
laradock@5cf89da63592:/var/www$ cd develop/
laradock@5cf89da63592:/var/www/develop$ vi .env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laradock
DB_USERNAME=laradock
DB_PASSWORD=laradock
laradock@5cf89da63592: exit
nginxのroot変更
cd laradock
vi nginx/sites/default.conf
root /var/www/develop/public;
コンテナ再起動
docker-compose restartだとlaravelのルートの設定が変わらないので、
コンテナ自体を作り直します。
docker-compose down
docker-compose build --no-cache mysql
docker-compose up -d nginx mysql workspace phpmyadmin
docker-compose ps
確認
全てのコンテナがupになっていればOKです。
Name Command State Ports
--------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_phpmyadmin_1 /run.sh supervisord -n Up 0.0.0.0:8080->80/tcp, 9000/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
mysqlが起動していない場合は~/.laradock/data/mysqlが壊れてしまっている可能性があります。その場合は下記のこちらサイトを参考にしてください。
http://localhost:8080でphpmyadminにアクセスできることを確認します。
phpmyadminで.envに指定したユーザー、パスワードでログインできればOKです。
コンテナ間でどうやって通信しているのか?疑問に思うと思った方はこちら
これで、Laravelの開発をスタートする準備完了です。