精简你的 docker 映像

好风 发表于 2017-07-08T13:18:59.789666Z
引用地址:https://plus.ooclab.com/note/article/1371

普通的 docker image 动辄600M以上,我们需要更小的 image 。

语言相关

Golang

默认 golang 编译,依赖一些动态库:

$ go build main.go 
$ ldd main
        linux-vdso.so.1 =>  (0x00007ffd527af000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f318d5b9000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f318d1ef000)
        /lib64/ld-linux-x86-64.so.2 (0x0000556160b83000)

首先将 golang 程序编译为静态(无动态链接库):

$ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
$ ldd main
        not a dynamic executable

创建 Dockerfile.scratch :

FROM scratch
ADD main /
CMD ["/main"]

编译后查看 image 大小:

$ docker build -t micro-main -f Dockerfile.scratch .
$ docker images micro-main
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
micro-main           latest              25716f699729        1 hours ago         7.83MB