Using make and Makefiles with a docker based application development strategy are a great way to track shortcuts and allow team members to easily run common docker or application tasks without having to remember the syntax specifics. Without a “default” target make will attempt to run the first target (the default goal). This may be desirable in some cases, but I find it useful to have
make just print out a usage, and require the operator to specify the exact target they need.
#Makefile DC=docker-compose DE=docker-compose exec app .PHONY: help help: @sh -c "echo ; echo 'usage: make <target> ' ; cat Makefile | grep ^[a-z] | sed -e 's/^/ /' -e 's/://' -e 's/help/help (this message)/'; echo" docker-up: $(DC) up -d docker-down: $(DC) stop docker-rm: $(DC) rm -v docker-ps: $(DC) ps docker-logs: $(DC) logs test: $(DE) sh -c "vendor/bin/phpunit"
Now without any arguments
make outputs a nice little usage message:
$ make usage: make <target> help (this message) docker-up docker-down docker-rm docker-ps docker-logs test $
This assumes a bunch of things like you must be calling
make from the correct directory, but is a good working proof of concept.