From b4dde94e860f878bb259189cd645ecdbd119d188 Mon Sep 17 00:00:00 2001 From: Jack Merrill Date: Sat, 19 Aug 2023 17:39:35 -0500 Subject: [PATCH] feat: add dockerfile --- .dockerignore | 1 + Dockerfile | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..881e1a1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +##### Stage 1 ##### + +### Use golang:1.18 as base image for building the application +FROM golang:1.19 as builder + +### Create new directly and set it as working directory +RUN mkdir -p /app +WORKDIR /app + +### Copy Go application dependency files +COPY go.mod . +COPY go.sum . + +### Setting a proxy for downloading modules +ENV GOPROXY https://proxy.golang.org,direct + +### Download Go application module dependencies +RUN go mod download + +### Copy actual source code for building the application +COPY . . + +### CGO has to be disabled cross platform builds +### Otherwise the application won't be able to start +ENV CGO_ENABLED=0 + +### Build the Go app for a linux OS +### 'scratch' and 'alpine' both are Linux distributions +RUN GOOS=linux go build ./main.go + +##### Stage 2 ##### + +### Define the running image +FROM scratch + +### Alternatively to 'FROM scratch', use 'alpine': +# FROM alpine:3.13.1 + +### Set working directory +WORKDIR /app + +### Copy built binary application from 'builder' image +COPY --from=builder /app/main . + +### Copy the certs from builder +COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ + +### Run the binary application +CMD ["/app/main"]