 485320737b
			
		
	
	
		485320737b
		
	
	
	
	
		
			
			- Convert from Python 3.10 Flask app to Go 1.21 Alpine build - Add multi-stage Docker build for optimized production image - Create non-root user for security - Update health check for new port 8080 - Add comprehensive .dockerignore for Go project
		
			
				
	
	
		
			52 lines
		
	
	
		
			No EOL
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			No EOL
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
| # Build stage
 | |
| FROM golang:1.21-alpine AS builder
 | |
| 
 | |
| # Set working directory
 | |
| WORKDIR /app
 | |
| 
 | |
| # Install git (needed for some Go modules)
 | |
| RUN apk add --no-cache git
 | |
| 
 | |
| # Copy go mod files
 | |
| COPY go.mod go.sum ./
 | |
| 
 | |
| # Download dependencies
 | |
| RUN go mod download
 | |
| 
 | |
| # Copy source code
 | |
| COPY . .
 | |
| 
 | |
| # Build the application
 | |
| RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o rideaware-api .
 | |
| 
 | |
| # Production stage
 | |
| FROM alpine:latest
 | |
| 
 | |
| # Install ca-certificates for HTTPS requests and timezone data
 | |
| RUN apk --no-cache add ca-certificates tzdata
 | |
| 
 | |
| # Create non-root user
 | |
| RUN addgroup -g 1001 -S appgroup && \
 | |
|     adduser -u 1001 -S appuser -G appgroup
 | |
| 
 | |
| # Set working directory
 | |
| WORKDIR /home/appuser
 | |
| 
 | |
| # Copy binary from builder stage
 | |
| COPY --from=builder /app/rideaware-api .
 | |
| 
 | |
| # Change ownership to non-root user
 | |
| RUN chown -R appuser:appgroup /home/appuser
 | |
| 
 | |
| # Switch to non-root user
 | |
| USER appuser
 | |
| 
 | |
| # Expose port
 | |
| EXPOSE 8080
 | |
| 
 | |
| # Health check
 | |
| HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
 | |
|     CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1
 | |
| 
 | |
| # Run the application
 | |
| CMD ["./rideaware-api"] |