Eu tenho uma duvida, se eu usar um Dockerfile otimizado para a produção, eu não teria problemas se caso o código precisasse ser alterado, já que eu precisaria ficar "buildando" o container toda vez que uma alteração for feita ?
Eu tenho uma duvida, se eu usar um Dockerfile otimizado para a produção, eu não teria problemas se caso o código precisasse ser alterado, já que eu precisaria ficar "buildando" o container toda vez que uma alteração for feita ?
Olá, Leonardo. Tudo bem?
Realmente, usar uma imagem de produção pode ser um pouco mais trabalhoso quando você precisa fazer alterações frequentes no código, já que cada mudança exigiria um novo build da imagem.
No entanto, uma prática comum para contornar isso é utilizar dois Dockerfiles distintos: um para desenvolvimento e outro para produção. O Dockerfile de desenvolvimento pode ser menos otimizado, permitindo que você monte volumes para o código-fonte, o que evita a necessidade de rebuildar a imagem a cada alteração. Dessa forma, você pode editar o código diretamente no seu ambiente local, e as mudanças serão refletidas instantaneamente no contêiner em execução.
Por exemplo, no Dockerfile de desenvolvimento, você pode adicionar:
FROM golang:1.22-alpine
WORKDIR /app
# Copie apenas os arquivos necessários para o desenvolvimento
COPY . .
# Comando para iniciar a aplicação
CMD ["go", "run", "main.go"]
E no docker-compose.yml
, você pode montar o volume:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- .:/app
ports:
- "8080:8080"
Com essa configuração, você pode desenvolver tranquilamente, enquanto mantém o Dockerfile de produção otimizado para quando for necessário fazer o deploy.
Espero ter ajudado e bons estudos!