Docker愈来愈成熟,功能也愈来愈强大。使用Dokcer Stack作服务集群也是很是的方便,docker 本身就提供了负载功能,感受很方便,就想给你们分享一下,作一个简单的教程。html
环境
我是用了两台centos7的虚拟机来作这个教程他们的ip分别是git
主服务器:192.168.0.105 // 也是私有仓库服务器
服务器2: 192.168.0.49
github
这篇帖子中全部的代码 github地址:https://github.com/lpxxn/godo...golang
设置Docker Swarm
我以192.168.0.105作为主服务器,在他上面开启swarmweb
docker swarm init
执行命令后会给出加入这个swarm的命令 docker
在192.168.0.49上执行命令加入swarmcentos
docker swarm join --token SWMTKN-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.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 . /go/src/github.com/lpxxn/godockerswarm/
WORKDIR /go/src/github.com/lpxxn/godockerswarm/
RUN go build
EXPOSE 8000
CMD ["./godockerswarm"]
复制代码
看一下dockerfile 文件所在的文件夹
在这个目录下执行docker build 命令:
docker build . -t goweb:1.0
你能够运行一下新生成的镜像
docker run -p 8100:8000 7a7e3
镜像提交到私有仓库
关于如何搭建私有仓库服务器我这里的就多说了,能够去我以前的帖子看一下
地址1:http://www.cnblogs.com/li-pen...
地址2:https://yq.aliyun.com/article...
也能够用harbor本身搭建,这个我尚未作过教程,有时间再写。
由于集群的上机器是自动从仓库取镜像而后再运行程序,因此须要将咱们上面生成的镜像推送到咱们的私有仓库上去。我本身搭建的
使用tag从新命名
docker tag goweb:1.0 lpxxn.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/compo...
复制代码
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 为咱们作了负载了。
本文做者:lpxxn
本文为云栖社区原创内容,未经容许不得转载。