To chime in here, containers all the way. Started with buildpacks as that seemed like the ultimate zero-conf approach (like Heroku), but very slow, so switched to Containers. Works a charm.
How do you mean? I never touch the actual containers, I always just let Dokku take care of those, I just push the code with the Buildpack and Dokku handles the rest.
There is always a container in the end. But do you actually provide a Dockerfile along with your app code, or do you let buildpack create the container for you (ie. no Dockerfile in your source code)?