-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
47 lines (35 loc) · 1.69 KB
/
Dockerfile
File metadata and controls
47 lines (35 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# --- Estágio de Build ---
# Use uma imagem do Go baseada em Alpine. A versão pode ser ajustada.
FROM golang:1.24-alpine AS builder
# Instale as ferramentas de compilação C (gcc, etc.)
# 'build-base' é um meta-pacote que inclui o necessário em Alpine.
RUN apk add --no-cache build-base gcc
# Defina o diretório de trabalho dentro do container
WORKDIR /app
# Copie os arquivos de gerenciamento de dependências primeiro para aproveitar o cache do Docker
COPY go.mod go.sum ./
# Baixe as dependências
RUN go mod download
# Copie o restante do código-fonte da sua aplicação
COPY . .
# Compile a aplicação com CGO habilitado.
# -a: Força a reconstrução de pacotes que estão desatualizados.
# -installsuffix cgo: Evita conflitos entre pacotes CGO e não-CGO.
# O resultado é um binário estaticamente vinculado, que não precisa da libsqlite3.so na imagem final.
RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -o /app/main .
# --- Estágio Final ---
# Define a imagem final, que será muito menor.
# A imagem 'alpine' é uma distribuição Linux mínima, ideal para produção.
FROM alpine:latest
# Define o diretório de trabalho na imagem final.
WORKDIR /app
# Copia o binário compilado do estágio 'builder' para a imagem final.
COPY --from=builder /app/main .
# Copia o banco de dados inicial, se necessário.
# Como o banco de dados 'greetings.db' é criado na primeira execução, não precisamos copiá-lo.
# A aplicação irá criá-lo quando o contêiner iniciar.
# Expõe a porta que a aplicação usa, conforme definido no main.go.
EXPOSE 8080
# Define o comando que será executado quando o contêiner for iniciado.
# Este é o ponto de entrada da nossa aplicação.
CMD ["./main"]