LaraDockを使う方法がありましたが、少々大きすぎるので必要最小限のものを自分で用意したくで作ってみました。
今後、このリポジトリをgit cloneすれば手軽にLaravelアプリ開発コンテナが用意できる。(Dockerfile使えばもっと自動化できる)
- Docker-Desctop 2.0.0.2
- docker-compose 1.23.2
- php:7.2.12-fpm
- nginx:1.15.6
- mysql:5.7
$ git clone https://github.com/rinonkia/Docker-Laravel.git sample_app
sample_app
を任意の名前にする。
//.env_db
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=sample
MYSQL_USER=user
MYSQL_PASSWORD=password
MySQLの環境変数は任意で変更する。
.gitignore
も任意で変更。
docker-composer.yml
ファイル内のapp: build
を元にdocker/php/Dockerfile
の内容を実行。
$ cd sample_app
$ docker-compose build
docker images
で確認。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sample_app latest d5f4615b1d01 38 seconds ago 469MB
php 7.2.12-fpm 9d11d506e313 2 months ago 367MB
7.2.12-fpm
のimage
を元にsample_app
imageが作成されている。
docker-compose.yml
ファイルのimage
を元にMySQLとNginxのイメージをpullしてくる。それを元にしてコンテナ起動。
$ docker-compose up -d
以下の内容が出たら成功。
Creating sample_mysql_1 ... done
Creating sample_app_1 ... done
Creating sample_web_1 ... done
しっかりと動いているか確認する。
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
sample_app_1 docker-php-entrypoint php-fpm Up 9000/tcp
sample_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
sample_web_1 nginx -g daemon off; Up 0.0.0.0:8000->80/tcp
http://localhost:8000/
にアクセスし、403 Forbidden nginx/1.15.6
と出ていたら成功。
上手くいかない場合はdocker-compose logs
でログを確認。
コンテナにbashログインする。
$ docker-compose exec app bash
# composer create-project --prefer-dist laravel/laravel sample_app "5.5.*"
以下の警告が出るが気にしない。
do not run Composer as root/super user! See https://getcomposer.org/root for details
docker/web/default.conf
の変更。
root /var/www/html/sample_app/public;
sample/.env
ファイルのDB環境変数を変更。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=sample
DB_USERNAME=user
DB_PASSWORD=password
コンテナ内から退却し再起動。
$ docker-compose restart
http://localhost:8000/
にアクセスし、Laravelが表示されたらOK。
またもやコンテナにbashログイン。
$ docker-compose exec app bash
# cd sample_app
# php artisan migrate
マイグレーションできれば成功。
さらに応用していきたいと思います。コンテナ内にLaravelプロジェクトをgit cloneして、過去に作ったアプリを動かしたい。 Dockerfileが使いこなせるようになったら、もっと自動化できます。nginxのファイルも理解していきたい。