Docker and LXD don't compete. Docker is great for running clustered processes - cloud-native apps - where Docker gives you hyperelasticity. CS Docker Engine provides more coordination facilities for those cloud-native apps.
LXD is more like KVM in that gives you "guests" that feel like a full OS. You can run existing apps in there in exactly the same way you would run them in a VM.
So these are two counterparts in the container continuum, and it's useful to understand them both so you use the right thing at the right time.