# syntax=docker/dockerfile:1.2 # FROM golang as builder # ENV GO111MODULE on # ENV GOPROXY=https://goproxy.io # WORKDIR /src # RUN groupadd -r appuser && useradd --no-log-init -r -g appuser appuser # 通过提前运行go mod download可以使用cache编译,避免每次编译都下载,加快编译速度 # RUN --mount=type=cache,target=/go/pkg/mod/ \ # --mount=type=bind,source=/go.sum,target=/go.sum \ # --mount=type=bind,source=/go.mod,target=/go.mod \ # go mod download -x # COPY . . # RUN --mount=type=cache,target=/go/pkg/mod/ \ # GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -o /bin/cli -ldflags="-w -s" # 生成alpine部署容器 FROM scratch as client LABEL MAINTAINER='LIU Peng' WORKDIR / # COPY --from=builder /bin/cli /cli # COPY --from=builder /etc/passwd /etc/passwd # COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ # COPY --from=builder /bin/appmain /bin/appmain # USER appuser COPY ./cli /cli # 健康检测 scratch 镜像没有其它shell指令,所以无法进行健康检测 # ADD ./hc.sh /root/healthcheck.sh # HEALTHCHECK --start-period=60s --interval=15s --timeout=5s --retries=3 CMD /bin/ash /root/healthcheck.sh # 时区处理(方法一:需要提前准备下两条,scratch和alpine都可以使用) # tar cfz zoneinfo.tar.gz /usr/share/zoneinfo # cp /usr/share/zoneinfo/PRC PRC ADD PRC /etc/localtime ADD zoneinfo.tar.gz / # 设置时区为上海 #RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories #RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ # && echo "Asia/Shanghai" > /etc/timezone \ # && apk del tzdata \ # && rm -rf /var/cache/apk/* ENTRYPOINT ["/cli","-port","9000","-conf","/conf/daymele.conf"] EXPOSE 9000 # docker image prune 删除悬虚镜像 # docker run --name res -d -p 7000:7011 -v /mnt/resdata:/data dev.daymele.com:5000/res --restart always