最近 忙着将以前的系统再迭代一下,之不是用go mod 来做的,这次准备把系统改成go module的样子,以间把整个文件拷贝到镜像里面执行,所以整个文件很大,一般都有一个G,感觉不是很理理,最后决定用二次镜像的原理来搞一下,直接上代码了
#使用最新的golang 镜像 FROM golang:1.15.0-alpine3.12 as builder LABEL maintainer="zchd.ltd@gmail.com" #更新Alpine的软件源为国内源,提高下载速度 RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories #因为 scratch 不带SSL 证书存储,所以要安装更新 RUN apk update && apk add --no-cache git ca-certificates && update-ca-certificates && apk add --no-cache tzdata # Create 运行的帐号 ENV USER=appuser ENV UID=10001 RUN adduser --disabled-password --gecos "" --home "/nonexistent" --shell "/sbin/nologin" --no-create-home --uid "${UID}" "${USER}" # 确定工作环境 WORKDIR /app #将代码 拷贝进容器 ADD . /app #进行golang环境的设置,开启go mod 并设置镜像 RUN go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.io,direct # 编译 镜像 RUN CGO_ENABLED=0 GOOS=linux go build -o app # 使用最小的开始 制作镜像 FROM scratch as final # 从编译中导入镜像Import from builder. #导入时区 COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo #导入ssl 证书 COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ #导入帐号 COPY --from=builder /etc/passwd /etc/passwd COPY --from=builder /etc/group /etc/group #导入golang编充好的 COPY --from=builder /app/app . ADD app / CMD ["/app"]
这样整个docker 环境就制作好了
大概弄后面的镜像是44.6M,感觉还不错,必竟最开始都是1G左右
最后,把部署的也加上
#!/usr/bin/env bash git pull origin master docker build -t yxt-platform . docker stop yxt-platform-test docker rm yxt-platform-test docker run -d --name yxt-platform-test -p 1323:1323 -v $(pwd)/conf/conf-docker.toml:/conf/conf.toml -v $(pwd)/static:/static -v $(pwd)/cert:/cert --link mysql:192.168.2.3 --link redis:redis yxt-platform
这样就可以很愉快的玩耍啦!!!!
后面参考 了一下
FROM golang:1.14-alpine as builder WORKDIR /usr/src/app ENV GOPROXY=https://goproxy.cn RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --no-cache upx ca-certificates tzdata COPY ./go.mod ./ COPY ./go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 go build -ldflags "-s -w" -o server && upx --best server -o _upx_server && mv -f _upx_server server FROM scratch as runner COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /etc/localtime COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=builder /usr/src/app/server /opt/app/ CMD ["/opt/app/server"]
参考了一下