Laravel x Dockerと言えば「Laradock」!いやーそのまんまですね。
でもコレ、なめてはいけないシロモノです。
自前でLaravelをDockerで環境構築しようとするとどうしても単一のコンテナだけでやってしまったり、WebサーバーとDBサーバーのコンテナを分けるだけとか、vagrantとあんまり変わらん使い方になってしまいがちですが、Dockerの本質は「疎結合」であり、本来「1コンテナ = 1プロセス」で構成するのが基本です(厳密には子プロセスまでは意識する必要はないため「1コンテナ = 1ロール[役割]」という考え方もある)。
具体的に言うとWebサーバーならapache / nginxでひとつのコンテナ、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