# 多重构建,减少镜像大小 # 构建:使用golang:1.15版本 FROM golang:1.18 as build # 容器环境变量添加,会覆盖默认的变量值 ENV GO111MODULE=on ENV GOPROXY=https://goproxy.cn,direct ENV TZ="Asia/Shanghai" # 设置工作区 WORKDIR /go/release # 把全部文件添加到/go/release目录 ADD . . # 编译:把main.go编译成可执行的二进制文件,命名为zyos RUN GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -tags netgo -ldflags="-s -w" -installsuffix cgo -o zyos main.go FROM ubuntu:xenial as prod LABEL maintainer="wuhanqin" ENV TZ="Asia/Shanghai" COPY static/html static/html COPY static/template static/template # 时区纠正 RUN rm -f /etc/localtime \ && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone # 优化内核参数 #RUN sysctl -w net.ipv4.tcp_fin_timeout=15 #RUN sysctl -w net.ipv4.tcp_tw_recycle=1 #RUN sysctl -w net.ipv4.ip_local_port_range=1024 65535 #RUN sysctl -p # 在build阶段复制可执行的go二进制文件app COPY --from=build /go/release/zyos ./zyos COPY --from=build /go/release/etc/cfg.yml /var/zyos/cfg.yml # 启动服务 #CMD ["./zyos","-c","/var/zyos/cfg.yml"] CMD ["bash","-c","sysctl -w net.ipv4.ip_local_port_range='1024 65535' && sysctl -p && ./zyos -c /var/zyos/cfg.yml"]