docker越来越成熟,功能也越来越强大。使用dokcer stack做服务集群也是非常的方便,docker自己就提供了负载功能,感觉很方便,就想给大家分享一下,做一个简单的教程。
环境
我是用了两台centos7的虚拟机来做这个教程他们的ip分别是
1
2
|
主服务器:192.168.0.105 // 也是私有仓库服务器
服务器2: 192.168.0.49
|
这篇帖子中所有的代码 github地址:https://github.com/lpxxn/godockerswarm
设置docker swarm
我以192.168.0.105做为主服务器,在他上面开启swarm
1
|
docker swarm init
|
执行命令后会给出加入这个swarm的命令
在192.168.0.49上执行命令加入swarm
1
|
docker swarm join --token swmtkn-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.168.0.105:2377
|
这样我们就建好了swarm,两台主机现在建立好了关系。
web服务
web服务是用go语言写一个简单的接口,返回主机的名称:这样方便我们查看是否有负载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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境像,把代码复制到相应文件夹,暴露出端口,运行程序。简单吧
1
2
3
4
5
6
7
8
9
10
11
12
|
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命令:
1
|
docker build . -t goweb:1.0
|
你可以运行一下新生成的镜像
1
|
docker run -p 8100:8000 7a7e3
|
镜像提交到私有仓库
关于如何搭建私有仓库服务器我这里的就多说了,可以去我之前的帖子看一下
地址:http://www.zzvips.com/article/148718.html
因为集群的上机器是自动从仓库取镜像然后再运行程序,所以需要将我们上面生成的镜像推送到我们的私有仓库上去。我自己搭建的
使用tag重新命名
1
|
docker tag goweb:1.0 lpxxn.com:5000 /goweb :1.0
|
推送
1
|
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/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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命令
1
|
docker stack deploy -c docker-compose.yml mygoweb
|
查看启动的服务
1
|
docker service ps mygoweb
|
测试服务
看这些返回的主机名:不一样吧。docker为我们做了负载了。
这篇帖子中所有的代码github地址:https://github.com/lpxxn/godockerswarm
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/li-peng/p/8144372.html