RUN

A instrução RUN em um Dockerfile é usada para executar comandos no contêiner durante a construção da imagem. Esses comandos são executados em uma nova camada sobre a imagem base definida pela instrução FROM, e o resultado é mantido na imagem resultante.

Sintaxe Básica

RUN <comando>

Existem duas formas principais de utilizar a instrução RUN:

  1. Shell Form: Executa o comando no shell padrão do sistema, geralmente /bin/sh -c no Linux.

    RUN apt-get update && apt-get install -y curl
  2. Exec Form: Especifica o comando e seus argumentos como uma lista, sendo executado diretamente sem invocar um shell.

    RUN ["apt-get", "update"]

Exemplos de Uso

Instalação de Pacotes

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
    curl \
    vim \
    git

Neste exemplo, o comando apt-get é usado para atualizar os pacotes e instalar o curl, vim, e git no sistema. O -y responde "sim" automaticamente a todos os prompts durante a instalação.

Limpeza de Pacotes Intermediários

Para minimizar o tamanho da imagem Docker, é comum limpar caches de pacotes após a instalação:

Neste exemplo, após instalar os pacotes, o cache do apt é limpo e os arquivos temporários são removidos para reduzir o tamanho da imagem.

Execução de Comandos de Build

Aqui, um projeto Node.js é configurado. O comando npm install instala as dependências e npm run build cria o projeto.

Considerações Importantes

  • Camadas: Cada comando RUN cria uma nova camada na imagem Docker. Para otimizar a imagem, combine comandos que possam ser executados juntos.

  • Cache: O Docker usa um cache para comandos RUN. Se nada no Dockerfile mudar antes da linha RUN, o Docker reutiliza a camada existente no cache. Isso acelera a construção, mas pode resultar em comportamentos inesperados se um comando depende de recursos externos que mudam frequentemente (por exemplo, pacotes de software).

  • Segurança: Evite armazenar senhas ou informações sensíveis em comandos RUN, pois elas podem ser visíveis em camadas intermediárias.

Exemplos Avançados

Uso de Scripts

Às vezes, pode ser mais fácil ou limpo escrever scripts shell que executam uma série de comandos e, em seguida, chamar esse script com RUN.

Multistage Builds

Aqui, o comando RUN go build -o myapp é usado para compilar o código no estágio builder.

A instrução RUN é essencial para personalizar a imagem Docker conforme suas necessidades específicas, permitindo instalar pacotes, configurar o ambiente e preparar a aplicação para execução.

Last updated