Laravel x Dockerと言えば「Laradock」。
そのまんまな名前ですが、ローカル開発環境のベースもvagrantからdockerにすっかり様変わりした昨今で、Laravelを使う人たちの間ではだいぶ浸透したんじゃないでしょうか。
Dockerを触り始めたばかりの頃はLaravelをDockerで環境構築しようとするとどうしても単一のコンテナだけでやってしまったり、WebサーバーとDBサーバーのコンテナを分けるだけとか、vagrantとあんまり変わらん使い方になってしまいがちですが、Dockerの本質は「疎結合」であり、本来「1コンテナ = 1プロセス」で構成するのが基本です(厳密には子プロセスまでは意識する必要はないため「1コンテナ = 1ロール[役割]」という考え方もある)。
具体的に言うとWebサーバーならapache / nginxでひとつのコンテナ、php-fpmも別コンテナ、beanstalkdなどのキューサービス、RedisなどのKVSソフト、当然mysqlなどのDBもそれぞれ別のコンテナで立ち上げ、そしてそれらを結合させる。各コンテナを用意し、それぞれ通信ができるようにポートフォーワーディングの設定などが必要なのですが、この辺を自分でやるのって想像してみただけでも面倒くさそうです。
こういったことを一手に引き受けて、LaravelアプリケーションをDockerのベストプラクティスの仕様に合わせてサクッと構築してくれるのが「Laradock」です。上で例で挙げたようなサービスはもちろん、Laradockは以下のサービスをモジュールとして最初から備えており、それぞれ「docker-compose up」コマンドの引数として指定してやるだけでサービスコンテナの立ち上げ、設定まで行ってくれます。
adminer aerospike apache2 aws-eb-cli beanstalkd beanstalkd-console caddy cassandra certbot couchdb docker-registry docker-web-ui DOCUMENTATION elasticsearch gearman gitlab grafana graylog haproxy hhvm ide-codiad ide-icecoder ide-theia ide-webide ipython jenkins jupyterhub kibana laravel-echo-server laravel-horizon logs logstash maildev mailhog manticore mariadb memcached minio mongo mongo-webui mosquitto mssql mysql neo4j nginx percona php-fpm php-worker phpmyadmin portainer postgres postgres-postgis rabbitmq redis redis-cluster redis-webui rethinkdb selenium solr sonarqube thumbor traefik varnish workspace zookeeper
例で挙げたようなサービスを立ち上げた場合の構成内容。dind(Docker in Docker)の仕組みで構築されており、サービスごとにコンテナが立ち上げられています。この例の場合、「docker-compose up -d nginx mysql redis beanstalkd」のコマンド1行でここまでやってくれる。
4c19ffb0100c laradock_nginx "/bin/bash /opt/star…" 19 hours ago Up 19 hours 0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1 7cba96b93ed0 laradock_beanstalkd "/usr/bin/beanstalkd" 19 hours ago Up 19 hours 0.0.0.0:11300->11300/tcp laradock_beanstalkd_1 f3a3c996de61 laradock_php-fpm "docker-php-entrypoi…" 19 hours ago Up 19 hours 9000/tcp laradock_php-fpm_1 3f75a6c6a2ba laradock_workspace "/sbin/my_init" 19 hours ago Up 19 hours 0.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp laradock_workspace_1 6fe28f1f2743 docker:19.03-dind "dockerd-entrypoint.…" 19 hours ago Up 19 hours 2375-2376/tcp laradock_docker-in-docker_1 a4c2851706ca laradock_mysql "docker-entrypoint.s…" 25 hours ago Up 19 hours 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_mysql_1 e4a432332ea8 laradock_redis "docker-entrypoint.s…" 25 hours ago Up 19 hours 0.0.0.0:6379->6379/tcp laradock_redis_1
具体的な構築方法はあちこちで書かれていますが、以下の記事などその通りやるだけでとにかく画面表示するところまでサクっとできるのでまずは一度やってみることをお勧めします。
qiita.com
※補足:dockerは今はDocker Desktopを使えばwindows proでなくhomeでもWSL上で動かせるようになってます