GEEKS

Como implantar o PostgreSQL como um contêiner do Docker – CloudSavvy IT

Publicidade

[ad_1]

O PostgreSQL, também conhecido como Postgres, é o primary sistema de banco de dados objeto-relacional. É fashionable por causa de seu alto nível de conformidade com o padrão SQL e inclusão de recursos adicionais que simplificam o trabalho com conjuntos de dados complexos em escala.

O PostgreSQL u.s.a. uma arquitetura cliente-servidor tradicional, então você precisa executá-lo independentemente do código do seu aplicativo. Neste guia, você implantará uma instância do servidor PostgreSQL como um contêiner do Docker. Isso evita adicionar pacotes à máquina host e ajuda a isolar o banco de dados das outras partes da pilha. Certifique-se de que você instalou o Docker antes de continuar.

Começando

O PostgreSQL tem um imagem oficial no Docker Hub, que está disponível em várias variantes diferentes. As tags permitem que você selecione entre as principais versões do PostgreSQL de v9 a v14 e escolha o sistema operacional usado como imagem base. Alpine, Debian Stretch e Debian Bullseye são oferecidos.

Para os propósitos deste educational, usaremos o postgres:14 tag que fornece o PostgreSQL 14 no topo do Bullseye. Você é livre para selecionar uma versão diferente para atender às suas necessidades.

Publicidade

Inicie um contêiner PostgreSQL usando o docker run comando:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/information 
    postgres:14

Você devo forneça um valor para POSTGRES_PASSWORD variável de ambiente. Isso outline a senha que será atribuída à conta de superusuário padrão do Postgres. O nome de usuário é padronizado para postgres mas pode ser alterado configurando o POSTGRES_USER variável de ambiente.

O -v bandeira é usada para montar um quantity do Docker para o diretório de dados do contêiner PostgreSQL. Um quantity nomeado chamado postgres é referenciado; O Docker irá criá-lo ou reanexar o quantity se ele já existir. Você deve usar um quantity para armazenar seu banco de dados fora do contêiner. Sem um, você usará seus dados quando o contêiner parar.

PostgreSQL escuta na porta 5432 por padrão. A porta do contêiner está vinculada à porta 5432 em seu host do Docker pelo -p bandeira. O -d sinalizador é usado para iniciar o contêiner no modo desanexado, tornando-o efetivamente um serviço em segundo plano que continua em execução até ser interrompido com docker forestall.

Fornecendo a senha como um arquivo

Se você não se sentir à vontade para fornecer sua senha de superusuário como um sinalizador CLI de texto simples, poderá injetá-la como um arquivo por meio de um quantity. Você deve então definir o POSTGRES_PASSWORD_FILE variável de ambiente para fornecer ao Postgres o caminho para esse arquivo:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD_FILE=/run/secrets and techniques/postgres-password 
    -v ./postgres-password.txt:/run/secrets and techniques/postgres-password
    -v postgres:/var/lib/postgresql/information 
    postgres:14

Essa técnica também funciona para POSTGRES_USER e outras variáveis ​​de ambiente suportadas.

Conectando-se ao seu banco de dados

Como o PostgreSQL estava vinculado à porta 5432 acima, você pode se conectar ao seu banco de dados em localhost:5432 de qualquer cliente compatível. Use as credenciais que você atribuiu como variáveis ​​de ambiente ao iniciar o contêiner.

A imagem do Docker também inclui o psql binário que você pode invocar com docker exec. Use isso para interagir rapidamente com seu banco de dados a partir de um shell PostgreSQL dentro do contêiner.

docker exec -it postgres psql -U postgres

Conectando-se de outros contêineres do Docker

A criação de uma rede Docker é a maneira preferencial de acessar o PostgreSQL de outros contêineres no mesmo host. Isso evita vincular a porta do servidor Postgres e potencialmente expor o serviço à rede mais ampla do seu host.

Crie uma rede Docker:

docker community create my-app

Inicie seu contêiner Postgres com uma conexão à rede usando o --network bandeira com docker run:

docker run -d 
    --name postgres 
    --network my-app 
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/information 
    postgres:14

Agora associe seu contêiner de aplicativo à mesma rede:

docker run -d
    --name api
    --network my-app
    my-api:newest

Os packing containers na rede podem chegar ao Postgres usando o postgres nome do host, pois este é o call atribuído ao contêiner Postgres. Use a porta 5432 para concluir a conexão.

Configurando o PostgreSQL

Você pode passar as opções do servidor PostgreSQL usando -c sinalizadores após o nome da imagem em seu docker run comando:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/information 
    postgres:14 -c max_connections=100

Tudo depois que o nome da imagem é passado para o comando iniciado no contêiner. Este comando será o binário do servidor PostgreSQL no caso da imagem Postgres.

Você pode usar um arquivo de configuração personalizado ao definir os valores de várias opções. Você precisará usar outro quantity do Docker para montar seu arquivo no contêiner e, em seguida, fornecer um -c flag para instruir o Postgres onde procurar:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v ./postgres.conf:/and many others/postgresql/postgresql.conf 
    -v postgres:/var/lib/postgresql/information 
    postgres:14 -c config_file=/and many others/postgresql/postgresql.conf

Este exemplo u.s.a. uma montagem de ligação do Docker para obter o postgres.conf arquivo em seu diretório de trabalho montado no contêiner /and many others/postgresql diretório. Para uma referência das opções que você pode definir com sinalizadores binários ou diretivas de arquivo de configuração, consulte o Documentação do PostgreSQL.

Semeando o banco de dados

A imagem do Docker oferece suporte a arquivos de semente colocados no /docker-entrypoint-initdb.d diretório. Qualquer .sql ou .sql.gz arquivos serão executados para inicializar o banco de dados. Isso ocorre depois que a conta de usuário padrão e postgres banco de dados foi criado. Você também pode adicionar .sh arquivos para executar scripts de shell arbitrários. Todos os scripts são executados em ordem alfabética.

Esse mecanismo significa que tudo o que você precisa para propagar seu banco de dados é um conjunto de scripts SQL ou shell nomeados na ordem sequencial correta. Monte-os em seu novo contêiner usando um -v bandeira com docker run:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v ./db-seed-files/:/and many others/docker-entrypoint-initdb.d 
    -v postgres:/var/lib/postgresql/information 
    postgres:14

Os scripts de inicialização só serão usados ​​quando o diretório de dados do Postgres estiver vazio. Para fins práticos, isso significa que eles serão executados na primeira vez que o contêiner for iniciado com um novo quantity vazio anexado.

Criando uma imagem de banco de dados personalizada

Você pode optar por encapsular seu arquivo de configuração e scripts de inicialização em sua própria imagem do Docker. Isso permitiria que qualquer pessoa com acesso à imagem criasse uma nova instância do PostgreSQL pré-configurada para seu aplicativo. Aqui está um Dockerfile simples que você pode usar:

FROM postgres:14
COPY postgres.conf /and many others/postgresql/postgresql.conf
COPY db-seed-files/ /and many others/docker-entrypoint-initdb.d/
CMD ["-c", "config_file=/etc/postgresql/postgresql.conf"]

Crie sua imagem personalizada:

docker construct -t custom-postgres:newest .

As instruções de compilação no Dockerfile copiarão o arquivo de configuração do PostgreSQL e os scripts de inicialização do seu diretório de trabalho e os incorporarão à imagem do contêiner. Agora você pode iniciar um contêiner de banco de dados sem fornecer os recursos manualmente:

docker run -d 
    --name custom-postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/information 
    custom-postgres:newest

Você deve conteinerizar seu banco de dados de produção?

Pode ser difícil decidir se deve executar um banco de dados no Docker. A conteinerização do PostgreSQL torna a experiência de configuração mais fácil, mas às vezes é mais difícil de manter. Você precisa ter cuidado ao gerenciar seu contêiner para evitar a perda de dados no futuro. O Docker também adiciona uma sobrecarga de desempenho modesta que vale a pena considerar quando você prevê que o banco de dados do excursion funcionará com volumes de dados muito grandes.

Os benefícios do Docker são maior portabilidade, facilidade de dimensionamento e eficiência do desenvolvedor. A conteinerização de seu banco de dados permite que qualquer pessoa crie uma nova instância usando o Docker, sem instalar e configurar manualmente o PostgreSQL primeiro. Escrever um Dockerfile para seu banco de dados PostgreSQL que adiciona seu arquivo de configuração e scripts de semente SQL é, portanto, uma boa maneira de ajudar os desenvolvedores a iniciar rapidamente novos ambientes.

Resumo

O PostgreSQL é um mecanismo de banco de dados avançado baseado em SQL que adiciona recursos relacionais de objeto. Embora você possa optar por executar uma implantação tradicional em produção, o uso de uma instância em contêiner simplifica a configuração e ajuda os desenvolvedores a criar rapidamente sua própria infraestrutura.

O aspecto mais crítico de uma implantação Dockerized é garantir que você esteja usando um quantity para armazenar seus dados. Isso permitirá que você pare, substitua e atualize seu contêiner para uma versão de imagem posterior sem perder seu banco de dados. Além do armazenamento, você deve avaliar como vai se conectar ao Postgres e evitar vincular portas ao seu host, a menos que seja necessário. Ao se conectar de outro contêiner, é melhor usar uma rede compartilhada do Docker para facilitar o acesso.

[ad_2]

Fonte da Notícia

Publicidade

Osmar Queiroz

Osmar é um editor especializado em tecnologia, com anos de experiência em comunicação digital e produção de conteúdo voltado para inovação, ciência e tecnologia.

Artigos relacionados

Verifique também
Fechar
Botão Voltar ao topo
HexTec News