Falta pouco!

0 dias

0 horas

0 min

0 seg

Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Dockerfile e Imagens

Essa aula está um pouco confusa, não entendi quase nada.

  • O que é um Dockerfile?
  • Para que serve o Dockerfile?
  • Qual a sintaxe interna do Dockerfile? É uma sintaxe própria que precisa ser estudada na documentação do Docker?
  • Como funciona o comando docker build?
  • Não entendo de node, mas entendo de laravel. Como faço para criar uma imagem de um projeto laravel que tenho aqui e fazê-lo executar em um container?
  • Quais informações sempre existirão dentro de um arquivo Dockerfile, independente do projeto?
  • Um arquivo Dockerfile sempre precisará baixar outras imagens de terceiros do hub?
4 respostas

Oii, Bruno.

Vamos lá para as suas dúvidas:

O que é um Dockerfile?

Um Dockerfile é um arquivo de texto que contém instruções que o Docker usa para construir uma imagem.
Ele funciona como uma “receita”: cada linha do arquivo descreve um passo para criar a imagem final (como escolher a base, copiar arquivos, instalar pacotes, configurar o diretório de trabalho, definir variáveis de ambiente, etc.).

Pra que serve o Dockerfile?

Ele serve para automatizar a criação de imagens.
Ao invés de você instalar manualmente dependências toda vez, o Dockerfile registra esse passo a passo. Assim, qualquer pessoa (ou pipeline de CI/CD) pode rodar docker build e gerar a imagem do mesmo jeito.

A sintaxe do Dockerfile:

  • Sim, existe uma sintaxe própria, simples, que está documentada na documentação oficial do Docker.

  • Alguns comandos básicos que você já viu:

    • FROM define a imagem base (ex.: FROM ubuntu:20.04)
    • WORKDIR define o diretório de trabalho no container
    • COPY ou ADD copia arquivos do host para dentro da imagem
    • RUN executa comandos durante a construção da imagem
    • ENTRYPOINT ou CMD define o processo que será executado quando o container rodar

Como funciona o docker build?

O comando docker build -t nome-da-imagem:tag .:

  1. Lê o Dockerfile que está no diretório atual (.).
  2. Executa as instruções passo a passo (como se fosse um script).
  3. Cria uma imagem nova, que depois pode ser usada com docker run.

Exemplo simplificado:

docker build -t meuapp:1.0 .

Vai gerar a imagem meuapp na versão 1.0.

Quais informações sempre existirão em um Dockerfile?

Depende do projeto, mas normalmente sempre terá:

  • FROM imagem base;
  • WORKDIR diretório de trabalho;
  • COPY / ADD copiar os arquivos do projeto;
  • RUN instalar dependências;
  • CMD ou ENTRYPOINT comando que mantém o container em execução.

Preciso sempre baixar imagens de terceiros do Docker Hub?

Não necessariamente.
Você pode:

  • Criar uma imagem do zero (muito trabalhoso, usando FROM scratch).
  • Ou usar uma imagem oficial já pronta (ex.: FROM node:14, FROM php:8.1, FROM ubuntu:20.04).

Na prática, quase sempre você reaproveita imagens oficiais (porque são otimizadas e já vêm com pacotes configurados).

E aqui tem um tutorial de Como criar uma imagem Docker do Laravel, é trabalhoso mas com paciência e cuidado é possível fazer.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Muito obrigado pelas explicações. Entendi tudo.

Só uma última dúvida: O arquivo Dockerfile deve ficar na mesma pasta do projeto que será posto em um container ou deve ficar em outra pasta separada? Como fica o WORKDIR nesses dois casos?

solução!

Oi, Bruno!

O Dockerfile normalmente fica na raiz do projeto, junto com o código que você quer empacotar. Assim, ao rodar docker build, o Docker consegue usar os arquivos do projeto como contexto sem precisar de configurações extras.

Se o Dockerfile estiver em outra pasta, você pode usar o parâmetro -f para indicar o caminho, mas o mais prático é deixá-lo na raiz. O WORKDIR sempre define o diretório dentro do container, não importa onde o Dockerfile esteja na sua máquina.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Entendido. Muito obrigado.