51 lines
1.4 KiB
Docker
51 lines
1.4 KiB
Docker
# Use Go 1.22 Alpine as the base image for building the application
|
|
FROM golang:1.22-alpine AS builder
|
|
|
|
# Install git for repository access
|
|
RUN apk add --no-cache git ca-certificates
|
|
|
|
# Define the base directory for the application as an environment variable
|
|
ENV CHAT_DIR=/openim-chat
|
|
|
|
# Set the working directory inside the container based on the environment variable
|
|
WORKDIR $CHAT_DIR
|
|
|
|
# Build arguments to invalidate cache when code changes
|
|
ARG BUILD_SHA
|
|
ARG BUILD_TIME
|
|
ENV BUILD_SHA=$BUILD_SHA
|
|
ENV BUILD_TIME=$BUILD_TIME
|
|
|
|
# Copy protocol directory
|
|
COPY protocol /protocol
|
|
|
|
# Copy go mod files first for better caching
|
|
COPY go.mod go.sum ./
|
|
|
|
# Download dependencies (this layer will be cached if go.mod/go.sum don't change)
|
|
RUN go mod download
|
|
|
|
# Copy current directory (this will invalidate cache when code changes)
|
|
COPY . .
|
|
|
|
# Use container's existing SSH configuration for private repositories
|
|
RUN go mod tidy
|
|
RUN go build -o _output/chat-api ./cmd/api/chat-api
|
|
|
|
# Using Alpine Linux for the final image
|
|
FROM alpine:latest
|
|
|
|
# Install necessary packages, such as bash
|
|
RUN apk add --no-cache bash
|
|
|
|
# Set the environment and work directory
|
|
ENV CHAT_DIR=/openim-chat
|
|
WORKDIR $CHAT_DIR
|
|
|
|
|
|
# Copy the compiled binaries and mage from the builder image to the final image
|
|
COPY --from=builder $CHAT_DIR/_output $CHAT_DIR/_output
|
|
COPY --from=builder $CHAT_DIR/config $CHAT_DIR/config
|
|
|
|
# Set the command to run when the container starts
|
|
ENTRYPOINT ["sh", "-c", "_output/chat-api"] |