04.07.2017, 20:18, "Lucas Viecelli" <lviecelli...@gmail.com>:
> Alguém utiliza o PostgreSQL com Docker em um ambiente de produção?

Tenho alguns serviços ainda com docker em produção, mas me arrependi disso
já faz tempo e estou gradualmente mudando isso.

O docker tem vários problemas com algumas coisas que são importantes para
os meus ambientes (mas talvez não seja para o seu), como selinux (exigido
por algumas auditorias) e ipv6. Mesmo nas coisas mais simples, ele consegue
causar mais trabalho do que resolve, como quando embaralha as regras dos
meus firewalls para fazer o NAT funcionar no bridge entre os containers (o
que é tudo completamente desnecessário quando usando ipv6, se ele usasse
endereços do escopo certo para redes locais: link-local e realm-local, por
exemplo). E quando ele tenta mapear volumes inteiros na memória virtual do
dockerd (se eu não me engano, ele faz um monte de mmap MAP_PRIVATE, sob
copy-on-write, que precisa de espaço caso aconteça o write) e falha com
"falta de memória" por causa do overcommit_memory=2 (mesmo com muitos GBs
efetivamente livres na RAM) não é legal. </rant>

E isso eu nem falei dele com o Postgres ainda. Concordando com o Leonardo e
indo mais além, eu também preciso fazer muitas configurações de kernel para
memória, rede e outros I/Os variados (parâmetros de SAN, por exemplo) nos
servidores de banco de dados. E não dá para fazer isso só com o docker (nem
com swarm+machine, se eu não me engano). Pior que isso, alguns parâmetros
do Postgres atrapalham o docker e vice-versa (exemplo foi o
overcommit_memory, que me obrigou a colocar swap desnecessariamente
exagerados só para conseguir fazer o docker-pull de imagens gordas; também
tem outro de ipv6 que eu não lembro agora). E tem inicialização de
clusters, de tablespaces, configurações de replicação, de backup etc.

Basicamente a única utilidade de um Postgres em docker seria para entregar
o executável cru porque todo o resto precisaria ser feito por fora dele. E
já que essa é a situação, então um repositório rpm/deb/apk junto com
systemd/upstart faz isso melhor que o docker hoje em dia para ambiente
produtivo. E as configurações externas viriam de um ansible/chef/puppet,
que fica mais adequado para isso mesmo. Então recomendo algo parecido com o
que o Leonardo disse: colocar o banco em uma (ou mais, claro) máquina
própria, bare metal ou virtualizada. E deixar o docker só para as outras
partes da sua solução, em máquinas diferentes. É o que eu tenho feito
ultimamente, depois de passar pelo vale de desilusão do hype (mas admito
que a mão está coçando para ir para o próximo hype e substituir os meus
dockers por rkt).

Agora, se a conversa for sobre ambientes para testes, então o docker pode
ajudar bastante. Criar um container com o Postgres, já com um cluster
interno inicializado e com um banco de dados carregado com dados de testes
ajuda muito os desenvolvedores que souberem colocar a aplicação deles em um
container e subir os dois localmente por um docker-compose. Mas desses dois
containers, eu só levaria o da aplicação para produção, se muito.

Boa sorte,
-- 

Arthur Nascimento - tureba
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a