This is a great question! Thanks for raising it!
The build stage (Docker or Pack) is going to occur, in most cases, wherever the CLI is being run “locally”. That being said if you locally set the DOCKER_HOST environment variable to a remote Docker host, you can certainly influence where the build occurs - but again, most people will end up doing this locally.
From this point, if you are using the registry plugin to send the image to a repo (again, most commonly), this will result in the full image (700mb in your example) being pushed to the registry. Subsequent pushes should use some of the Docker layers to reduce the size so you shouldn’t necessarily be pushing 700mb each time. Only the changed layers.
The Waypoint server does not handle the actual building stage of the deployment. We will take a look at clarifying this out in the docs a bit better! Thanks for bringing this up, I can definitely see the confusion!