Desafio de Build Multi-estágio no Docker

DockerBeginner
Pratique Agora

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 Dockerfile utilizando 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á:

  1. Crie um novo diretório chamado myapp e acesse-o.

    mkdir myapp
    cd myapp
    
  2. Baixe 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.git
    

    Mova o código baixado para a raiz do diretório myapp.

    mv nodejs-example/* .
    rm -rf nodejs-example
    
  3. Crie um novo arquivo chamado Dockerfile no diretório myapp com 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 myapp dentro do caminho /home/labex/project.
  • Clonar o código-fonte NodeJS para dentro do diretório myapp.
  • Criar o Dockerfile no diretório myapp com 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:

  1. Utilize o comando docker build para gerar a imagem com a tag myapp.

    docker build -t myapp .
    
  2. Verifique se a imagem foi criada com sucesso listando as imagens disponíveis.

Requisitos

Para concluir este desafio, você precisará:

  • Executar o comando docker build dentro 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 interna 3000 para a porta 3030 do host. Após iniciar, você deve validar o acesso à aplicação pelo navegador.

Exemplo

Aqui está um exemplo do objetivo a ser alcançado:

  1. Inicie um novo container Docker chamado my-app.

    docker run --name my-app -p 3030:3000 myapp
    
  2. Abra o navegador e acesse http://localhost:3030 para visualizar a aplicação em execução.

Requisitos

Para concluir este desafio, você precisará:

  • Nomear o container como my-app.
  • Mapear a porta 3000 interna do container para a porta 3030 da 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.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar