I do something similar, with a single web-only-style container per site and traefik (though I"ve also got a setup using nginx-proxy) as reverse proxy. I tried HAproxy for a while (it’s what CDCK uses, last I knew), but found it cumbersome.
I am pretty sure that you need one redis per Discourse server.