ENV

A instrução ENV em um Dockerfile é usada para definir variáveis de ambiente que estarão disponíveis durante a construção da imagem e na execução do contêiner. Essas variáveis podem configurar comportamentos da aplicação, fornecer valores padrão, ou armazenar dados sensíveis (embora seja recomendado ter cuidado ao usá-las para este último propósito).

Sintaxe Básica

ENV VARIAVEL_NOME=valor

Funcionalidades do ENV

  • Definir Variáveis de Ambiente: Variáveis de ambiente definidas com ENV podem ser utilizadas em comandos subsequentes no Dockerfile, assim como na aplicação em execução dentro do contêiner.

  • Substituição de Variáveis: Você pode usar as variáveis definidas com ENV em outras instruções do Dockerfile, como RUN, CMD, e ENTRYPOINT.

Exemplos de Uso

Definir uma Variável de Ambiente Simples

FROM node:14
ENV NODE_ENV=production

Aqui, a variável NODE_ENV é definida como production. Essa variável pode ser usada pela aplicação Node.js para ajustar configurações de produção.

Usar Variáveis de Ambiente em Comandos RUN

FROM python:3.10
ENV APP_HOME=/usr/src/app
WORKDIR $APP_HOME
COPY . $APP_HOME

Neste exemplo:

  • A variável APP_HOME é definida como /usr/src/app.

  • O comando WORKDIR usa $APP_HOME para definir o diretório de trabalho.

  • O comando COPY também usa $APP_HOME para determinar o local onde os arquivos serão copiados.

Definir Múltiplas Variáveis em uma Única Instrução

Aqui, três variáveis de ambiente são definidas em uma única instrução ENV, melhorando a legibilidade do Dockerfile.

Variáveis de Ambiente e Execução do Contêiner

As variáveis de ambiente definidas com ENV no Dockerfile estarão disponíveis para qualquer comando ou script que seja executado no contêiner.

Você pode sobrepor ou adicionar variáveis de ambiente ao executar um contêiner usando a opção -e ou --env no comando docker run:

Este comando irá sobrescrever a variável NODE_ENV para o valor development apenas durante a execução do contêiner.

Boas Práticas e Considerações

  • Evitar Informações Sensíveis: Embora seja possível definir segredos ou credenciais com ENV, essa prática não é recomendada, pois as variáveis podem ser expostas ao inspecionar a imagem ou o contêiner. Use ferramentas específicas para gestão de segredos em vez disso.

  • Valor Padrão para Variáveis: Usar ENV para definir valores padrão é uma prática comum, permitindo que esses valores sejam sobrescritos durante a execução, se necessário.

  • Ordem das Instruções ENV: Colocar as instruções ENV no início do Dockerfile permite que você reutilize as variáveis nas instruções subsequentes, tornando o Dockerfile mais limpo e eficiente.

Exemplo Avançado

Configurando um Contêiner com Variáveis de Ambiente

Neste exemplo:

  • APP_HOME define o diretório base da aplicação.

  • APP_PORT configura a porta na qual a aplicação será exposta.

  • JAVA_OPTS permite ajustar as opções de execução do JVM.

  • Todas as variáveis são usadas posteriormente no Dockerfile, garantindo que os comandos sejam consistentes e configuráveis.

Resumo

  • ENV define variáveis de ambiente que podem ser usadas durante a construção da imagem e na execução do contêiner.

  • Variáveis de ambiente podem ser referenciadas em outras instruções do Dockerfile, melhorando a flexibilidade e configurabilidade.

  • É recomendável evitar o uso de ENV para armazenar informações sensíveis e adotar boas práticas de segurança e gestão de segredos.

Laboratório

Diferente de LABEL que não afeta a imagem nem o container, ENV cria uma variável de ambiente dentro do container.

A variável de ambiente pode ser sobrescrita na construção do container:

Last updated