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.