Dockerfile e Gerenciamento de Imagens
O que é um Dockerfile e para que é utilizado?
Resposta:
Um Dockerfile é um documento de texto que contém todos os comandos que um usuário pode chamar na linha de comando para montar uma imagem. É utilizado para automatizar o processo de criação de imagens Docker, garantindo consistência e reprodutibilidade em diferentes ambientes.
Explique o propósito da instrução FROM em um Dockerfile.
Resposta:
A instrução FROM inicializa um novo estágio de build e define a imagem base para as instruções subsequentes. Todo Dockerfile deve começar com FROM, especificando a imagem pai a partir da qual sua imagem será construída, por exemplo, FROM ubuntu:22.04.
Qual a diferença entre CMD e ENTRYPOINT em um Dockerfile?
Resposta:
CMD fornece argumentos padrão para um contêiner em execução, que podem ser substituídos por argumentos da linha de comando. ENTRYPOINT configura um contêiner que será executado como um executável, e seus argumentos são tipicamente fixos, com CMD fornecendo parâmetros adicionais a ele.
Como funciona o cache de build do Docker e por que ele é importante?
Resposta:
O Docker armazena em cache cada camada durante o processo de build. Se uma instrução e seu contexto não foram alterados desde o último build, o Docker reutiliza a camada em cache, acelerando significativamente os builds subsequentes. Isso é crucial para fluxos de trabalho de desenvolvimento eficientes.
O que é o arquivo .dockerignore e qual o seu propósito?
Resposta:
O arquivo .dockerignore lista arquivos e diretórios que devem ser excluídos quando o contexto de build é enviado para o daemon Docker. Isso evita que arquivos desnecessários sejam incluídos na imagem, reduzindo o tamanho da imagem e o tempo de build, de forma semelhante ao .gitignore.
Explique o conceito de builds multi-stage (multi-stage builds) em Dockerfiles.
Resposta:
Builds multi-stage permitem que você use múltiplas instruções FROM em seu Dockerfile, cada uma iniciando um novo estágio de build. Isso é usado para separar as dependências de tempo de build das dependências de tempo de execução, resultando em imagens finais menores e mais seguras, copiando apenas os artefatos necessários de estágios anteriores.
Como você reduz o tamanho de uma imagem Docker?
Resposta:
Para reduzir o tamanho da imagem, use uma imagem base mínima (por exemplo, Alpine), aproveite os builds multi-stage, limpe arquivos e caches desnecessários após a instalação, consolide comandos RUN para minimizar camadas e use .dockerignore para excluir arquivos irrelevantes do contexto de build.
O que é uma camada de imagem Docker (Docker image layer) e por que elas são importantes?
Resposta:
Uma imagem Docker é composta por múltiplas camadas somente leitura, cada uma representando uma instrução no Dockerfile. As camadas permitem armazenamento e distribuição eficientes através de cache e compartilhamento de camadas comuns entre imagens, reduzindo o espaço em disco e os tempos de download.
Quando você usaria ADD em vez de COPY em um Dockerfile?
Resposta:
COPY é geralmente preferido, pois apenas copia arquivos ou diretórios locais para dentro da imagem. ADD possui funcionalidades adicionais, como extrair automaticamente arquivos tar de URLs ou caminhos locais, mas isso pode levar a comportamentos inesperados ou riscos de segurança se não for cuidadosamente gerenciado.
Como você marca (tag) uma imagem Docker e por que a marcação é importante?
Resposta:
Você marca uma imagem usando docker build -t <nome_imagem>:<tag> . ou docker tag <imagem_origem>:<tag_origem> <imagem_destino>:<tag_destino>. A marcação é crucial para versionar imagens, identificar diferentes builds (por exemplo, latest, dev, v1.0) e enviá-las para registros.
Para que é usada a instrução WORKDIR?
Resposta:
A instrução WORKDIR define o diretório de trabalho para quaisquer instruções RUN, CMD, ENTRYPOINT, COPY ou ADD que a sigam no Dockerfile. Ela ajuda a organizar o sistema de arquivos dentro do contêiner e simplifica comandos subsequentes, fornecendo um caminho padrão.