"This process can be trivially automated with shell scripts" [Author when speaking about LXD] --> I personally have the reverse experience after using Docker vs VM + pure bash scripts or Ansible.
Dockerfile/Docker-compose deployments fit in a couple of lines, where an Ansible deployments can spread easily across multiple playbooks.
Dockerfile is quite declarative (WORKDIR, USER, COPY, etc). It's easier to predict what it will do than when using a pure bash script or ansible playbook.
And even RUN, by leverage the cache layers, it gives you a bit of immutability + and increased provisioning speed.