> 技术文档 > go-admin 构建arm镜像

go-admin 构建arm镜像

目录

1、 go-admin Dockerfile

2、docker build go-admin

3、settings.yml

4、go-admin-ui Dockerfile

5、docker build go-admin-ui

6、go-admin.yaml

7、go-admin-ui.yaml


1、 go-admin Dockerfile

# 构建阶段:使用 Go 1.24 版本(支持远程调试)
FROM golang:1.24-alpine AS builder

# 配置环境变量(ENV 内部不允许插入注释行,注释需放在 ENV 外部)
# 启用调试符号(保留调试信息):CGO_CFLAGS=\"-g -O0\"、GOFLAGS=\"-gcflags=all=-N -l\"
ENV GOPROXY=https://goproxy.cn/,direct \\
GO111MODULE=on \\
CGO_ENABLED=1 \\
GOOS=linux \\
GOARCH=arm64 \\
CGO_CFLAGS=\"-g -O0\" \\
GOFLAGS=\"-gcflags=all=-N -l\"

# 安装编译工具和调试依赖
RUN apk add --no-cache git make gcc g++ musl-dev

# 克隆代码并编译(保留调试符号)
RUN git clone https://github.com/go-admin-team/go-admin.git /app && \\
cd /app && \\
go mod tidy && \\
go build -gcflags=\"all=-N -l\" -o go-admin

# 运行阶段:使用轻量 Alpine 镜像
FROM alpine:latest

# 配置时区
ENV TZ=Asia/Shanghai

# 安装运行依赖和调试工具
RUN apk add --no-cache ca-certificates tzdata libc6-compat && \\
apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community delve

# 创建日志目录和配置目录
RUN mkdir -p /app/config /app/temp/logs && \\
chmod -R 777 /app/temp/logs

# 复制编译产物和配置文件
COPY --from=builder /app/go-admin /app/
COPY --from=builder /app/config/settings.yml /app/config/settings.yml
COPY settings.yml /app/config/settings.yml

# 暴露应用端口和调试端口
EXPOSE 8000
EXPOSE 2345

# 工作目录
WORKDIR /app

# 启动命令(远程调试)
CMD [\"/bin/sh\", \"-c\", \"dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./go-admin -- server -c config/settings.yml -a true\"]

或者

# 构建阶段:使用 Go 1.24 版本
FROM golang:1.24-alpine AS builder

# 配置环境变量
ENV GOPROXY=https://goproxy.cn/,direct \\
GO111MODULE=on \\
CGO_ENABLED=1 \\
GOOS=linux \\
GOARCH=arm64 \\
CGO_CFLAGS=\"-g -O0\" \\
GOFLAGS=\"-gcflags=all=-N\"

# 安装编译工具和依赖
RUN apk add --no-cache git make gcc g++ musl-dev unzip

# 创建应用目录
RUN mkdir -p /app /tmp/build

# 复制本地文件(优先使用本地zip包)
COPY go-admin.zip* /tmp/build/
COPY settings.yml* /tmp/build/

# 处理源码:优先使用本地zip,否则从git拉取
RUN if [ -f \"/tmp/build/go-admin.zip\" ]; then \\
unzip /tmp/build/go-admin.zip -d /app && \\
# 处理压缩包内可能的目录结构差异
if [ -d \"/app/go-admin\" ] || [ -d \"/app/go-admin-master\" ]; then \\
SRC_DIR=\"/app/go-admin\" && \\
if [ -d \"/app/go-admin-master\" ]; then SRC_DIR=\"/app/go-admin-master\"; fi && \\
find $SRC_DIR -maxdepth 1 -exec mv {} /app \\; && \\
rm -rf $SRC_DIR; \\
fi; \\
else \\
git clone https://github.com/go-admin-team/go-admin.git /app; \\
fi && \\
cd /app && \\
go mod tidy && \\
go build -gcflags=\"all=-N\" -o go-admin

# 运行阶段:使用轻量Alpine镜像
FROM alpine:latest

# 配置环境变量
ENV TZ=Asia/Shanghai \\
APP_PORT=8000 \\
LOG_PATH=/app/temp/logs \\
# 新增调试开关(true=启用dlv调试,false=正常启动)
ENABLE_DEBUG=false

# 安装运行依赖
RUN apk add --no-cache ca-certificates tzdata libc6-compat gcompat &