美文网首页
dockerfile多阶段构建例子

dockerfile多阶段构建例子

作者: 小黑佬 | 来源:发表于2020-07-08 15:47 被阅读0次
    #编译环境,生成二进制文件
    FROM golang:1.14.2-alpine3.11 as builder
    MAINTAINER xtaci <daniel820313@gmail.com>
    ENV GO111MODULE=on
    RUN apk update && \
        apk upgrade && \
        apk add git gcc libc-dev linux-headers
    RUN go get -ldflags "-X main.VERSION=$(date -u +%Y%m%d) -s -w" github.com/xtaci/kcptun/client && go get -ldflags "-X main.VERSION=$(date -u +%Y%m%d) -s -w" github.com/xtaci/kcptun/server
    
    #只拷贝所需要的二进制文件
    FROM alpine:3.11
    RUN apk add --no-cache iptables
    COPY --from=builder /go/bin /bin
    EXPOSE 29900/udp
    EXPOSE 12948
    

    这个例子,是以golang 1.14 进行打包的,其实主要命令就是go get 会生成文件到GOPATH="/home/chunk/go",比如以上dockerfile的go get会生成两个文件到GOPATH的bin

    ls /home/chunk/go/bin/
    client  server
    

    多阶段构建的目的只要就是缩小docker容器的体积,最终打出来的镜像以FROM alpine:3.11为准,关键在于
    COPY --from=builder /go/bin /bin, 只拷贝了/go/bin 整个目录到/bin,即系client和server这个两个二进制文件,从而避免把git gcc libc-dev linux-headers这些包也打入镜像,从而达到最小镜像。

    如何运行这个镜像

    docker run -d -p 1505:1505 -p 29900:29900 xtaci/kcptun client -r xxx.xxx.xxx.xxx:29900 -l :1505 -key test -mtu 1400 -mode fast3
    

    相关文章

      网友评论

          本文标题:dockerfile多阶段构建例子

          本文链接:https://www.haomeiwen.com/subject/lteccktx.html