Uma solução é adicionar mais instâncias do php-fpm ao seu arquivo de composição do docker e, em seguida, usar um nginx upstream, conforme mencionado nas outras respostas para o equilíbrio de carga entre elas. Isso é feito neste exemplo de repo docker-compose: link
upstream php {
#If there's no directive here, then use round_robin.
#least_conn;
server dockernginxphpfpm_php1_1:9000;
server dockernginxphpfpm_php2_1:9000;
server dockernginxphpfpm_php3_1:9000;
}
Isso não é realmente ideal, pois será necessário alterar a configuração do nginx e o docker-compose.yml quando quiser aumentar ou diminuir a escala.
Observe que a porta 9000 é interna ao contêiner e não ao seu host real, portanto, não importa que você tenha vários contêineres php-fpm na porta 9000.
O Docker adquiriu a Tutum neste outono. Eles têm uma solução que combina um contêiner HAProxy com sua API para ajustar automaticamente a configuração do balanceador de carga para os contêineres em execução com balanceamento de carga. Essa é uma boa solução. Em seguida, o nginx aponta para o nome do host atribuído ao balanceador de carga. Talvez o Docker integre ainda mais esse tipo de solução em suas ferramentas após a aquisição do Tutum. Há um artigo sobre isso aqui: link
O tutum é atualmente um serviço pago. Rancher é um projeto de código aberto que fornece um recurso semelhante de balanceamento de carga. Eles também têm um "rancher-compose.yml" que pode definir o balanceamento de carga e o dimensionamento da configuração dos serviços no docker-compose.yml. link link
UPDATE 2017/03/06: usei um projeto chamado interlock que funciona com o Docker para atualizar automaticamente a configuração do nginx e reinicie-o. Veja também a resposta do @ iwaseatenbyagrue, que tem abordagens adicionais.