公式サイトを参考にして、DockerでLaravel開発環境構築手順をなぞってみましたので、そのメモを残します。
かなり基本的なこともメモしているつもりなので、これからやってみようという方の参考になればと思います。
環境
- Docker for Mac
Docker for Macをインストールしています。
$ docker --version
Docker version 17.09.0-ce, build afdb6d4
$ docker-compose --version
docker-compose version 1.16.1, build 6d1ac21
Laradockについて
ここから引用します。
Laradock is well known in the Laravel community, as the project started with single focus on running Laravel projects on Docker. Later and due to the large adoption from the PHP community, it started supporting other PHP projects like Symfony, CodeIgniter, WordPress, Drupal…
Laravelだけでなく、Symfonyなどの他フレームワーク環境もサポートするとのことです。(今となっては名前が少々紛らしい気もしますが。。)
Getting Started
それではGetting Startedの手順をなぞっていきます。
今回はA.2) Don’t have a PHP project yet:
を参考にしていきます。
任意のフォルダでLaradockをclone
$ git clone https://github.com/laradock/laradock.git
環境設定ファイルを編集
この後の手順でdocker-composeを実行することになりますが、その際にdocker-composeが参照する環境設定ファイルを用意します。
雛形がリポジトリ内に用意されていますので、これをコピーします。
$ cp env-example .env
.env
ファイルについての説明は以下。
コピーしたファイル内にApplication Path
を設定する箇所があるので、手順に従って編集します。
以下の場合、laradockディレクトリと同じ階層にproject-z
という名前でディレクトリを用意することになります。
APPLICATION=../project-z/
以降の手順でnginxやMySQLの環境をビルドしますが、ホスト側のポートを設定する箇所がありますので、お使いの環境で利用可能なポートを設定するようにしてください。
私はnginxのポートを変更しました。
NGINX_HOST_HTTP_PORT=18080
docker-composeで環境構築
ここではUsageに記載されている例に従って、Webサーバとしてnginx、データベースにMySQLを導入します。
nginx/sites以下の設定雛形を編集します。
私はnginx配下にコピーしてから編集しました。
$ cp nginx/sites/laravel.conf.example nginx/laravel.conf
そして、root
の設定を変更します。
今回は以降の手順でmyapp
という名前でlaravelのプロジェクトを作成するので、そのプロジェクトのpublicディレクトリをrootに設定します。
root /var/www/myapp/public;
また、nginx/Dockerfile
を編集して、laravel.conf
を反映するようにします。
ADD laravel.conf /etc/nginx/conf.d/
docker-composeでnginxとMySQLの環境をビルドし、さらにコンテナをバッググランドで起動します。
(私の環境では、nginxのビルドでエラーが発生しましたので、対処方法を後述します。)
$ docker-compose up -d nginx mysql
ビルドに成功していれば、コンテナがそれぞれ起動しているはずです。
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------
laradock_applications_1 /true Exit 0
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
laradock_nginx_1 nginx Up 0.0.0.0:443->443/tcp, 0.0.0.0:18080->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
なお、workspace
およびphp-fpm
については、依存関係が設定されているため、docker-composeの引数に指定していなくても実行されるようになります。
Note: The workspace and php-fpm will run automatically in most of the cases, so no need to specify them in the up command.
workspace上でプロジェクト生成
workspaceコンテナ上で作業をしていきます。
workspaceコンテナに入るには、以下のコマンドを実行します。
$ docker-compose exec --user=laradock workspace bash
laradock
というユーザでログインしていますが、workspaceを構築する際に作成されたユーザです。(workspaceディレクトリ配下のDockerfileを参照)
また、Composerもすでにインストール済みですので、これを使ってプロジェクトを生成します。
$ pwd
/var/www
$ composer create-project laravel/laravel myapp
なお、/var/www
は、.env
に指定したAPPLICATIONのパスをマウントしています。(docker-compose.ymlで確認できます)
つまり、この例ではproject-z
ディレクトリが相当します。
よって、上記コマンドで生成されたLaravelのプロジェクトは、ホスト側のproject-z
ディレクトリ配下に作成されることになります。
Macのhostsを編集
上記手順で作成したlaravel.conf
では、バーチャルホストの設定でserver_name
にlaravel.devと設定していました。
ということで、/etc/hosts
に以下の設定を追加しておきます。
127.0.0.1 laravel.dev
ブラウザからlaravel.dev:18080
に接続して、Laravelの初期画面が表示されれば目標達成です。
補足:nginxのビルドエラー
プロキシ未設定のためapkコマンドでこけました。
docker-compose.yml内nginxのビルドパラメータ(args)にHTTP_PROXY
を渡すようにします。
nginx:
build:
context: ./nginx
args:
- PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
- PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
- HTTP_PROXY=${HTTP_PROXY}