PHP
laravel
docker
docker-compose
LaraDock

更新履歴

  • 2018-06-12: 記事の内容をv7系に対応
  • 2018-06-12: アップグレード方法を記載

Laradock のインストール

インストール
$ git clone https://github.com/Laradock/laradock.git
laradockディレクトリへ移動
$ cd laradock
テンプレから.envファイルを作成
$ cp env-example .env

Tips

デフォルトの設定ではホスト側のポート番号 3306 はコンテナ側の MySQL ポート 3306 へフォワーディングされる。ホスト側ですでに 3306 を使用していたりする場合は .env ファイルの MYSQL_PORT=3306 を適宜修正する。

.env
MYSQL_PORT=3306
docker-compose.yml
ports:
  - "${MYSQL_PORT}:3306"

上記のように、docker-compose.yml.env の変数定義を参照している。調整が必要な場合は基本的に .env ファイルの方を修正する。

コンテナの起動方法

コンテナの起動
$ docker-compose up -d nginx mysql

Tips

docker-compose.yml に記述されている depends_on ディレクティブの指定により、依存関係にあるサービス(php-fpm / workspace など)も自動で起動する。

コンテナへの入り方

docker ps コマンドでコンテナのステータスを調べる。STATUS が Up になっていれば起動中の証。

起動しているコンテナを表示
$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
bf5c3d89920e        laradock_nginx       "nginx"                  25 minutes ago      Up 25 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
5a14d8d967ff        laradock_php-fpm     "docker-php-entrypoi…"   25 minutes ago      Up 25 minutes       9000/tcp                                   laradock_php-fpm_1
5acec9238740        laradock_workspace   "/sbin/my_init"          25 minutes ago      Up 25 minutes       0.0.0.0:2222->22/tcp                       laradock_workspace_1
3415a979e523        laradock_mysql       "docker-entrypoint.s…"   3 hours ago         Up 25 minutes       0.0.0.0:3307->3306/tcp                     laradock_mysql_1

Tips

--format オプションを利用すると、表示項目を必要な情報のみに絞ることができる。

$ docker ps --format "table {{.Status}}\t{{.Names}}"
STATUS              NAMES
Up 34 minutes       laradock_nginx_1
Up 34 minutes       laradock_php-fpm_1
Up 34 minutes       laradock_workspace_1
Up 34 minutes       laradock_mysql_1

サービス {SERVICE} を指定してコンテナの中に入る

コンテナに入る
$ docker-compose exec {SERVICE} bash

Tips

サービス {SERVICE} には、docker-compose.ymlservices ディレクティブに記述されているサービス名を指定する。

version: '2'

services:

  workspace: ...
  php-fpm: ...
  nginx: ...
  mysql: ...

  :
  :
  :

Laradock においては、workspace, php-fpm, nginx, mysql などそれぞれがサービスにあたる。

workspace
$ docker-compose exec workspace bash
php-fpm
$ docker-compose exec php-fpm bash
nginx
$ docker-compose exec nginx bash
mysql
$ docker-compose exec mysql bash

Laravel プロジェクトの作成

作業はホスト側ではなく workspace コンテナの中に入って行う。パッケージ管理システムの composer など、必要なものがあらかじめ用意されているので自分で準備する手間が要らない。

デフォルトではコンテナの中に入ると root ユーザーになるが、composerroot ユーザーで実行しようとすると警告が表示されてしまうため、--user オプションを laradock で指定してログインする。

ログイン
$ docker-compose exec --user=laradock workspace bash
whoamiでログインユーザーを確認
$ whoami
laradock

コンテナの中に入ったら composer create-project でプロジェクトを作成する。例として foo という名前のプロジェクトを作成する。

プロジェクトの作成
$ composer create-project --prefer-dist laravel/laravel foo

Tips

Laradock では、Laravel 公式の Laravel Installerlaravel new コマンド)ではなく、composer create-project によるプロジェクトの作成を推奨しています。

アプリケーションのパスを変更

デフォルトの環境設定ファイル .env ではアプリケーションのパスが ../ となっています。

.env(デフォルト)
APP_CODE_PATH_HOST=../

先の例では foo という名前でプロジェクトを作成したため、これを ../foo に変更する必要があります。

.env(変更後)
APP_CODE_PATH_HOST=../foo

.env の変更をコンテナに反映させる

コンテナの再起動
$ docker-compose stop
$ docker-compose up -d nginx mysql

構成の確認

ここまで作業を終えると、以下のようなディレクトリ構成になっています。

ディレクトリ構成
$ tree -L 1 ./laradock_sample
./laradock_sample
├── laradock
└── foo

2 directories, 0 files

参考までに。

アプリケーションの確認

ホスト側のポート設定(NGINX_HOST_HTTP_PORT=80)を .env でとくに変更していなければ、ブラウザで http://localhost にアクセスすることができます。80 番ポートを使われると困る場合は適宜変更してください。

Screen Shot 2018-02-05 at 18.36.30.png

Laradock のアップグレード方法

アップグレード
$ docker-compose down
$ git pull origin master