博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker Stack 部署web集群
阅读量:6915 次
发布时间:2019-06-27

本文共 2068 字,大约阅读时间需要 6 分钟。

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

环境

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

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

服务器2: 192.168.0.49
  

  这篇帖子中所有的代码 github地址:

设置Docker Swarm

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

docker swarm init

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

clipboard.png

  在192.168.0.49上执行命令加入swarm

docker swarm join --token SWMTKN-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.168.0.105:2377

clipboard.png

  这样我们就建好了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 8000

CMD ["./godockerswarm"]

复制代码

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

clipboard.png

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

docker build . -t goweb:1.0

clipboard.png

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

docker run -p 8100:8000 7a7e3

clipboard.png

镜像提交到私有仓库

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

  地址1:

  地址2:

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

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

使用tag重新命名

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

clipboard.png

推送

docker push lpxxn.com:5000/goweb:1.0

clipboard.png

docker-compose 文件

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

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

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

复制代码

version: "3"
services:
web:

image: lpxxn.com:5000/goweb:1.0deploy:  replicas: 5  resources:    limits:       cpus: "0.1"      memory: 50M  restart_policy:    condition: on-failureports:  - "8111:8000"networks:   - gowebnet

networks:

gowebnet:
复制代码

部署应用

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

docker stack deploy -c docker-compose.yml mygoweb

clipboard.png

查看启动的服务

docker service ps mygoweb

clipboard.png

测试服务

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

clipboard.png

本文作者:lpxxn

本文为云栖社区原创内容,未经允许不得转载。

你可能感兴趣的文章
vue1和Vue2 调起tel 通话区别的写法
查看>>
剑指offer09
查看>>
在SublimeText上搭建ReactJS开发环境
查看>>
http://www.2cto.com/os/201306/220146.html
查看>>
集成计算引擎在大型企业绩效考核系统的应用方案
查看>>
JEESZ-kafka集群安装
查看>>
Python之向日志输出中添加上下文信息
查看>>
理解伪元素
查看>>
Xen虚拟机模版制作
查看>>
Input输入对象常用方法详解
查看>>
阿里云云服务器硬盘分区及挂载
查看>>
Linux进阶知识点(1)
查看>>
shiro源码分析(六)CredentialsMatcher 的案例分析
查看>>
Mysql数据库备份与恢复
查看>>
如何做活动页面的滚动动画?让用户体验MAX的demo在这里!
查看>>
数据库基本操作
查看>>
云服务能力评估,腾讯云TStack首批通过私有云“一级能力”认证
查看>>
Apache 用户名密码验证
查看>>
三周第三次课 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录
查看>>
中兴智能视觉大数据报道:人工智能带动相关产业规模达到1000亿元
查看>>