Introdução
O Docker Multi-stage Build (Build Multi-estágio) é um recurso que permite utilizar múltiplas etapas em um único Dockerfile para gerar a imagem final. Neste desafio, você aprenderá a aplicar essa técnica para criar imagens Docker otimizadas, reduzindo drasticamente o tamanho do artefato final.
Criar um Dockerfile com Build Multi-estágio
Nesta seção, você criará um Dockerfile que utiliza o processo de build multi-estágio.
Tarefas
- Crie um novo
Dockerfileutilizando duas etapas. A primeira etapa deve compilar a aplicação, instalando as dependências necessárias e executando o script de build. A segunda etapa deve gerar a imagem final copiando apenas o código compilado da primeira fase, instalando somente as dependências de produção e expondo a porta necessária.
Exemplo
Aqui está um exemplo dos passos que você seguirá:
Crie um novo diretório chamado
myappe acesse-o.mkdir myapp cd myappBaixe o código-fonte NodeJS do repositório
https://github.com/labex-labs/nodejs-example.git.git clone https://github.com/labex-labs/nodejs-example.gitMova o código baixado para a raiz do diretório
myapp.mv nodejs-example/* . rm -rf nodejs-exampleCrie um novo arquivo chamado
Dockerfileno diretóriomyappcom o seguinte conteúdo:## Stage 1: Build the application FROM node:14-alpine AS base WORKDIR /app COPY . ./ RUN npm install ## Stage 2: Create the final image FROM node:14-alpine WORKDIR /app COPY --from=base /app/ . EXPOSE 3000 CMD [ "npm", "start" ]
Requisitos
Para concluir este desafio, você precisará:
- Criar um diretório chamado
myappdentro do caminho/home/labex/project. - Clonar o código-fonte NodeJS para dentro do diretório
myapp. - Criar o
Dockerfileno diretóriomyappcom o conteúdo especificado.
Build da Imagem Docker
Nesta etapa, você gerará a imagem a partir do Dockerfile criado.
Tarefas
- Realizar o build de uma nova imagem chamada
myapp.
Exemplo
Aqui está um exemplo do que você deve realizar:
Utilize o comando
docker buildpara gerar a imagem com a tagmyapp.docker build -t myapp .Verifique se a imagem foi criada com sucesso listando as imagens disponíveis.
Requisitos
Para concluir este desafio, você precisará:
- Executar o comando
docker builddentro do diretório/home/labex/project/myapp. - Nomear a imagem como
myapp.
Executar um Container Docker
Nesta etapa, você usará a imagem criada para rodar um container funcional.
Tarefas
- Iniciar um container a partir da imagem
myapp. O container deve mapear a porta interna3000para a porta3030do host. Após iniciar, você deve validar o acesso à aplicação pelo navegador.
Exemplo
Aqui está um exemplo do objetivo a ser alcançado:
Inicie um novo container Docker chamado
my-app.docker run --name my-app -p 3030:3000 myappAbra o navegador e acesse
http://localhost:3030para visualizar a aplicação em execução.
Requisitos
Para concluir este desafio, você precisará:
- Nomear o container como
my-app. - Mapear a porta
3000interna do container para a porta3030da máquina host.
Resumo
Neste desafio, você aprendeu a implementar o Docker Multi-stage Build para criar imagens Docker mais leves e eficientes. Ao utilizar múltiplas etapas em um Dockerfile, você consegue isolar o ambiente de compilação do ambiente de execução, reduzindo o tamanho final da imagem e melhorando a segurança. Com esse conhecimento, você já pode otimizar seus próprios projetos utilizando builds multi-estágio.



