To my knowledge it had most of these things before any other chat protocol was widespread and prior to the great silo-ing.
"Hey, I want to set up a modern messenger."
"Sure! Here's XMPP, the ten extensions you need to enable and configure (problem left as an exercise for the reader), and the seven ports you need to open!"
"... Okay? A Matrix node is apparently a drop-in solution; I'm gonna use that."
XMPP is in desperate need of a Docker image that Just Works and the wizard to set up that Docker image. And then you need users savvy enough to have their clients configured correctly.
Matrix servers? You have mostly one implementation to choose from and it comes "packaged" as a monster container with several python modules likely already with CVEs and god knows what else. And then the resource usage...
Or install something that comes set up the way you probably wanted and never think about it again. Just docker and poof. Like Snikket
If I can make time again, I'll give that a look!
Also Snikket meets your Docker requirements if you're into containers.
The last time I tried to get jabberd set up on an Ubuntu install, the port-opening and config became a nightmare and induced me to give up. No good signal on why it wasn't working.