【laradock】DockerでLaravel環境をサクッと構築!Laradockって何が凄い!?

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上で動かせるようになってます