Rearrange docker file and refactor docker compose setup and docs
- save harddisk memory with smaller images based on alpine
- no need to build local images when using docker compose
- using stages in dockerfile to get rid of the build dependencies in final image
- generally reduce the number of dependent files and scripts