diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b7355c7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.git +.gitignore +target +tmp +bin +dist +coverage +**/.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..06db21a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM golang:1.24 AS builder + +ARG APP_VERSION="dev" +ENV CGO_ENABLED=0 GOOS=linux GOARCH=amd64 + +WORKDIR /src +COPY . . +RUN go build -trimpath -ldflags="-s -w" -o /out/chatapp3-golang ./cmd/api + +FROM alpine:3.20 + +ARG APP_VERSION="dev" +RUN apk add --no-cache ca-certificates wget + +WORKDIR /application +COPY --from=builder /out/chatapp3-golang /application/service + +LABEL org.opencontainers.image.version="${APP_VERSION}" + +RUN chmod +x /application/service + +ENTRYPOINT ["/application/service"] diff --git a/ci/build-image.sh b/ci/build-image.sh new file mode 100755 index 0000000..b5a8d82 --- /dev/null +++ b/ci/build-image.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +IMAGE_REF="${1:-}" +APP_VERSION="${APP_VERSION:-${2:-dev}}" +DOCKER_PLATFORM="${DOCKER_PLATFORM:-linux/amd64}" + +if [ -z "${IMAGE_REF}" ]; then + echo "usage: ci/build-image.sh [app-version]" >&2 + exit 1 +fi + +cd "${ROOT_DIR}" +docker build --platform "${DOCKER_PLATFORM}" --build-arg "APP_VERSION=${APP_VERSION}" -t "${IMAGE_REF}" .