分享
  1. 首页
  2. 文章

Docker Stack 部署web集群

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

Docker越来越成熟,功能也越来越强大。使用Dokcer Stack做服务集群也是非常的方便,docker 自己就提供了负载功能,感觉很方便,就想给大家分享一下,做一个简单的教程。

环境

我是用了两台centos7的虚拟机来做这个教程他们的ip分别是

主服务器:192.168.0.105// 也是私有仓库服务器服务器2:192.168.0.49

这篇帖子中所有的代码 github地址:https://github.com/lpxxn/godockerswarm

设置Docker Swarm

我以192.168.0.105做为主服务器,在他上面开启swarm

docker swarm init

执行命令后会给出加入这个swarm的命令


在192.168.0.49上执行命令加入swarm

docker swarm join --token SWMTKN-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo192.168.0.105:2377


这样我们就建好了swarm,两台主机现在建立好了关系。


web服务

web服务是用go语言写一个简单的接口,返回主机的名称:这样方便我们查看是否有负载

package main

import (

"fmt""log""net/http""os")

func main() {

http.HandleFunc("/hi", func(w http.ResponseWriter, r *http.Request) {

hostName, _ := os.Hostname()

fmt.Fprintf(w, "HostName: %s", hostName)

})

log.Fatal(http.ListenAndServe(":8000", nil))

}


Docker file

看一下dockerfile 文件:

执行的意思就是基于golang境像,把代码复制到相应文件夹,暴露出端口,运行程序。简单吧

FROM golang

# Copy the current directory contents into the container

COPY . /go/src/github.com/lpxxn/godockerswarm/WORKDIR /go/src/github.com/lpxxn/godockerswarm/RUN go build

EXPOSE 8000CMD ["./godockerswarm"]

看一下dockerfile 文件所在的文件夹


在这个目录下执行docker build 命令:

docker build . -t goweb:1.0


你可以运行一下新生成的镜像

docker run -p8100:80007a7e3


镜像提交到私有仓库

关于如何搭建私有仓库服务器我这里的就多说了,可以去我之前的帖子看一下

地址1:http://www.cnblogs.com/li-peng/p/6511331.html

地址2:https://yq.aliyun.com/articles/303216?spm=5176.8091938.0.0.2ce387dadknIQu

也可以用harbor自己搭建,这个我还没有做过教程,有时间再写。


因为集群的上机器是自动从仓库取镜像然后再运行程序,所以需要将我们上面生成的镜像推送到我们的私有仓库上去。我自己搭建的

使用tag重新命名

docker tag goweb:1.0lpxxn.com:5000/goweb:1.0

推送

docker push lpxxn.com:5000/goweb:1.0

docker-compose 文件

接下来创建docker-compose.yml文件

image 就是我们上面创建好的镜像。运行5个应用程序,docker 会自己做负载,端口映射8111,失败时自动重启服务,并且创建了自己的网络,当有多个server服务时这个非常有用。

里面的具体参数,大家可以看官方教程:

https://docs.docker.com/compose/compose-file/#dockerfile

version:"3"services:

web:

image: lpxxn.com:5000/goweb:1.0 deploy:

replicas: 5 resources:

limits:

cpus: "0.1" memory: 50M

restart_policy:

condition: on-failure

ports:

-"8111:8000" networks:

- gowebnet

networks:

gowebnet:


部署应用

到了最后的阶段了,部属一样很简单,执行deploy命令

docker stack deploy -c docker-compose.yml mygoweb

查看启动的服务

docker service ps mygoweb



测试服务

看这些返回的主机名:不一样吧。docker 为我们做了负载了。

这篇帖子中所有的代码 github地址:https://github.com/lpxxn/godockerswarm

作者:李鹏

出处:http://www.cnblogs.com/li-peng/


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

本文来自:简书

感谢作者:TimeHermit

查看原文:Docker Stack 部署web集群

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

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

用户登录

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

今日阅读排行

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

一周阅读排行

    加载中

关注我

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

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

给该专栏投稿 写篇新文章

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

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