前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker Stack 部署web集群

Docker Stack 部署web集群

作者头像
lpxxn
发布2018-01-31 13:58:43
1.5K0
发布2018-01-31 13:58:43
举报
文章被收录于专栏:技术之路技术之路

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

环境

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

代码语言:javascript
复制
主服务器:192.168.0.105  // 也是私有仓库服务器
服务器2: 192.168.0.49

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

设置Docker Swarm

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

代码语言:javascript
复制
docker swarm init

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

  在192.168.0.49上执行命令加入swarm

代码语言:javascript
复制
docker swarm join --token SWMTKN-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.168.0.105:2377

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

web服务

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

代码语言:javascript
复制
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境像,把代码复制到相应文件夹,暴露出端口,运行程序。简单吧

代码语言:javascript
复制
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 8000

CMD ["./godockerswarm"]

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

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

代码语言:javascript
复制
docker build . -t goweb:1.0

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

代码语言:javascript
复制
docker run -p 8100:8000 7a7e3

镜像提交到私有仓库

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

  地址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重新命名

代码语言:javascript
复制
docker tag goweb:1.0 lpxxn.com:5000/goweb:1.0

推送

代码语言:javascript
复制
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

代码语言:javascript
复制
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命令

代码语言:javascript
复制
docker stack deploy -c docker-compose.yml mygoweb

 查看启动的服务

代码语言:javascript
复制
docker service ps mygoweb

测试服务

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

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

 我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境
  • 设置Docker Swarm
  • web服务
  • Docker file
  • 镜像提交到私有仓库
  •  docker-compose 文件
  • 部署应用
  • 测试服务
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档