内容简介:我写好了一个基于gin的web程序,另外还有一些依赖。我费了千辛万苦才把依赖下载下来,我不想在docker镜像里面在下载一次依赖,如何能够快速的给我构建一个镜像。这个没问题,但是存在一个问题,该镜像太大了,300M。 我本身的程序打包完了才14M。能不能让我的镜像小一点?
问题
我写好了一个基于gin的web程序,另外还有一些依赖。我费了千辛万苦才把依赖下载下来,我不想在 docker 镜像里面在下载一次依赖,如何能够快速的给我构建一个镜像。
有问题的解决方法
golang
作为编译型语言,运行的是编译完成的二进制可执行文件,该文件是与运行系统有关的。我的开发系统是ubuntu1604。所以我的解决思路是如下
ubuntu:16.04
这个没问题,但是存在一个问题,该镜像太大了,300M。 我本身的程序打包完了才14M。能不能让我的镜像小一点?
于是我把 FROM ubuntu:16.04
改成 FROM amd64/alpine
结果发现报了执行错误
panic: standard_init_linux.go:175: exec user process caused "no such file or directory``
大概的原因就是我编译出问题,我可不想慢慢去找可是的apline的操作系统镜像。
完善的解决方法
利用 golang
镜像
原理是将你的环境通过挂载到 golang
镜像中去,例如我使用的 golang
版本为 1.9
cd ~/go/src/your_app_path docker run --rm -it -v "$GOPATH":/gopath -v "$(pwd)":/app -e "GOPATH=/gopath" -w /app golang:1.9 sh -c 'CGO_ENABLED=0 go build -a --installsuffix cgo --ldflags="-s" -o your_app_bin_name'
这个时候你的 ~/go/src/your_app_path
路径就有一个 your_app_bin_name
基于 iron/base
镜像
FROM iron/base WORKDIR /app COPY your_app_bin_name/app/ ENTRYPOINT ["./your_app_bin_name"]
这样我打包出来的镜像才 5M
加上我二进制文件的大小,只有 19M
。
优缺点
- 优点是:镜像非常小,Dockerfile简单。
- 缺点是:出了问题,只能看日志。无法容器内,重新编译或者调试。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Docker部署Golang程序方法
- 三周学会小程序(三):服务端搭建和免费部署
- golang编译程序在linux上的部署
- 将我的java程序组件部署到maven中央仓库
- [译] 教学:如何使用实际按钮将应用程序部署到生产环境
- AWS Amplify Console:赋予应用程序快速部署的能力
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ASP.NET 4 in C# and Vb
Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99
This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!