资讯专栏INFORMATION COLUMN

我的Go服务Docker部署模版

xorpay / 2273人阅读

摘要:关于网上关于的介绍有很多,我就不复制粘贴了,大家可以自行查找。上面说的都是单个服务的情况,实际开发中我们可能用到微服务,那么服务就不止一个了,官方是建议一个服务跑一个容器,这样我们就需要用到管理多个服务。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27599.html

相关文章

  • 进军Docker 1.12,将代理与Swarm完美整合

    摘要:其一将用于代理与面向公开的服务之间的通信。数据库上线并开始运行后,我们接下来部署后端。现在,会帮助我们完成全部负载均衡工作。这样所有来自代理的请求都将指向网络,并由后者跨越全部实例执行负载均衡。 七夕大家过得怎么样?今天数人云带大家回归技术和干货。虽然我们能够在Swarm集群当中部署任意数量的服务,但这并不代表各项服务全部可为用户所访问。而新的Swarm网络使得各项服务之间能够更为轻松...

    cartoon 评论0 收藏0
  • 前端需要了解的 Docker 与 Kubernetes 知识

    摘要:打开终端执行,再开一个终端输入输出,则表示该服务没有问题。将服务打包成镜像,然后将镜像实例化并运行,方便部署。此处以我的账号为例,需要推送到你自己的账号。是一种自动化运维工具,本文主要需要了解,,三个概念。至此成功使用部署应用。 本文将以一个简单的示例演示如何使用 Docker 与 Kubernetes 部署应用上线。 Http Service 首先使用 Go 语言搭建一个简单的 Ht...

    ChristmasBoy 评论0 收藏0
  • 前端需要了解的 Docker 与 Kubernetes 知识

    摘要:打开终端执行,再开一个终端输入输出,则表示该服务没有问题。将服务打包成镜像,然后将镜像实例化并运行,方便部署。此处以我的账号为例,需要推送到你自己的账号。是一种自动化运维工具,本文主要需要了解,,三个概念。至此成功使用部署应用。 本文将以一个简单的示例演示如何使用 Docker 与 Kubernetes 部署应用上线。 Http Service 首先使用 Go 语言搭建一个简单的 Ht...

    孙吉亮 评论0 收藏0
  • 如何用 Ansible 部署 Kubernetes 集群到 OpenStack

    摘要:测试后,使用来发布。部署软件组件,启动虚拟机,将虚拟机分类到和节点,然后部署密钥清单。集群自动化集群配置由三个控制。自签证书签署的服务器端证书和它的密钥文件。 我们之前聊了把OpenStack跑在K8S上,如何基于Kubernetes在TCP云端创建私有云解决方法,运用在生产或在OpenStack启动虚拟化。今天换个姿势,我们来看看如何在OpenStack虚拟机上运行Kubernete...

    jiekechoo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<