dockerfile多阶段构建例子

小黑佬 · · 578 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

#编译环境,生成二进制文件
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多阶段构建例子

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

578 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传