Como passar variáveis ambientais para contêineres Docker

54

Jack Wallen mostra como passar variáveis ambientais para contêineres Docker para um processo de desenvolvimento mais eficiente.

Você sabia que pode passar variáveis de ambiente do seu host para os contêineres Docker? Ao usar esse recurso, você pode tornar o desenvolvimento desses contêineres um pouco mais eficiente. Mas antes de entrarmos no como isso, precisamos abordar o que — como em, quais são as variáveis ambientais?

As variáveis de ambiente são valores dinamicamente nomeados que podem ser armazenados e, em seguida, passados para serviços, aplicativos ou scripts. Esta é uma maneira fácil de armazenar um valor em um local centralizado (geralmente na memória) e, em seguida, usá-lo globalmente. Para saber mais sobre quais são as variáveis ambientais, confira “Linux 101: Quais são as variáveis do ambiente?”

Esses tipos de variáveis são um truque incrivelmente útil para ter na manga. E se você é um desenvolvedor de contêineres, eles podem ajudar a tornar seu trabalho um pouco mais fácil.

Deixe-me mostrar como.

O que você vai precisar

A única coisa que você precisará passar variáveis de ambiente para os contêineres Docker é uma instância de execução do Docker e um usuário que faz parte do grupo docker. É isso, é isso. Vamos passar algumas variáveis.

Como definir uma variável de ambiente

Para passar uma variável de ambiente para um recipiente, primeiro temos que defini-lo. Vou demonstrar isso no Linux. Se você usar um sistema operacional diferente para o desenvolvimento de contêineres, você precisará descobrir como fazer o mesmo em sua plataforma de escolha.

Digamos que queremos definir a variável para um usuário de banco de dados e planejamos usar essa variável para diferentes contêineres. Poderíamos definir uma variável chamada DB_USER, que seria viável para qualquer contêiner usando qualquer tipo de banco de dados. Digamos que o valor para DB_USER será o TechRepublic. Para definir essa variável, emitiríamos o comando:

export DB_USER=TechRepublic

Para verificar se essa variável foi definida, emita o comando:

echo $DB_USER

Você deveria ver o TechRepublic impresso no terminal. É isso, você definiu sua variável. Vamos dar um passo adiante (por exemplo) e também definir uma senha como uma variável de ambiente. Você não faria isso na produção, mas é uma boa maneira de ilustrar como isso é feito. Defina uma variável de ambiente para a senha com:

Publicações Relacionadas
export DB_PWORD=T3chR3public

Como passar a variável para um contêiner

Agora que você entende como as variáveis do ambiente funcionam, você pode ver como elas podem ser facilmente passadas para seus contêineres. Primeiro vou demonstrar como fazê-lo a partir da linha de comando docker, e depois usando um arquivo .env.

Ao contrário de usar variáveis de ambiente no Linux, você não pode defini-las no host e, em seguida, passar essas variáveis definidas para o contêiner da mesma maneira que você faria dentro do sistema host. Em outras palavras, você não pode usar as variáveis que acabamos de definir com o comando Docker como:

docker run --name postgresql -e $DB_PWORD -e $DB_USER -d postgres

Se você tentar implantar o recipiente como tal, ele será executado, mas sairá imediatamente. Por que? Porque ao contrário do sistema Linux, onde você pode praticamente definir variáveis ambientais como quiser, as imagens de contêineres esperam certas variáveis. Por exemplo, o banco de dados PostgreSQL não pode usar DB_PWORD ou DB_USER, pois espera POSTGRES_PASSWORD e POSTGRES_USER. Para isso, você pode definir essas variáveis de ambiente em seus hosts Linux com os comandos:

export POSTGRES_PASSWORD=t3chr3public
export POSTGRES_USER=TechRepublic

Ok, agora podemos executar o mesmo comando com:

docker run --name postgresql -e POSTGRES_PASSWORD -e POSTGRES_USER -d postgres

O comando terá sucesso e o contêiner continuará funcionando. Você pode testá-lo acessando o comando PostgreSQL dentro do contêiner, emitindo:

docker exec -it postgresql psql -U $POSTGRES_USER

Você deve encontrar-se no console PostgreSQL dentro de seu contêiner.

Como passar variáveis com um arquivo .env

One of the problems with passing environment variables as described above is that they live on in memory (until you unset them with the unset command). To avoid this, we use an environment variable file.

Let’s stick with the same variables we used above. Create a new .env file with the command:

nano .env

Nesse arquivo cole o seguinte:

POSTGRES_PASSWORD=t3chr3public
POSTGRES_USER=TechRepublic

Salve e feche o arquivo.

Agora, como passamos essas variáveis? Simples, nós emitiríamos o comando:

docker run --name postgresql --env-file .env -d postgres

Certifique-se de usar o caminho completo para o seu arquivo .env (se você não estiver executando o comando docker do mesmo diretório que abriga o arquivo). Seu contêiner será implantado e estará pronto para uso. Você pode testá-lo acessando o console PostgreSQL. A única diferença é que você tem que digitar manualmente o usuário (como não definimos a variável POSTGRES_USER no sistema host). Esse comando seria:

docker exec -it postgresql psql -U TechRepublic

E é assim que você passa variáveis de ambiente para um contêiner Docker, seja da linha de comando ou usando um arquivo .env. Espero que você possa usar este método em seu fluxo de trabalho de desenvolvedor para tornar as coisas um pouco mais eficientes.

você pode gostar também