Como passar variáveis ​​de ambiente para contêineres do Docker Como usar os ganchos do Git para automação do Commit Qual é a diferença entre COPY e ADD em Dockerfiles? Como usar Enums em PHP 8.1 Como usar Docker Cp para copiar arquivos entre host e contêineres Como se conectar a compartilhamentos de rede com o aplicativo iOS Files Como atualizar contêineres Docker para aplicar atualizações de imagem


0

Os programas geralmente controlam a operação por meio da configuração incluída no software, e as variáveis ​​de ambiente permitem que os usuários as definam no tempo de execução. No entanto, a execução de processos em contêineres Docker complica as coisas, então como você passa variáveis ​​de ambiente para um contêiner?

Para que são utilizadas as variáveis ​​de ambiente?

As variáveis ​​de ambiente permitem que você desacople a configuração do executável do aplicativo. Por exemplo, você não gostaria de armazenar a senha do banco de dados de produção em sua base de código – se o fizesse, ela seria visível no Git e qualquer pessoa com acesso ao seu código poderia derrubar seu banco de dados.

Em vez disso, você o define com uma variável de ambiente, que armazena um par chave-valor simples e permite que você acesse o valor em qualquer aplicativo em execução na mesma sessão de shell (eles não são acessíveis globalmente). Isso também tem a vantagem de poder definir facilmente configurações diferentes para ambientes diferentes. Por exemplo, ter chaves separadas para bancos de dados de desenvolvimento e produção ou usar um terminal de API diferente.

Definir essas variáveis ​​para contêineres Docker pode ser feito de três maneiras principais – com argumentos CLI, .env arquivos de configuração ou por meio de docker-compose.

Com um argumento de linha de comando

O comando usado para iniciar contêineres Docker, docker run, aceita variáveis ​​ENV como argumentos. Basta executá-lo com o -e bandeira, abreviação de --enve passe o par chave = valor:

sudo docker run 
-e POSTGRES_USER='postgres' 
-e POSTGRES_PASSWORD='password' 
...
Propaganda

E, se você já tem essas variáveis ​​de ambiente definidas no ambiente que está executando esse comando, você pode simplesmente passá-las diretamente pelo nome:

// set variable
POSTGRES_PASSWORD='password'

// use it later
docker run -e POSTGRES_PASSWORD -e POSTGRES_USER ...

Segurança adicional com um arquivo .env

Passar variáveis ​​com argumentos CLI funciona muito bem, mas tem uma desvantagem – essas variáveis ​​são visíveis do host. Eles são registrados no histórico de comandos e visíveis na lista de processos para o processo iniciado.

O Linux tem uma maneira integrada de gerenciar permissões para isso – acesso a arquivos. Armazenando as variáveis ​​em um .env arquivo permite que você controle o acesso a esse arquivo com permissões de arquivo (chmod, chown)

Criar um .env arquivo com variáveis ​​no seguinte formato, cada uma em uma nova linha:

POSTGRES_PASSWORD='password'
POSTGRES_USER='postgres'
APPLICATION_URL='example.com'

Então, passe para docker run com o --env-file bandeira:

docker run --env-file ./envfile ...

Com Docker-Compose

Claro, muitas pessoas não lançam contêineres Docker diretamente com docker rune, em vez disso, opte por usar um docker-compose arquivo para lidar com a configuração de vários contêineres, todos representando um único aplicativo.

Para passar variáveis ​​de ambiente para um contêiner iniciado dessa maneira, você terá que configurar o arquivo de composição para passar as variáveis ​​da sessão para o contêiner do Docker. Esta configuração aqui passa o POSTGRES_USER variável para o ambiente de construção e o ambiente de tempo de execução e define um valor padrão se ele não existir.

version: '3.1'
services:
  my-service: 
    build:
      context: .
      args:
        - POSTGRES_USER=${POSTGRES_USER:-default}
    environment: 
      - POSTGRES_USER=${POSTGRES_USER:-default}
Propaganda

Você precisará definir as variáveis ​​de ambiente antes de executar docker-compose up, caso contrário, não será possível acessá-los. Você poderia armazená-los no arquivo de composição, mas isso geralmente é rastreado e versionado, o que anula o propósito das variáveis ​​env.

Com Kubernetes

Kubernetes é um sistema de orquestração que pode lidar com a execução de centenas de contêineres em uma rede. Ele ainda usa o Docker, mas você só vai tocar na configuração, portanto, passar as variáveis ​​de ambiente diretamente não funcionará.

Em vez disso, você pode defini-los na configuração do pod:

apiVersion: v1
kind: Pod
metadata:
  name: example
spec:
  containers:
    - ...
      env:
        - name: SERVICE_PORT
          value: "80"
        - name: SERVICE_IP
          value: "172.17.0.1"

O Kubernetes é complicado e há muitas maneiras diferentes de trabalhar com variáveis ​​de ambiente. Para saber mais, você pode ler seus guias sobre injeção de dados em pods.


Like it? Share with your friends!

0

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win

0 Comments

Your email address will not be published. Required fields are marked *

Choose A Format
Personality quiz
Series of questions that intends to reveal something about the personality
Trivia quiz
Series of questions with right and wrong answers that intends to check knowledge
Poll
Voting to make decisions or determine opinions
Story
Formatted Text with Embeds and Visuals
List
The Classic Internet Listicles
Countdown
The Classic Internet Countdowns
Open List
Submit your own item and vote up for the best submission
Ranked List
Upvote or downvote to decide the best list item
Meme
Upload your own images to make custom memes
Video
Youtube, Vimeo or Vine Embeds
Audio
Soundcloud or Mixcloud Embeds
Image
Photo or GIF
Gif
GIF format