Do Básico às Builds de Estágios Múltiplos

DockerBeginner
Pratique Agora

Introdução

O Docker revolucionou a maneira como desenvolvemos, enviamos e executamos aplicações. No cerne da funcionalidade do Docker está a capacidade de criar imagens personalizadas, adaptadas às nossas necessidades específicas. Neste desafio, você explorará o poder e a flexibilidade do comando docker build, aprendendo a criar imagens Docker para diversos cenários.

Desde aplicações simples até configurações mais complexas que envolvem dependências e variáveis de ambiente, você ganhará experiência prática com os conceitos fundamentais da criação de imagens Docker. Ao final deste desafio, você terá uma base sólida para construir imagens Docker eficientes e eficazes, uma habilidade crucial nos fluxos modernos de desenvolvimento e implantação de software.

Vamos começar nossa jornada no mundo da construção de imagens Docker!

Build Docker Básica

Começaremos pelo básico. Nesta etapa, você criará uma imagem Docker simples que exibe uma mensagem "Hello, World!". Isso familiarizará você com a estrutura básica de um Dockerfile e o comando docker build.

Tarefas

  1. Navegue até o diretório hello-world em /home/labex/project.
  2. Abra o Dockerfile neste diretório e adicione as instruções necessárias.
  3. Construa uma imagem Docker chamada hello-world usando o comando docker build.

Requisitos

  • Realize todas as operações no diretório /home/labex/project/hello-world.
  • Use a imagem base Alpine Linux em seu Dockerfile.
  • A imagem Docker deve imprimir "Hello, World!" ao ser executada.

Exemplo

Após completar esta etapa, você deverá ser capaz de executar o seguinte comando e ver a saída:

$ docker run hello-world
Hello, World!

Ótimo trabalho ao criar sua primeira imagem Docker! Este exemplo simples demonstra os princípios básicos da criação de imagens. Na próxima etapa, utilizaremos esse conhecimento para criar uma imagem mais complexa com dependências.

✨ Verificar Solução e Praticar

Construindo uma Imagem Docker com Dependências

Agora que você está familiarizado com o básico, vamos abordar um cenário mais realista. Nesta etapa, você criará uma imagem Docker para uma aplicação Python que utiliza o framework web Flask. Isso introduzirá o conceito de gerenciamento de dependências em suas imagens Docker.

Tarefas

  1. Navegue até o diretório flask-app em /home/labex/project.
  2. Abra o Dockerfile neste diretório e adicione as instruções necessárias para instalar as dependências.
  3. Examine o arquivo requirements.txt para entender as dependências necessárias.
  4. Construa uma imagem Docker chamada flask-app usando o comando docker build.

Requisitos

  • Realize todas as operações no diretório /home/labex/project/flask-app.
  • Use a imagem base python:3.7-alpine em seu Dockerfile.
  • Garanta que as dependências listadas em requirements.txt sejam instaladas na imagem.
  • O Dockerfile deve copiar o arquivo requirements.txt e instalar as dependências.

Exemplo

Após completar esta etapa, você deverá ver a imagem flask-app ao listar as imagens Docker:

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
flask-app    latest    abcdef123456   2 minutes ago   55.8MB

Excelente trabalho! Você criou uma imagem Docker que inclui dependências externas. Este é um cenário comum em aplicações do mundo real. Na próxima etapa, exploraremos como usar variáveis de ambiente para tornar nossas imagens mais flexíveis e configuráveis.

✨ Verificar Solução e Praticar

Construindo uma Imagem Docker com Variáveis de Ambiente

O gerenciamento de configuração é um aspecto crucial de aplicações conteinerizadas. Nesta etapa, você criará uma imagem Docker que utiliza uma variável de ambiente para definir o número da porta de uma aplicação Flask. Isso demonstrará como tornar suas imagens Docker mais dinâmicas e adaptáveis a diferentes ambientes.

Tarefas

  1. Navegue até o diretório flask-app-env em /home/labex/project.
  2. Abra o Dockerfile neste diretório e adicione instruções para definir uma variável de ambiente.
  3. Modifique o arquivo app.py para usar a variável de ambiente para o número da porta.
  4. Construa uma imagem Docker chamada flask-app-env usando o comando docker build.

Requisitos

  • Realize todas as operações no diretório /home/labex/project/flask-app-env.
  • Use a imagem base python:3.7-alpine em seu Dockerfile.
  • Defina uma variável de ambiente PORT com o valor padrão de 5000 no Dockerfile.
  • Modifique a aplicação Flask para usar a variável de ambiente PORT para definir a porta de escuta.
  • Garanta que todos os pacotes Python necessários listados em requirements.txt estejam instalados.

Exemplo

Após completar esta etapa e executar o container, você deverá conseguir acessar a aplicação:

$ docker run -d -p 5000:5000 flask-app-env
$ curl http://127.0.0.1:5000
Hello, World!

Bom trabalho! Você criou uma imagem Docker mais flexível que pode se adaptar a diferentes ambientes usando variáveis de ambiente. Esta é uma técnica poderosa para criar imagens de container reutilizáveis e configuráveis. Em nossa etapa final, exploraremos um recurso avançado do Docker: builds de múltiplos estágios (multi-stage builds).

✨ Verificar Solução e Praticar

Construindo uma Imagem Docker com Múltiplos Estágios

Para o nosso desafio final, vamos nos aprofundar em builds de múltiplos estágios (multi-stage builds). Esta técnica avançada permite criar imagens Docker mais eficientes usando várias etapas no processo de construção. Você criará uma imagem Docker para uma aplicação Go, usando um estágio para compilar o código e outro para criar uma imagem enxuta, pronta para produção.

Tarefas

  1. Navegue até o diretório go-app em /home/labex/project.
  2. Abra o Dockerfile neste diretório e adicione as instruções para uma build de múltiplos estágios.
  3. Examine o arquivo main.go para entender a aplicação Go simples.
  4. Construa uma imagem Docker chamada go-app usando o comando docker build.

Requisitos

  • Realize todas as operações no diretório /home/labex/project/go-app.
  • Use golang:1.14-alpine como imagem base do estágio de build e alpine como imagem base do estágio final.
  • A aplicação Go deve imprimir "Hello, World!" ao ser executada.
  • A aplicação Go deve ser compilada usando o comando go build.
  • A imagem Docker final deve conter apenas o binário compilado, não o ambiente de desenvolvimento Go.

Exemplo

Após completar esta etapa, você deverá ser capaz de executar o seguinte comando e ver a saída:

$ docker run go-app
Hello, World!
✨ Verificar Solução e Praticar

Resumo

Parabéns por completar este desafio abrangente de construção de imagens Docker! Você percorreu o caminho desde a criação de uma imagem Docker básica até a implementação de técnicas avançadas como builds de múltiplos estágios. Ao longo do caminho, você aprendeu como:

  1. Criar uma imagem Docker simples com um Dockerfile básico.
  2. Gerenciar dependências em suas imagens Docker.
  3. Usar variáveis de ambiente para tornar suas imagens mais flexíveis.
  4. Implementar builds de múltiplos estágios para criar imagens eficientes e prontas para produção.

Essas habilidades formam a base do uso eficaz do Docker e serão úteis em diversos cenários, desde o desenvolvimento e testes até implantações em produção. Você adquiriu experiência prática com a CLI do Docker e a sintaxe do Dockerfile, o que é inestimável para qualquer pessoa que trabalhe com aplicações conteinerizadas.

Ao continuar sua jornada com o Docker, lembre-se de que essas operações básicas são os blocos de construção para fluxos de trabalho mais complexos. Pratique essas habilidades regularmente e você se tornará cada vez mais proficiente na criação e gerenciamento de imagens de container, resultando em processos de desenvolvimento e implantação mais ágeis e otimizados.

Continue explorando as capacidades do Docker e não hesite em experimentar diferentes imagens base, estratégias de build e técnicas de otimização. O mundo da conteinerização é vasto e cheio de possibilidades, e agora você está bem equipado para navegá-lo com confiança!