Muita gente confunde esses dois conceitos no começo, mas eles são coisas diferentes.
A ideia mais simples de entender
Pensa assim:
- Imagem é o molde pronto
- Contêiner é esse molde em execução
O que é uma imagem?
A imagem Docker é o resultado do docker build.
Ela já vem com tudo empacotado:
- Python
- bibliotecas
- teu código
- configurações
Mas ela, sozinha, não executa nada.
É como se fosse um sistema já preparado para rodar, mas ainda parado.
O que é um contêiner?
O contêiner é a imagem rodando de verdade.
Quando tu executa:
docker compose up
o Docker pega a imagem e cria uma instância ativa dela.
Aí sim a aplicação fica viva:
- Uvicorn sobe
- a porta 8000 começa a escutar
- as requisições passam a ser processadas
Uma analogia boa: classe e objeto
Se tu vem de programação, essa comparação ajuda muito:
- Imagem = classe
- Contêiner = objeto
Ou seja, a imagem é o molde, e o contêiner é a instância criada a partir dele.
E assim como uma classe pode gerar vários objetos, uma imagem também pode gerar vários contêineres.
Como ver isso no terminal
Tu consegue observar essa diferença com dois comandos:
docker images
docker ps -a
O que cada um mostra?
-
docker imagesmostra as imagens salvas no disco -
docker ps -amostra os contêineres criados
Um exemplo prático
No teu caso, aconteceu algo assim:
-
docker imagesmostrou 1 imagem -
docker ps -amostrou 0 contêineres
Isso significa que o molde ainda existe, mas nenhuma instância está rodando no momento.
Provavelmente porque tu executou:
docker compose down
Então por que o próximo build fica mais rápido?
Porque a imagem continua salva no disco mesmo sem nenhum contêiner rodando.
Por isso o Docker pode reaproveitar camadas já existentes, em vez de baixar e reconstruir tudo do zero.
Resumindo
Imagem Docker
É o pacote pronto, criado no build.
Contêiner Docker
É esse pacote em execução.
Conclusão
No fim, a diferença é essa:
imagem é o pacote; contêiner é o processo rodando.
Quando tu entende isso, várias coisas no Docker começam a fazer muito mais sentido.
Top comments (0)