ARG
A instrução ARG em um Dockerfile é usada para definir variáveis de build-time (tempo de construção) que podem ser passadas como argumentos ao construir uma imagem Docker. Essas variáveis permitem que você personalize o processo de construção da imagem sem precisar modificar o Dockerfile diretamente.
Sintaxe Básica
ARG NOME_DO_ARG=[valor padrão]NOME_DO_ARG: O nome do argumento que você deseja definir. Pode ser utilizado posteriormente no Dockerfile.valor padrão(opcional): Um valor padrão que será usado caso o argumento não seja fornecido durante a construção da imagem.
Funcionalidades do ARG
ARGFlexibilidade na Construção:
ARGpermite que você passe diferentes valores de argumento durante o processo de construção, tornando seu Dockerfile mais flexível e reutilizável.Valores Padrão: Se um valor padrão for fornecido no
ARG, ele será usado se o argumento não for especificado ao construir a imagem.
Exemplos de Uso
Definir um Argumento Simples
FROM ubuntu:20.04
ARG VERSAO_BASE
RUN echo "Construindo imagem baseada na versão: $VERSAO_BASE"Neste exemplo, o argumento VERSAO_BASE é definido e utilizado na instrução RUN. Se o valor de VERSAO_BASE não for fornecido durante a construção, ele será tratado como vazio.
Usar ARG com Valor Padrão
FROM ubuntu:20.04
ARG VERSAO_BASE=1.0
RUN echo "Construindo imagem baseada na versão: $VERSAO_BASE"Aqui, o argumento VERSAO_BASE tem um valor padrão de 1.0. Se o valor não for passado durante a construção, 1.0 será usado.
Passando Argumentos Durante a Construção
Você pode passar argumentos para a construção da imagem usando a flag --build-arg com o comando docker build:
Neste comando, o valor 2.0 é passado para o argumento VERSAO_BASE durante a construção da imagem.
Uso de ARG com ENV
ARG com ENVEmbora os argumentos ARG sejam usados principalmente durante o tempo de construção, você pode combiná-los com a instrução ENV para definir variáveis de ambiente que estarão disponíveis no contêiner em execução.
Neste exemplo, o argumento AMBIENTE é usado para definir a variável de ambiente NODE_ENV. Assim, o valor passado durante a construção determinará o ambiente de execução no contêiner.
Boas Práticas e Considerações
Uso Limitado:
ARGé apenas para uso durante a construção da imagem. As variáveis definidas comARGnão estarão disponíveis no contêiner em tempo de execução, a menos que sejam explicitamente passadas paraENVou usadas em outras instruções.Compatibilidade com Cache: Mudanças nos valores de
ARGpodem invalidar o cache de construção, fazendo com que as instruções subsequentes sejam reconstruídas. UseARGestrategicamente para maximizar a eficiência do cache.Exposição Limitada: Diferente das variáveis de ambiente (
ENV), os valores deARGnão são expostos automaticamente ao contêiner em execução, o que pode ser uma vantagem de segurança em alguns cenários.
Exemplos Avançados
Usando ARG para Escolher uma Imagem Base
Neste exemplo, o argumento IMAGEM_BASE define qual imagem base será usada para construir a imagem Docker. Isso permite que você altere facilmente a base da imagem sem modificar o Dockerfile.
Passando Múltiplos Argumentos
Neste exemplo, PIP_INDEX_URL permite especificar um repositório Python alternativo para instalar as dependências, o que pode ser útil em ambientes que utilizam repositórios privados.
Resumo
ARGdefine variáveis de build-time que podem ser passadas como argumentos durante a construção da imagem Docker.Flexibilidade:
ARGoferece flexibilidade ao permitir que você personalize a construção da imagem sem modificar o Dockerfile.Uso em Tempo de Construção: Os valores de
ARGsó estão disponíveis durante a construção da imagem, não em tempo de execução, a menos que sejam passados paraENV.
Laboratório
Alterar o arquivo em tempo de execução do container:
Quando o argumento é alterado, o cache não é utilizado para construção da camada de arquivo.
Se o valor do argumento for alterado em tempo de execução, a boa prática seria colocar o arquivo mais abaixo no Dockerfile para aproveitar todas as camadas de cache possível
Last updated