slimage:为 Go 语言应用创建最小化的 Docker 镜像
<h2><strong>slimage</strong></h2> <p>为 Go 语言应用创建最小化的 Docker 镜像。</p> <h2><strong>背景</strong></h2> <p>Docker 已经使得发布应用到服务器的流程简单了很多。</p> <p>在我们创建 Docker 镜像的过程中,最直接的方法是从包含 Go 的镜像开始,把源码 ADD 到里面,编译,生成镜像,但是这个过程中有两个问题:</p> <ul> <li>镜像通常会比较大,~500MB;</li> <li>连同源码也一起打包到镜像内部。</li> </ul> <p>网上有很多文章提到的了如何为 Go 应用建立一个非常紧凑的 Docker 镜像。受到 Nick Gauthier 和 Adriaan 的想法的启发,我们开发了 slimage,一个命令行工具,使得这个过程更加简单易用。使用 slimage,我们支持编译带或不带 Cgo 支持的 Go 应用,最终的镜像大小为 ~25MB (包含一些命令行调试工具)。</p> <p>slimage 是一个 Bash 应用。我们同时还提供一个 windows cmd 的版本。</p> <h2><strong>用法</strong></h2> <p>linux/mingw 或者 mac上:</p> <pre> <code class="language-dockerfile">$ git clone https://github.com/hesion3d/slimage.git $ cd slimage slimage$ export GOPATH=`pwd`/demo slimage$ ./run.sh -f demo-config.sh -l min -n hello-slimage Prepare for building... Building src... Analyzing ELF files... Building... Sending build context to Docker daemon 8.127 MB Step 1 : FROM scratch ---> Step 2 : COPY . / ---> Using cache ---> 8c143d09beb3 Step 3 : ENTRYPOINT /opt/bin/hello-slimage --server_ip=0.0.0.0 ---> Using cache ---> 422adde5b9af Successfully built 422adde5b9af slimage$ docker run --rm -p 8080:80 hello-slimage</code></pre> <p>windows上:</p> <pre> <code class="language-dockerfile">run.bat -f demo-config.sh -l min -n hello-slimage</code></pre> <h2><strong>大致原理</strong></h2> <p>网上很多文章提到在 Docker 容器中使用 Docker 生成镜像,我们没有这么做。slimage 在 Docker 容器中编译 Go 源码。然后:</p> <ol> <li>找到要打包的可执行文件 (ELF 格式) 的依赖关系</li> <li>整理好完整的 linux 路径,将所有需要的文件,包括被依赖的库放到对应目录</li> <li>把该目录从容器中拷贝出来</li> <li>在容器外把刚刚整理好的文件树生成 Docker 镜像</li> </ol> <h2><strong>参考</strong></h2> <ol> <li><a href="/misc/goto?guid=4959725778424682471" rel="nofollow,noindex">Building Minimum Docker Containers for Go Applications</a> .</li> <li><a href="/misc/goto?guid=4959725778506476145" rel="nofollow,noindex">Create the Smallest Possible Docker Container</a> .</li> </ol> <p> </p> <p>来自:https://github.com/hesion3d/slimage/blob/master/README.zh_CN.md</p> <p> </p>
本文由用户 BarP81 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!