You can run the full-stack inside a container. eg. run Red Hat or CentOS inside Ubuntu. The process inside LXC / Docker is unaware it's inside a container. You can have 100 processes all think they're binding to a given port, which simplifies things within the container. This is why docker images work so well: they can be fired up and use the same configuration no matter how many instances you create. LXC = jail on steroids.
That's right. It's closer to the software layer than the infrastructure layer, so there's a lot more flexibility. You could essentially run a few machines on bare metal and use Docker as the virtualization layer. Just need an OS that supports LXC and you're good to go.