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çãoRUNcom&&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.