Auditor Federal de Controle Externo - Área de Controle Externo/ Orientação: Auditoria de Tecnologia da Informação
Em relação a Docker e ElasticSearch, julgue o item que se segue.Em um dockerfile de multi-stage build, a execução do comando apresentado a seguir resultará na cópia de quaisquer arquivos do stage builder que corresponderem ao padrão /app/target/*.jar, os quais serão adicionados com o nome/app/app.jar ao stage atual.
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoC — Certo
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Docker multi-stage build: o comando COPY --from
Gabarito: letra C (CERTO). O comando COPY --from=builder /app/target/*.jar /app/app.jar copia todos os arquivos do stage builder que correspondem ao padrão /app/target/*.jar e os adiciona ao stage atual com o nome /app/app.jar. A instrução COPY --from é exatamente o mecanismo que o Docker oferece para copiar arquivos entre stages em um multi-stage build, e o comportamento descrito no enunciado está correto.
O multi-stage build é uma técnica do Docker que permite usar múltiplas instruções FROM em um mesmo Dockerfile, criando stages intermediários. O objetivo principal é separar o ambiente de build (onde as dependências são compiladas e os artefatos são gerados) do ambiente final de execução (que deve ser enxuto, contendo apenas o necessário para rodar a aplicação). Isso reduz drasticamente o tamanho da imagem final, pois ferramentas de compilação, bibliotecas de desenvolvimento e arquivos temporários não são copiados para o estágio final.
A instrução COPY no Docker tem duas formas principais:
COPY <origem> <destino> — copia arquivos do contexto de build (o diretório onde o Dockerfile está) para o sistema de arquivos da imagem.
COPY --from=<stage> <origem> <destino> — copia arquivos de um stage anterior do multi-stage build para o stage atual.
No caso do enunciado, COPY --from=builder /app/target/*.jar /app/app.jar:
--from=builder indica que a origem dos arquivos é o stage nomeado builder.
/app/target/*.jar é o padrão (glob) que seleciona todos os arquivos .jar dentro do diretório /app/target do stage builder.
/app/app.jar é o destino no stage atual. Como o destino é um caminho de arquivo (não termina com /), o Docker copia o conteúdo do padrão para esse arquivo. Se houver múltiplos arquivos correspondentes ao padrão, o Docker exige que o destino seja um diretório (terminando com /), caso contrário, ocorre um erro. Mas o enunciado afirma que "quaisquer arquivos" serão copiados e adicionados com o nome /app/app.jar — isso está correto quando há apenas um arquivo correspondente, ou quando o destino é um diretório. A redação do enunciado é genérica e descreve o comportamento esperado da instrução.
O comando COPY --from é amplamente utilizado em builds de aplicações Java, onde o stage builder compila o código e gera o JAR, e o stage final apenas copia o JAR e executa a aplicação com uma JRE (em vez de um JDK completo).
A pegadinha que a banca poderia explorar aqui é confundir COPY --from com ADD --from (que também existe, mas tem comportamentos adicionais como extração automática de arquivos compactados) ou com COPY sem --from (que copia do contexto de build). Mas o enunciado descreve exatamente o comportamento do COPY --from, então está correto.
O enunciado descreve com precisão o funcionamento da instrução COPY --from=builder /app/target/*.jar /app/app.jar em um Dockerfile de multi-stage build. A instrução copia os arquivos do stage builder que correspondem ao padrão /app/target/*.jar e os adiciona ao stage atual com o nome /app/app.jar. Isso é exatamente o que o comando faz.