Use Makefile to build, run, test and clean
This will simplify the ci and unify the way we manage docker image locally.