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--425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.168.0.105:

  这样我们就建好了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 CMD ["./godockerswarm"]

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

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

docker build . -t goweb:1.0

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

docker run -p : 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重新命名

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

推送

docker push lpxxn.com:/goweb:1.0

docker-compose 文件

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

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

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

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

version: ""
services:
web:
image: lpxxn.com:/goweb:1.0
deploy:
replicas:
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

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

Docker Stack 集群部属服务的更多相关文章

  1. 使用 Istio CNI 支持强安全 TKE Stack 集群的服务网格流量捕获

    作者 陈计节,企业应用云原生架构师,在腾讯企业 IT 负责云原生应用治理产品的设计与研发工作,主要研究利用容器集群和服务网格等云原生实践模式降低微服务开发与治理门槛并提升运营效率. 摘要 给需要快速解 ...

  2. Docker 0x13: Docker 构建集群/服务/Compose/分布式服务栈

    目录 Docker 构建集群/服务/Compose/分布式服务栈 集群 初始化集群服务 安装docker-machine 管理节点和工作节点 docker集群构建完成 集群中部署应用 集群服务访问特性 ...

  3. 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

    3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...

  4. Docker Swarm 集群环境搭建及弹性服务部署

    上一篇文章<Docker Swarm 集群管理利器核心概念扫盲>中我们把 Swarm 重要的概念性知识给大家讲解了一波,理论完事就该实战了,这篇文章带大家从零开始,搭建 Docker Sw ...

  5. Docker容器集群管理之Swarm

    Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...

  6. Docker Swarm——集群管理

    前言 之前在总结docker machine的时候,当时对docker理解还不够深入,甚至还不知道 docker machine 与 docker swarm 的区别. 在查阅资料以及官方文档之后,今 ...

  7. 通过docker-machine和etcd部署docker swarm集群

    本片文章介绍一下 使用docker-machine 搭建docker swarm 集群:docker swarm是docker 官方搭建的容器集群编排工具:容器编排,就是可以使你像使用一太机器一样来使 ...

  8. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  9. Docker Swarm集群

    Docker Swarm集群 IP 10.6.17.11  管理节点 IP 10.6.17.12   节点A IP 10.6.17.13   节点B IP 10.6.17.14   节点C 安装 Sw ...

随机推荐

  1. 笔记(json)实现前后端交互案例

    1:首先创建一个项目如:(说明:此项目是在eclipse创建的) 2.在创建相对应的包如: 3.创建写好相对应的配置文件如: applicationContext.xml具体内容如下: <?xm ...

  2. Activity的直接子类

    Activity的直接子类 AccountAuthenticatorActivity, AliasActivity ExpandableListActivity FragmentActivity Li ...

  3. liunx

    一键安装地址:https://lnmp.org/install.html

  4. PHP求解一个值是否为质数

    /** * 求解一个值是否为质数 * * @param $a * @return int 0是 1不是 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function ...

  5. UWP ListView下模板宽度问题

    在ListView中模板的宽度默认不会根据listView的宽度改变为改变,这需要更改一下设置,重点在于设置HorizontalContentAlignment的拉伸模式.注意是HorizontalC ...

  6. Relax信息学题库须知

    Relax信息学题库须知 1.本题库于2017.10.15开始建设(建设中),私聊我便可成为题库管理员,关注我即可成为题库成员.我的QQ:2026503022,微信:dy060207. 2.本题库的建 ...

  7. Web前端学习——JavaScript

    一.JavaScript介绍JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚 ...

  8. Windows 服务多语言化时读取配置文件失败的问题。

    在Installer中,按一般读取配置文件的方法(ConfigurationManager.AppSettings["CultureName"])读取不到内容. 可以这样读取: v ...

  9. Springboot学习记录1--概念介绍以及环境搭建

    摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...

  10. SSIS中循环遍历组件[Foreach Loop Container]

    背景 每月给业务部门提取数据,每个分公司都要提取一般,先跑SQL,再粘贴到Excel中,然后发邮件给相关的人员.费时费力,还容易粘贴错位.因此,需要通过一个程序完成这些步骤.我首先想到的是通过SSIS ...