Docker Stack 部署web集群的方法步骤

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-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 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命令:

docker build . -t goweb:1.0

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

docker run -p 8100:8000 7a7e3

镜像提交到私有仓库

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

地址:https://www.jb51.net/article/156168.htm

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

使用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/compose/compose-file/

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为我们做了负载了。

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Docker容器的日志处理

    Docker有很多的日志插件,默认使用 json-file,只有使用json-file时,sudo docker logs -f 才可以显示,输入以下命令查看docker日志插件: $ sudo docker info | grep Logging 这里先说明一下,当容器运行时,docker会在宿主机上创建一个该容器相关的文件,然后将容器产生的日志转存到该文件下.docker logs -f 命令就会找到该文件内容并显示在终端上. 我们都知道docker logs -f会将所有对应的服务日志输出

  • 你可能不知道的docker命令奇淫怪巧

    Intro 介绍并收录一些可能会用到的一些简单实用却很少有人用的 docker 命令 dangling images build 自己的 docker 镜像的时候,有时会遇到用一个甚至多个中间层镜像,这会一定程度上减少最终打包出来 docker 镜像的大小,但是会产生一些tag 为 none 的无用镜像,也称为悬挂镜像 (dangling images) 列出所有的 dangling images: docker images -f "dangling=true" 删除所有的 dang

  • CentOS版本问题安装Docker报错的解决方案

    1. 版本信息 # cat /etc/system-release CentOS Linux release 7.2.1511 (Core) # uname -a Linux k8s-daniel-3 3.10.0-327.28.3.el7.x86_64 #1 SMP Thu Aug 18 19:05:49 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 2. Docker的安装和错误 直接使用yum -y install docker进行安装, 然后无法启动.

  • Docker容器间通讯直接路由方式实现网络通讯

    概述 就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要.再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题.本文就来尝试一下. 此时两台主机上的Docker容器如何直接通过

  • Spring Boot和Docker实现微服务部署的方法

    Spring boot 开发轻巧的微服务提供了便利,Docker 的发展又极大的方便了微服务的部署.这篇文章介绍一下如果借助 maven 来快速的生成微服务的镜像以及快速启动服务. 其实将 Spring Boot 项目用 Docker 部署也不是什么多么神秘的技术,也要先生成镜像,再用镜像启动容器,如果说有什么方便的地方,也就是一些工具可以帮助我们节省手动操作的过程. 知识背景: 掌握 docker 的安装以及基本的操作,熟悉 Dockerfile 文件创建镜像的方法. 创建 Spring bo

  • 用Docker快速构建LEMP环境的方法示例

    LEMP (Linux + Nginx + MySQL + PHP) 基本是如今网页开发者的必备环境,正常情况下我们可以直接通过系统包管理工具如 apt.yum 直接安装使用,然而由于兼容考虑,系统自带的软件源往往更新缓慢,在半年左右就会停滞在上个版本,影响开发者对新功能的跟进测试. 为了追求最新版本,不少开发者开始下载源码包自己进行编译,但过程过于繁琐,到后来也催化出类似 Oneinstack.lamp.sh 等一键安装包. 而 Docker 的推出,可以大大简化以上的过程.在 Docker

  • Docker创建MySQL的讲解

    1.下载MySQL Image 命令: docker pull mysql 2.创建容器 命令样例: sudo docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql 命令说明: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具

  • 树莓派安装Docker的方法步骤

    因为树莓派是ARM架构的,所以Docker的安装和使用也都有不同.需要讲的内容比较多,这里单挑出来. 树莓派是基于ARM架构的,和PC不同.所以即使树莓派上能做一些docker镜像,也不能在别的PC上运行.反过来别的PC上的docker镜像,也不能在树莓派上运行. 如果需要找树莓派专用的镜像,那就在Dockerhub上搜索ARM或Rpi相关就能找到了. 有一个叫Hypriot的仓库制作了非常多树莓派专用docker,可以参考下. 树莓派参考:Get Docker CE for Debian 参考

  • 详解docker私有仓库搭建与使用实战

    hub.docker.com上可以保存镜像,但是网速相对较慢,在内部环境中搭建一个私有的公共仓库是个更好的方案,今天我们就来实战搭建私有docker仓库吧: 环境规划 需要两台机器:docker私服仓库的server和使用docker的普通机器,这两个机器都是ubuntu16版本的server,ip信息如下: 机器名 ip 功能 docker-registry 192.168.119.148 docker私有仓库服务器 docker-app 192.168.119.155 运行docker服务的

  • 使用docker创建静态网站应用(多种方式)

    能承载静态网站的服务器有很多,本文使用,nginx.apache.tomcat服务器演示docker静态网站应用设置 一,创建docker文件, 不同服务器的docker文件不一样,下面分别创建nginx.apache.tomcat三个服务器的docker文件,其实主要就是区别于FROM标签于项目文件目录 目录结构褥子: 1,nginx 的 docker文件 FROM nginx COPY ./www /usr/share/nginx/html/ WORKDIR /usr/share/nginx

随机推荐