分享
  1. 首页
  2. 文章

我的Go服务Docker部署模版

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

关于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


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:Harman

查看原文:我的Go服务Docker部署模版

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏