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
- Navegue até o diretório
hello-worldem/home/labex/project. - Abra o
Dockerfileneste diretório e adicione as instruções necessárias. - Construa uma imagem Docker chamada
hello-worldusando o comandodocker 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.
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
- Navegue até o diretório
flask-appem/home/labex/project. - Abra o
Dockerfileneste diretório e adicione as instruções necessárias para instalar as dependências. - Examine o arquivo
requirements.txtpara entender as dependências necessárias. - Construa uma imagem Docker chamada
flask-appusando o comandodocker build.
Requisitos
- Realize todas as operações no diretório
/home/labex/project/flask-app. - Use a imagem base
python:3.7-alpineem seu Dockerfile. - Garanta que as dependências listadas em
requirements.txtsejam instaladas na imagem. - O Dockerfile deve copiar o arquivo
requirements.txte 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.
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
- Navegue até o diretório
flask-app-envem/home/labex/project. - Abra o
Dockerfileneste diretório e adicione instruções para definir uma variável de ambiente. - Modifique o arquivo
app.pypara usar a variável de ambiente para o número da porta. - Construa uma imagem Docker chamada
flask-app-envusando o comandodocker build.
Requisitos
- Realize todas as operações no diretório
/home/labex/project/flask-app-env. - Use a imagem base
python:3.7-alpineem seu Dockerfile. - Defina uma variável de ambiente
PORTcom o valor padrão de 5000 no Dockerfile. - Modifique a aplicação Flask para usar a variável de ambiente
PORTpara definir a porta de escuta. - Garanta que todos os pacotes Python necessários listados em
requirements.txtestejam 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).
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
- Navegue até o diretório
go-appem/home/labex/project. - Abra o
Dockerfileneste diretório e adicione as instruções para uma build de múltiplos estágios. - Examine o arquivo
main.gopara entender a aplicação Go simples. - Construa uma imagem Docker chamada
go-appusando o comandodocker build.
Requisitos
- Realize todas as operações no diretório
/home/labex/project/go-app. - Use
golang:1.14-alpinecomo imagem base do estágio de build ealpinecomo 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!
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:
- Criar uma imagem Docker simples com um Dockerfile básico.
- Gerenciar dependências em suas imagens Docker.
- Usar variáveis de ambiente para tornar suas imagens mais flexíveis.
- 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!



