内容简介:网上关于Docker的介绍有很多,我就不复制粘贴了,大家可以自行查找。为什么用Docker?,一般来说是为了保证开发和线上环境一致,并能保证机器的干净,不会被安装一堆依赖。说下题外话,之前开发EOS的时候,就被装了一堆依赖和动态库,差点让强迫症的我想重装电脑...后来写了个docker镜像才算是整理干净,可惜被改过的文件是没办法还原了。官方建议是用alpine镜像,在实际使用过程中,发现还是会缺一些东西,下面是补充之后的新镜像打包出这个镜像并命名go-alpine:
关于Docker
网上关于 Docker 的介绍有很多,我就不复制粘贴了,大家可以自行查找。为什么用Docker?,一般来说是为了保证开发和线上环境一致,并能保证机器的干净,不会被安装一堆依赖。说下题外话,之前开发EOS的时候,就被装了一堆依赖和动态库,差点让强迫症的我想重装电脑...后来写了个docker镜像才算是整理干净,可惜被改过的文件是没办法还原了。
Build一个最小的 Go 应用镜像
官方建议是用alpine镜像,在实际使用过程中,发现还是会缺一些东西,下面是补充之后的新镜像
FROM alpine:latest # 官方推荐镜像大小才5M
RUN apk update \
&& apk upgrade \ # 更新源和应用
&& apk --no-cache add tzdata \ # 只要go里面用到time的包,那就必装
&& apk --no-cache add openssl \ # 如果用到rsa加密解密,也需要装
&& apk --no-cache add ca-certificates \ # ca证书,这个也是必装的
&& rm -rf /var/cache/apk/ \ # 清除安装包
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone # 这个是设置默认时区
WORKDIR /mnt/work # 最后设定一个工作目录,这个可以自己定
打包出这个镜像并命名go-alpine:
$ docker build -t go-alpine .
上面的镜像build完才9M左右,我没有把go编译好的服务加进去,这是有原因的,下面会讲到。
Before Docker Run
在实际开发过程中,我们会经常编译go的服务然后运行,难道每次编译都要重新Build一个镜像?当然不,下面是启动前的准备:
$ mkdir -p /mnt/work/service
$ docker volume create --driver local \
--opt type=none \
--opt device=/mnt/work/service \
--opt o=bind \
--name=service-data-volume
创建了一个放服务的目录并为它创建一个volume
Docker Run
把编译出来的go服务放入volume里面,然后让docker启动的时候加载这个volume,并运行目录内的服务:
$ docker run -d -v service-data-volume:/mnt/work \
--name local_service \
-p 8000:8000 \
go-aplpine ./go_service
这样每次更新都只需要替换volume内的服务,而不需要重新打包镜像了。
Docker-compose
上面说的都是单个服务的情况,实际开发中我们可能用到微服务,那么服务就不止一个了,官方是建议一个服务跑一个docker容器,这样我们就需要用到docker-compose管理多个服务。
原理是差不多的,因为懒,我上传到github了,大家都是程序员,我就不多说了,用代码交流吧,哈哈哈。
go_docker以上所述就是小编给大家介绍的《我的Go服务Docker部署模版》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ANSI Common Lisp
Paul Graham / Prentice Hall / 1995-11-12 / USD 116.40
For use as a core text supplement in any course covering common LISP such as Artificial Intelligence or Concepts of Programming Languages. Teaching students new and more powerful ways of thinking abo......一起来看看 《ANSI Common Lisp》 这本书的介绍吧!