1、Dockerfile文件:

# 构建阶段
FROM golang:1.24rc1-alpine3.20 as builder

# 设置环境变量
ARG TARGETPLATFORM=linux/amd64
ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin"

# 安装必要的依赖和 Go 工具链
RUN apk add --no-cache tzdata ca-certificates curl git go

# 拷贝源文件
COPY Caddyfile /etc/naiveproxy/Caddyfile
COPY config.json /etc/naiveproxy/config.json
COPY xcaddy /usr/local/bin/xcaddy

# 编译 Caddy 和安装 naiveproxy 插件
RUN xcaddy build v2.8.4 \
     --with github.com/caddy-dns/cloudflare \
     --with github.com/mholt/caddy-l4 \
     --with github.com/mholt/caddy-webdav \
     --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive


# 运行阶段
FROM alpine:3.21.0

# 拷贝编译后的 Caddy 可执行文件
COPY --from=builder /go/caddy /usr/bin/caddy
COPY --from=builder /usr/local/bin/xcaddy /usr/local/bin/xcaddy

# 拷贝配置文件
COPY Caddyfile /etc/naiveproxy/Caddyfile
COPY config.json /etc/naiveproxy/config.json

# 设置工作目录
WORKDIR /root

# 设置挂载点(如果需要)
VOLUME ["/etc/naiveproxy"]

# 设置默认的启动命令
CMD ["/bin/sh", "-c", "/usr/bin/caddy run --config /etc/naiveproxy/Caddyfile"]

2、封装镜像、达标签、推送到docker hub仓库:

2.1、使用Dockerfile文件封装镜像:

docker build -f Dockerfile -t naiveproxy:v3 .
docker build -f Dockerfile所在目录 -t 镜像名[naiveproxy]:镜像版本[v3] .   # . 是当前目录的意思

2.2、打标签:

docker tag naiveproxy:v3 top/naiveproxy:v3
dokcer tag 刚才构建的镜像名[naiveproxy]:刚才构建的镜像版本[v3] dockerhub仓库地址[top/naiveproxy]:dockerhub仓库版本[v3]

2.3、推送镜像到 docker hub仓库:

docker tag naiveproxy:v3 top/naiveproxy:v3
dokcer tag 刚才构建的镜像名[naiveproxy]:刚才构建的镜像版本[v3] dockerhub仓库地址[top/naiveproxy]:dockerhub仓库版本[v3]