Melhore a Performance Docker: Otimize Builds e Containers
Guia Prático: Criação de Imagens Docker Personalizadas
Este tutorial tem como objetivo guiar desenvolvedores, DevOps, administradores de sistemas e entusiastas interessados em contêineres Docker
Criando e gerenciando containers Docker: guia básicoAprenda a criar e gerenciar contêineres Docker com comandos essenciais, boas práticas e dicas de segurança, garantindo aplicações isoladas e escaláveis. e orquestração na criação de imagens Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. personalizadas usando Dockerfile. Aqui, veremos em detalhes como cada instrução do Dockerfile funciona, além de boas práticas para se obter uma imagem consistente, previsível e fácil de manter.
O que é um Dockerfile?🔗
Um Dockerfile é um arquivo de texto que contém uma sequência de instruções para a construção de uma imagem Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos.. Essas instruções definem o sistema base, as dependências necessárias, a configuração de variáveis de ambiente
Automatizando a implantação de ambientes com Docker ComposeDescubra como automatizar a implantação de ambientes com Docker Compose, garantindo consistência, escalabilidade e agilidade no desenvolvimento., a cópia de arquivos e o comando que será executado quando o contêiner iniciar.
Ao criar um Dockerfile, você descreve passo a passo como deseja que sua imagem Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. seja construída. Isso faz com que o processo de criação seja repetível, permitindo que outras pessoas (ou processos de CI/CD) gerem a mesma imagem sempre que necessário.
Estrutura básica de um Dockerfile🔗
Abaixo está uma visão geral das instruções mais utilizadas em um Dockerfile:
| Instrução | Descrição |
|---|---|
| FROM | Define a imagem base a partir da qual a nova imagem será construída. |
| MAINTAINER (obsoleta) | Define quem mantém a imagem (hoje, utiliza-se rótulos [Labels]). |
| LABEL | Adiciona metadados à imagem (ex.: versão, mantenedor, descrição). |
| RUN | Executa comandos em tempo de build, registrando o resultado em uma nova camada da imagem. |
| COPY | Copia arquivos/diretórios do contexto de build para dentro da imagem. |
| ADD | Similar ao COPY, mas com funcionalidades extras (como extrair arquivos .tar). |
| WORKDIR | Define o diretório de trabalho dentro da imagem. |
| ENV | Configura variáveis de ambiente. |
| EXPOSE | Documenta a porta que o contêiner vai expor (não configura rede automaticamente). |
| CMD | Define o comando (ou entrada padrão) que será executado quando o contêiner iniciar. |
| ENTRYPOINT | Define o executável principal do contêiner, que pode funcionar em conjunto com o CMD. |
Essas instruções podem ser usadas em conjunto para criar imagens altamente personalizadas, possibilitando a adição de dependências, configurações e arquivos necessários para sua aplicação.
Passo a passo na criação de uma imagem personalizada🔗
Nesta seção, construiremos um exemplo de Dockerfile para uma aplicação simples em Node.js. Nosso objetivo será demonstrar como cada instrução entra em ação na prática.
Definindo a imagem base (FROM)
A primeira instrução em qualquer Dockerfile é o FROM, que indica a imagem de base. Para nosso exemplo, usaremos uma imagem oficial do Node.js:
FROM node:18
A versão 18 é apenas um exemplo; escolha aquela que mais se adequa ao seu projeto. Esta imagem já vem com o Node.js e o NPM instalado.
Adicionando metadados com LABEL
Em vez de usar MAINTAINER (que está obsoleto em versões recentes do Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos.), é possível adicionar informações de quem mantém o projeto com LABEL:
LABEL maintainer="Seu Nome <[email protected]>"
Além disso, outros metadados podem ser definidos, como a versão da aplicação ou uma breve descrição:
LABEL version="1.0" \
description="Exemplo de Dockerfile para uma aplicação simples em Node.js"
Definindo variáveis de ambiente (ENV)
Vamos criar uma variável de ambiente
Automatizando a implantação de ambientes com Docker ComposeDescubra como automatizar a implantação de ambientes com Docker Compose, garantindo consistência, escalabilidade e agilidade no desenvolvimento. para definir uma pasta de aplicação dentro do contêiner:
ENV APP_DIR=/usr/src/app
Assim, podemos usar ENV para declarar configurações relevantes, tornando o Dockerfile mais flexível.
Definindo o diretório de trabalho (WORKDIR)
Para evitar repetição nos próximos comandos, definimos o WORKDIR como sendo a variável criada:
WORKDIR $APP_DIR
A partir de agora, todos os comandos serão executados dentro de /usr/src/app.
Copiando arquivos para o contêiner (COPY)
Queremos copiar nossos arquivos de aplicação para dentro da imagem. Supondo que no mesmo diretório do Dockerfile exista um arquivo package.json e uma pasta src com o código:
COPY package*.json ./
COPY src ./src
Assim, o arquivo package.json e a pasta src serão copiados para o APP_DIR definido acima.
Instalando dependências (RUN)
Para instalar as dependências do projeto, utilizamos a instrução RUN:
RUN npm install
Esse comando será executado em tempo de build, gerando uma nova camada na imagem. Se o package-lock.json existir, o Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. usará o cache de camadas para acelerar builds futuros (desde que esse arquivo não seja modificado).
Expondo a porta (EXPOSE)
Se a nossa aplicação Node.js escutar na porta 3000, por exemplo, podemos documentar essa informação:
EXPOSE 3000
É importante lembrar que EXPOSE não abre efetivamente a porta externamente (isso é configurado ao rodar o contêiner com parâmetros como -p 3000:3000 ou no Docker Compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção.). Serve principalmente como metadado.
Definindo o comando de inicialização (CMD ou ENTRYPOINT)
Para iniciar nossa aplicação, definimos um CMD:
CMD ["node", "src/index.js"]
Desta forma, quando o contêiner for iniciado, ele executará o arquivo src/index.js com o Node.js.
Se fosse necessário ajustar a aplicação a partir de parâmetros de linha de comando ou scripts adicionais, poderíamos usar o ENTRYPOINT em conjunto com CMD. Mas para este exemplo, o CMD já é suficiente.
Dockerfile final
Reunindo tudo, nosso Dockerfile ficaria assim:
FROM node:18
LABEL maintainer="Seu Nome <[email protected]>"
LABEL version="1.0" \
description="Exemplo de Dockerfile para uma aplicação simples em Node.js"
ENV APP_DIR=/usr/src/app
WORKDIR $APP_DIR
COPY package*.json ./
RUN npm install
COPY src ./src
EXPOSE 3000
CMD ["node", "src/index.js"]
Construindo a imagem🔗
Após criar o arquivo Dockerfile em um diretório junto com seu código, abra o terminal na pasta do projeto e execute:
docker build -t meu-usuario/minha-imagem:1.0 .
-tespecifica a tag da imagem, que pode incluir seu nome de usuário do Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. Hub.- O
.(ponto final) indica o contexto de build, ou seja, o diretório onde está o Dockerfile e o resto dos arquivos.
Ao finalizar, você terá uma imagem Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. chamada meu-usuario/minha-imagem:1.0 disponível localmente.
Executando o contêiner🔗
Para validar se a imagem funciona, basta executar:
docker run -p 3000:3000 --name meu-container meu-usuario/minha-imagem:1.0
-p 3000:3000publica a porta 3000 do contêiner na porta 3000 do host.--namedefine o nome do contêiner comomeu-container.
A aplicação estará acessível em localhost:3000.
Conclusão🔗
Criar imagens Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. personalizadas passo a passo usando um Dockerfile é fundamental para manter um fluxo de trabalho reprodutível e garantir que todos em sua equipe obtenham resultados consistentes ao construir a aplicação. As instruções essenciais – FROM, RUN, COPY, WORKDIR, ENV, EXPOSE e CMD – trabalham juntas para configurar todo o ambiente
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. necessário para a execução da sua aplicação dentro de um contêiner.
Seguindo este tutorial, você está pronto para experimentar e customizar seus Dockerfiles adequadamente, adicionando diretórios, ferramentas e configurações específicas do seu projeto, sempre mantendo em mente as boas práticas de organização e versionamento de imagens Docker
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos..
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação do Docker Engine: docs.docker.com/engine/
- Documentação oficial do Docker: docs.docker.com/
- Referência de linha de comando Docker CLI: docs.docker.com/engine/reference/commandline/docker/
- Repositório de imagens oficiais no Docker Hub: hub.docker.com/
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás