DockerでLaravel環境を構築する②~PHPの導入~の続きです。これで最後です。
#MySQLのインストール
次にDBを使えるようにするため、MySQLをインストールしていきます。
services:
# 省略
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: sample
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
environmentはDockerコンテナ内で使用する環境変数を指定できます。
ただしこれで終わりではなく、最後に(laravelをインストールした後に)
今設定したこれらの値を、laravelのアプリ内に設定することで、実際にmysqlを使えるようにしていきます。
また、volumesによって、mysqlのデータを永続化しています。
最終的なdocker-compose.ymlは以下のようになります。
version: '3'
services:
web:
image: nginx:1.15.6
ports:
- "8000:80"
depends_on:
- app
volumes:
- ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
app:
image: php:7.2-fpm
depends_on:
- mysql
volumes:
- .:/var/www/html
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: sample
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
#Laravelのインストール
次は、Laravelをインストールします。
laravelのインストールにはcomporserが必要ですが、最初に作成したPHPにはそれがありません。なので,
imageを取得してPHPを立ち上げるのではなく、「phpのimage+comporserのインストール」ができるDockerfileを作成します。
dockerディレクトリの下にphpというディレクトリを作り、そこにDockerfileを作成し、内容を以下のようにします。
docker/php/Dockerfile ↓
FROM php:7.2-fpm
# install composer
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim
RUN apt-get update \
&& apt-get install -y libpq-dev \
&& docker-php-ext-install pdo_mysql pdo_pgsql
WORKDIR /var/www/html
次に、docker-compose.yml内のappサービスを以下のように書き換え、「build: ./docker/php」で、Dockerにホストされているimageからではなく、
作成したDockerfileからビルドするようにします。
app:
build: ./docker/php
depends_on:
- mysql
volumes:
- .:/var/www/html
そして、Nginxの設定(docker/default.conf)のroot(ドキュメントルート、4行目あたり)を書き換えて以下のようにします。
root /var/www/html/my-laravel-app(自分の作成したlaravelアプリの名前)/public;
これで、nginxをリスタートします。
docker-compose restart
再度アクセスし、
このようになればOKです!
最後に、(MySQLのインストールの続き)
環境変数の各値を、Laravel内のプロジェクトの .envファイルに記入します。
$ cd my-laravel-app(作成したlaravelのアプリに移動)
$ vi .env
こんな感じで、.envファイルを開き、
以下のようになっている箇所を
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
docker-compose.ymlで定義した内容に合わせ、このように変更してください。
DB_HOSTのところは、docker-composeで定義したサービス名になります。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=user
DB_PASSWORD=password
以上で、作成したlaravelアプリで、mysqlが使えるようになっています。
nginxをリスタートし
$ docker-compose restart
再度アクセスして、コンテナの中に入ります。
$ docker-compose exec app bash
root@xxxxxxxxx:/var/www/html#
#で入力待ちになっていればOKです。
作成したlaravelのアプリに移動して、マイグレーションを実行し、以下のようになれば完成です!!
root@xxxxxxxxx:/var/www/html# cd my-laravel-app(作成したlaravelのアプリに移動)
root@xxxxxxxxx:/var/www/html# php artisan migrate
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