• Home

    Escolha seu Plano

    Carreiras Alura

    Evolua com profundidade técnica, direção clara e aplicação prática.

    Jornadas guiadas do básico ao avançado com checkpoints práticos, desenhadas para quem busca profundidade e protagonismo técnico.

    Iniciante

    Comece do zero com uma trilha clara e progressiva.

    Fundamentos práticos para dar os primeiros passos com segurança e construir uma base sólida.

    Intermediário

    Continue sua evolução com cursos que conectam fundamentos, ferramentas e prática profissional. Ganhe autonomia, e avance para projetos mais completos.

    Avançado

    Aprofunde temas técnicos e estratégicos para enfrentar desafios mais complexos. Explore boas práticas, arquitetura, performance com visão profissional.

    Cursos

    Ver mais cursos de Back-end
    • Pensamento computacional: fundamentos da computação e lógica de programação
    • Lógica de programação: mergulhe em programação com JavaScript
    • DDD: fundamentos do design orientado a domínio
    • ASP.NET: autenticação e autorização em APIs e aplicações web
    • Microsserviços: migração de monólitos e modularização

    Cursos

    Ver mais cursos de Dados
    • Python para Dados: primeiros passos
    • Excel: domine o editor de planilhas
    • Engenharia de Dados: Orquestração de Pipelines com Apache Airflow
    • Power BI Desktop: construindo meu primeiro dashboard
    • Governança e Arquitetura de Dados

    Cursos

    Ver mais cursos de Inteligência Artificial
    • IA: Explorando o Potencial da Inteligência Artificial Generativa
    • Engenharia de Prompt: Criando Prompts Eficazes para IA Generativa
    • Claude para Análise de Dados: prompts, integrações e automações
    • Agno: criando agentes e sistemas multiagente
    • Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA

    Cursos

    Ver mais cursos de Front-end
    • HTML e CSS: ambiente, estrutura e estilo
    • React: realizando testes avançados com Jest e Testing Library
    • React: integrando TypeScript em projetos
    • JavaScript: aprendendo a programar
    • React: aplicando arquiteturas de Micro frontends

    Cursos

    Ver mais cursos de DevOps
    • Sistema Operacional Linux: fundamentos e administração prática
    • Containers e Docker: empacotamento, isolamento e gestão
    • Redes: dos conceitos iniciais à criação de uma intranet
    • Linux: gerenciando diretórios, arquivos, permissões e processos
    • Cibersegurança: Fundamentos e práticas integradas

    Cursos

    Ver mais cursos de UX & Design
    • UX Research: mapeando a experiência da pessoa usuária
    • UX/UI Design: Entregando produtos digitais com IA
    • UI Design: Prototipação e animações interativas
    • Figma: Conhecendo o programa
    • Product Design: métricas e ciclo de vida do produto

    Cursos

    Ver mais cursos de Gestão & Negócios
    • Canva: Criação de landing pages e e-mail marketing
    • Agilidade: como ela pode ajudar a criar um time de alta performance
    • Google Analytics 4: Extrair insights e configurar eventos
    • Management 3.0: gerencie o ambiente, não as pessoas
    • Automação de processos com n8n: Inteligência de dados para Marketing

    Cursos

    Ver mais cursos de Mobile
    • React Native: Estilização e Layouts com Flexbox e StyleSheet
    • Flutter: Graphql e suporte offline
    • Android com Gemini: Trabalhando com textos e imagens na IA
    • Dart: trabalhando com orientação a objetos
    • React Native: Dominando Listas com FlatList e ScrollView

    Carreiras

    Ver mais carreiras
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA

    Cursos

    • Engenharia de Prompt: Prompts Eficazes para IA Generativa
    • Claude Code: Criando sua Primeira Aplicação
    • Python: Crie sua Primeira Aplicação
    • Git e GitHub: Compartilhando e Colaborando
    • N8N: Fluxos de Trabalho Avançados

    Cursos

    • Copilot Studio: Solução Multiagentes
    • Padrões de API HTTP e Modelagem de APIs
    • Python para Análise de Dados com SQL
    • Docker: Criando e Gerenciando Containers
    • Design com IA: Otimizando o Processo Criativo

    Cursos

    • Model Context Protocol (MCP)
    • Spec-Driven Development: Dev Assistido por Agentes
    • Arquitetura de Sistemas Distribuídos com Java
    • Governança de Modelos e Reprodutibilidade
    • Pentest: Vulnerabilidades em Aplicações Web

    Escolha seu Plano

    Skills & Go

    O Skills & Go é para Tech Leads, Product Managers, estrategistas e early adopters que transformam ideias em soluções de alto impacto. Em cursos ao vivo e 100% online, você domina a nova era da IA em tempo real.

    Aulas ao vivo

    Saiba mais
    • Agentic Engineering: orquestre múltiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA

    Escolha seu Plano

    Eventos Alura

    Nossos eventos são pensados para quem quer estar à frente das mudanças em tecnologia, IA e inovação. Em experiências presenciais, você acompanha tendências e se conecta com especialistas que estão moldando o futuro.

    Próximos eventos

    • Imersão Engenharia de Software: Dev na Era da IA
    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA

    Escolha seu Plano

    Conteúdos gratuitos

    Explore conteúdos gratuitos para aprender tecnologia no seu ritmo. Encontre artigos com conteúdos técnicos para aprender na prática, notícias para acompanhar as principais tendências do mercado e o Alura Labs, com análises e reflexões de especialistas sobre tecnologia, IA e carreira.

    Conteúdos gratuitos

    • Artigos
    • Notícias
    • Alura Labs
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Para Empresas
  • Sobre a Alura
  • Grupo Alun
  • Entrar
    • Home
    • Carreiras
    • Skills & Go
    • Talent Lab
    • Inteligência Artificial
    • Pós Graduações
    • Artigos
    • Sobre a Alura
    • Grupo Alun
    LoginContato
    • LinkedIn
    • Instagram
    • YouTube
    1. Página inicial
    2. DevOps
    3. Dockerfile: o que é, para que serve e como criar um arquivo Dockerfile no Docker

    Dockerfile: o que é, para que serve e como criar um arquivo Dockerfile no Docker

    11 min11 minutos de leitura

    11 min11 minutos de leitura

    Publicado: 27/08/2019

    Última atualização: 11 de Junho

    1. Tudo começa com um arquivo Dockerfile: por que ele é importante?
    2. O que é Dockerfile e para que serve esse arquivo no Docker?
    3. Qual a diferença entre imagem Docker e container Docker?
    4. Como criar um Dockerfile: passo a passo prático para construir seu arquivo no Docker
    5. Como rodar um Dockerfile e entender seus principais comandos
    6. Resumo: como usar o Dockerfile para criar, rodar e personalizar containers no Docker

    Você sabe o que é Dockerfile e para que serve esse arquivo fundamental no Docker?

    Neste artigo, explicamos de forma prática o que é Dockerfile, para que serve, quando usar, como criar um arquivo Dockerfile e detalhamos os principais comandos (incluindo o RUN Dockerfile) para você dominar a construção de containers no Docker Linux ou Windows. 

    Para uma rápida revisão, começo trazendo essa entrevista que fizemos com o Giovani Bassi sobre Docker e Containers. Se preferir, ouça o episódio do podcast Hipsters Ponto Tech com o mesmo tema. Após essa breve revisão, passaremos para a explicação detalhada sobre Dockerfile: 

    Containers, Docker e Kubernetes com Giovanni Bassi | #HipstersPontoTube 

    Tudo começa com um arquivo Dockerfile: por que ele é importante? 

    Vamos iniciar com um exemplo prático: rodar um container simples contendo Ubuntu com Java instalado. Como essa tarefa pode ser executada? 

    A primeira é escrever o Dockerfile e criar o container a partir dele. A segunda é utilizar o comando docker run, que busca a imagem no Docker Hub e executa o container automaticamente. 

    Mas, quando se usa o comando docker run, ele vai até o Docker Hub, busca essa imagem e baixa para nós. E como essa imagem foi gerada? Isso mesmo, com um Dockerfile feito por outra pessoa! 

    Banner do Guia Tático Alura sobre carreira em tecnologia, destacando o mapa da carreira tech. A imagem convida a explorar diferentes caminhos profissionais, comparar possibilidades e encontrar a próxima fase da carreira na área de tecnologia, com chamada “Explore o mapa”.

    O que é Dockerfile e para que serve esse arquivo no Docker? 

    Dockerfile é um arquivo de texto utilizado para criar imagens personalizadas no Docker. Ele funciona como uma receita, listando os comandos necessários para construir e configurar um container exatamente do jeito que você deseja.  

    Arquivo Dockerfile permite definir a instalação de programas, configurações de ambiente, permissões e muito mais. Seja para projeto pessoal ou empresarial. 

    Há ainda um outro ponto muito interessante que deve ser explorado (muitas pessoas confundem quando ainda estão aprendendo) para entendermos melhor o conceito e começarmos a compreender o Dockerfile mais a fundo: qual é exatamente a diferença entre um container e uma imagem? 

    Qual a diferença entre imagem Docker e container Docker? 

    Uma imagem é uma representação imutável das instruções para criar um container. Não executamos imagens diretamente; elas são usadas como base para criar containers. 

    O fluxo geralmente segue estas etapas: escreve-se um Dockerfile, usa-se o comando docker build para criar uma imagem e, em seguida, utiliza-se docker run para criar e executar o container. A imagem é o meio e o container é o resultado. 

    O ponto que temos que entender agora é o seguinte: escrevemos um Dockerfile, construímos uma imagem a partir dele executando o comando docker build, e, por fim, criamos e rodamos o container com o comando docker run. O container é o fim, enquanto a imagem é o meio. 

    Fluxograma do processo de escrever um dockerfile e construir uma imagem a partir dele executando o comando docker build. 

    Como criar um Dockerfile: passo a passo prático para construir seu arquivo no Docker 

    Escolhi uma pasta no meu computador e nela criei um arquivo chamado Dockerfile (com letra maiúscula e sem extensão mesmo). Nele, adicione a seguinte linha: 

    `FROM ubuntu:18.04` 

    Então, iniciei o processo de criação da imagem. Para isso, abri o terminal e acessei a pasta que contém o Dockerfile. Depois, executei o comando docker build. (com o ponto), e o Docker começou a construir a imagem a partir do arquivo. 

    Ao terminar o processo, executei o comando docker image ls e obtive a seguinte saída: 

    Código sobre as etapas de criação de um container: docker image ls. 

    O resultado acima mostra uma imagem a partir do Dockerfile e ela está pronta para rodar um container com o comando docker run. 

    Agora que já sei o que é e para que serve o Dockerfile, decidi aprender qual o propósito de cada uma das instruções desta ferramenta. 

    Virtualização com Docker - Alura Live #25 

    Como rodar um Dockerfile e entender seus principais comandos 

    FROM 

    A instrução FROM é a mais utilizada para a criação de Dockerfiles. Sabe o motivo? Simplesmente porque ela é obrigatória 🙂. 

    Com essa instrução, pode-se definir qual será o ponto de partida da imagem que criaremos com o nosso Dockerfile, ou seja, se eu quiser utilizar a imagem do Java para produzir meu container, basta que eu especifique para utilizar a imagem do openjdk como base. Ficaria algo como: 

    FROM openjdk 

    Mas e caso eu queira criar uma imagem do zero absoluto? Sem me basear em imagem alguma? Para isso, posso utilizar a imagem scratch. 

    FROM scratch 

    Essa imagem nada mais é do que simplesmente… nada! Com ela, consigo criar uma imagem completamente do zero, sem utilizar nada de ninguém. 

    RUN 

    A instrução RUN é bem interessante. Ela pode ser executada uma ou mais vezes e, com ela, posso definir quais serão os comandos executados na etapa de criação de camadas da imagem. Mas como assim? 

    Temos o seguinte Dockerfile: 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN apt-get install openjdk-8-jdk -y

    Quando executo o comando docker build ., além de baixar a imagem do Ubuntu 26.04 para colocar na minha imagem, o processo de criação também executará os comandos para atualizar os repositórios do Ubuntu por meio do apt-get update, e para instalar o Java 8 utilizará o apt-get install openjdk-8-jdk-y.

    Ele executará uma série de downloads, produzindo o seguinte resultado: 

    Dockerfile: instrução RUN. 

    Como resultado em minha máquina, foi gerada uma imagem com o ID 41afdc6b059f (em sua máquina será algo completamente diferente, não se assuste). 

    Se criarmos um container a partir dessa imagem, os dois comandos já terão sido executados, já que esses foram executados no momento de criação da imagem, não da criação do container. Então qualquer container criado a partir dessa imagem terá o repositório do Ubuntu na mesma versão e o Java 8 instalado! 

    Para criar um container utilizando a imagem gerada e podendo manter a execução do container, executei o comando passando o ID da imagem gerada na minha máquina através do comando docker run-it 41afdc6b059f. 

    O -it serve para rodar o container em modo interativo, ou seja, eu quero interagir com ele efetivamente. Caso não utilizasse esse parâmetro, o container subiria e cairia logo em seguida. 

    O -it serve para rodar o container em modo interativo, ou seja, eu quero interagir com ele efetivamente. 

    Lembra lá no início da explicação sobre o RUN quando falei que ele podia ser usado uma ou mais vezes? Então, isso faz uma baita diferença na hora da criação de imagens, pois, como foi dito, cada `RUN` criará uma etapa na criação da imagem. Mas, o que isso muda? 

    O grande diferencial da instrução RUN é que cada camada gerada por ele poderá ser reutilizada na criação de outras imagens. 

    Então, para testar, alterei meu Dockerfile para criar uma imagem nova com elementos em comum da outra imagem: 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN apt-get install openjdk-8-jdk -y 
    RUN touch arquivo-de-boas-vindas

    O Docker consegue reutilizar várias camadas já existentes, acelerando significativamente a criação de novas imagens. 

    Caso eu queira adicionar um comando novo qualquer, ao executar o comando docker build . para gerar essa nova imagem, vejam o resultado: 

    Caso eu queira adicionar um comando novo qualquer, ao executar o comando docker build . 

    Essas práticas com RUN Dockerfile ajudam não só a economizar tempo, mas também a criar arquivos Dockerfile mais eficientes – ponto essencial para projetos grandes ou ao usar Docker no Linux. 

    O RUN aceita parâmetros de dois jeitos: 

    RUN apt-get install openjdk-8-jdk –y ou
    RUN ["apt-get", "install" "openjdk-8-jdk" ,"-y"] 

    Isso permite passar os comandos como uma lista de argumentos, sendo executados da mesma forma. 

    CMD e ENTRYPOINT 

    A instrução CMD é semelhante à RUN, mas cada uma possui um propósito distinto. CMD define o comando padrão a ser executado quando o container inicia, enquanto RUN executa comandos durante a construção da imagem. 

    A sintaxe é a mesma, podemos passar os parâmetros do mesmo modo que a instrução RUN, alterando o último RUN por um CMD: 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN apt-get install openjdk-8-jdk -y 
    CMD touch arquivo-de-boas-vindas

    Ao construir a imagem com o Dockerfile acima, o comando especificado por CMD não será executado na etapa de build. 

    Isso aconteceu porque, na verdade, a instrução CMD executa o comando apenas quando criamos o container e não passamos nenhum parâmetro para ele, ou seja, quando executarmos o comando docker run –it nessa imagem. 

    Caso passássemos algo como docker run -it <id da imagem> /bin/bash, ele sobrescreveria o comando CMD touch arquivo-de-boas-vindas e executaria apenas o /bin/bash. 

    Um outro teste também poderia ser: 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN apt-get install openjdk-8-jdk -y 
    CMD touch arquivo-de-boas-vindas 
    CMD touch outro-arquivo

    Ao inicializar o container, vi que apenas o outro-arquivo foi criado, mas por quê? O que acontece é que podemos ter quantos CMD quisermos, mas, no fim das contas, apenas será executado o último CMD, sem nenhum erro aparente! 

    O ENTRYPOINT é semelhante ao CMD, mas seus parâmetros não são sobrescritos por argumentos passados via linha de comando ao executar docker run. 

    ADD e COPY 

    Os nomes dessas instruções são bem intuitivos. 

    O papel do ADD é fazer a cópia de um arquivo, diretório ou até mesmo fazer o download de uma URL de nossa máquina host e colocá-la dentro da imagem. 

    Eu utilizei o ADD para copiar o arquivo chamado “arquivo-host” da minha máquina para dentro da imagem, com o nome arquivo-host-transferido: 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN ["apt-get", "install", "openjdk-8-jdk" ,"-y"]

    ADD arquivo-host arquivo-host-transferido 

    Se criarmos uma imagem e rodarmos um container, teremos o seguinte resultado: 

    O arquivo está dentro do container. 

    A instrução ADD também tem alguns efeitos interessantes, como: caso o arquivo que esteja sendo passado seja um arquivo de extensão “.tar”, ele fará a descompressão automaticamente, além do fato já mencionado de poder fazer download de arquivos por URLS. 

    É sempre importante saber escolher entre COPY e ADD em seu arquivo Dockerfile, de acordo com a necessidade do seu projeto. 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN ["apt-get", "install", "openjdk-8-jdk" ,"-y"] 
    COPY arquivo-host arquivo-host-transferido

    A próxima instrução mostrará como podemos documentar de maneira sucinta o nosso Dockerfile para quem for utilizá-lo. 

    EXPOSE: para que serve esse comando Dockerfile? 

    Há uma certa dúvida quanto ao uso dessa instrução. Muitas pessoas pensam que o EXPOSE serve para definir em qual porta nossa aplicação rodará dentro do container, mas na verdade o propósito é servir apenas para documentação. 

    Essa instrução não publica a porta efetivamente, já que o propósito dela é fazer uma comunicação entre quem escreveu o Dockerfile e quem rodará o container. 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN apt-get install openjdk-8-jdk -y 
    EXPOSE 8080

    Logo, o Dockerfile acima não faz a publicação da porta, apenas serve como documentação. 

    Agora vamos entender como podemos compartilhar informações entre o nosso container e nossa máquina host. 

    VOLUME 

    Essa instrução cria uma pasta em nosso container que será compartilhada entre o container e o host, funcionando do seguinte modo: 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN apt-get install openjdk-8-jdk -y 
    VOLUME /foo

    Quando criarmos um container dessa imagem, ele criará uma pasta chamada foo: 

    Quando criarmos um container dessa imagem, ele criará uma pasta chamada foo. 

    Todo arquivo criado dentro dessa pasta será acessível a partir da máquina host no caminho /var/lib/docker/volumes! 

    Por fim, como pode ser feita a organização de trabalho do container? Será que devemos trabalhar em qualquer pasta indefinidamente? 

    WORKDIR 

    Essa instrução tem o propósito de definir o nosso ambiente de trabalho. Com ela, definimos onde as instruções CMD, RUN, ENTRYPOINT, ADD e COPY executarão suas tarefas, além de definir o diretório padrão que será aberto ao executarmos o container. 

    FROM ubuntu:18.04 
    RUN apt-get update 
    RUN ["apt-get", "install", "openjdk-8-jdk" ,"-y"] 
    WORKDIR /pasta-qualquer 
    COPY arquivo-host arquivo-host-transferido

    Ao acessarmos o container gerado por essa imagem, teremos o seguinte resultado: 

    WORKDIR: essa instrução tem o propósito de definir o nosso ambiente de trabalho. Visualização do container gerado por essa imagem 

    Ou seja, além de inicializarmos o container nessa pasta, o COPY colocou o arquivo dentro da pasta definida! 

    Resumo: como usar o Dockerfile para criar, rodar e personalizar containers no Docker 

    O processo de criação de imagens é fundamental para o aprendizado de Docker.

    Neste artigo, foram apresentadas as principais instruções do Dockerfile, como FROM para definir uma base de imagem, RUN para configurar camadas, e CMD ou ENTRYPOINT para especificar comandos de inicialização do container. 

    Além disso, as instruções ADD e COPY foram apresentadas para transferir arquivos para o container; EXPOSE para documentar portas utilizadas; VOLUME para compartilhamento entre host e container; e WORKDIR para definir o diretório de trabalho padrão. 

    Aqui na Alura, temos um curso sobre Docker! Nele você aprenderá tudo sobre o que é um container, como fazer eles se comunicarem, além de aprender como criar suas próprias imagens para personalizar seus containers. 

    Banner do Guia Tático Alura sobre carreira em tecnologia, destacando o mapa da carreira tech. A imagem convida a explorar diferentes caminhos profissionais, comparar possibilidades e encontrar a próxima fase da carreira na área de tecnologia, com chamada “Explore o mapa”.

    Avalie este artigo

    • Foto de Daniel Artine

      Autor(a)

      Daniel Artine

      Daniel é instrutor na Alura e Tech Lead na Stone Age. Possui certificação Docker e formação em Ciência da Computação pela Universidade Federal do Rio de Janeiro. Atualmente trabalha com .NET 6, AWS, Terraform, Docker e Kubernetes.

    Explore por tópico

    • Back-end
    • Dados
    • DevOps
    • Front-end
    • Gestão & Negócios
    • Institucionais
    • Inteligência Artificial
    • Mobile
    • UX & Design

    Leia também

    • 21/11/2023

      Portas lógicas: entendendo os tipos e características

      Ler mais
    • 06/02/2018

      Criando um repositório local de imagens Docker

      Ler mais
    • 13/02/2022

      O que são Blameless postmortems?

      Ler mais
    Ver mais conteúdos

    Inscreva-se em nossa Newsletter

    Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.

    Institucional

    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status
    Institucional
    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status

    A Alura

    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes
    A Alura
    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes

    Conteúdos

    • Alura Cases
    • Imersão Engenharia de Software: Dev na Era da IA
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Conteúdos
    • Alura Cases
    • Imersão Engenharia de Software: Dev na Era da IA
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Alura