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.