#版本一: #FROM golang:alpine # #WORKDIR /build # #COPY hello.go . # #RUN go build -o hello hello.go # #CMD ["./hello"] #版本二: #FROM alpine # #WORKDIR /build # #COPY hello . # #CMD ["./hello"] ##版本三 第一个 FROM 开始的部分是构建一个 builder 镜像,目的是在其中编译出可执行文件 hello,第二个 From 开始的部分是从第一个镜像里 copy 出来可执行文件 hello,并且用尽可能小的基础镜像 FROM golang:alpine AS builder WORKDIR /build ADD go.mod . COPY . . RUN go build -o hello hello.go FROM alpine WORKDIR /build COPY --from=builder /build/hello /build/hello CMD ["./hello"]
版本四:
#源镜像
FROM golang:alpine As builder
## 设置环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY="https://goproxy.cn,direct"
#作者
LABEL MAINTAINER="denggx@126.com"
#设置工作目录
WORKDIR /opt/goinproject
#将服务器的go工程代码加入到docker容器中
# 将代码复制到容器中
COPY . .
# 将我们的代码编译成二进制可执行文件 可执行文件名为 app
RUN go mod tidy
RUN go build -o app .
# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist
# 将二进制文件从 /home/www/goWebBlog 目录复制到这里
COPY --from=builder /opt/goinproject/app ./
# 在容器目录 /dist 创建一个目录 为src
#RUN mkdir src .
# 在容器目录 把宿主机的静态资源文件 拷贝到 容器/dist/src目录下
# 这个步骤可以略 因为项目是引用到了 外部静态资源
#RUN cp -r /home/www/goWebBlog/src/static ./src/
# 声明服务端口
EXPOSE 8085
# 启动容器时运行的命令
CMD ["/dist/app"]
先打包编译 go build -o app .
构建镜像
docker build -t goinproject:v1 .
参考文章