Sobes.tech
Junior

Todas as comandos no Dockerfile criam camadas?

sobes.tech IA

Resposta da IA

Sim. Cada instrução no Dockerfile cria uma nova camada na imagem, exceto, por exemplo, ARG, LABEL, ENV. Estas instruções apenas adicionam metadados ou variáveis de ambiente, sem afetar o conteúdo do sistema de ficheiros da camada.

Instruções importantes que criam camadas:

  • FROM: Imagem base a partir da qual começa a construção.
  • RUN: Executar comandos no contêiner. Cada instrução RUN é uma camada separada. Combinar comandos numa única instrução RUN com && permite reduzir o número de camadas.
  • COPY: Copiar ficheiros e diretórios do host para o contêiner.
  • ADD: Semelhante a COPY, mas também pode extrair ficheiros comprimidos e descarregar ficheiros via URL.
  • WORKDIR: Alterar o diretório de trabalho para instruções seguintes.
  • VOLUME: Criar um ponto de montagem.

Exemplo de demonstração de camadas durante a construção:

FROM ubuntu:latest

RUN apt-get update && apt-get install -y nginx

COPY index.html /var/www/html/

WORKDIR /app

CMD ["nginx", "-g", "daemon off;"]

Ao construir este Dockerfile, cada instrução FROM, RUN, COPY, WORKDIR, CMD (embora CMD e ENTRYPOINT tecnicamente não criem uma camada no sistema de ficheiros, criam uma camada de configuração) forma a sua própria camada, que é cacheada pelo Docker. Os diferentes tipos de instruções e o seu impacto nas camadas:

Instrução Cria uma camada do sistema de ficheiros? Impacto
FROM Sim Imagem base
RUN Sim Execução de comandos
COPY Sim Copiar ficheiros
ADD Sim Copiar ficheiros (com funcionalidades adicionais)
WORKDIR Sim Alterar diretório
ENV Não Definir variáveis de ambiente
ARG Não Definir argumentos de construção
LABEL Não Adicionar metadados
VOLUME Sim Definir pontos de montagem
USER Sim Escolher utilizador
EXPOSE Não Declarar portas
ENTRYPOINT Não Configurar o ficheiro executável
CMD Não Configurar o comando para o contêiner

Menos camadas tornam as imagens mais leves e a construção mais rápida graças a um melhor cache e à redução do tamanho da imagem. A otimização do Dockerfile muitas vezes consiste em minimizar o número de instruções RUN e na ordem dos comandos para maximizar a utilização do cache.